2D टाइल की खास जानकारी

यूरोपियन इकनॉमिक एरिया (ईईए) के डेवलपर

रोडमैप का उदाहरणMap Tiles, दुनिया को इंडेक्स की गई ग्रिड में बांटने का तरीका है. इसकी मदद से, कार्टोग्राफ़िक स्केल के हिसाब से मैप के डेटा को आसानी से और डाइनैमिक तरीके से ऐक्सेस और इस्तेमाल किया जा सकता है. Map Tiles API की मदद से, थीम के हिसाब से कई जियोडेटासेट ऐक्सेस किए जा सकते हैं. इनमें Google के चुनिंदा जियोडेटासेट भी शामिल हैं:

  • Google के कार्टोग्राफ़िक स्टाइलिंग के साथ, वेक्टर टोपोग्राफ़िक डेटा पर आधारित रोडमैप इमेज टाइलें.

  • सैटलाइट और एयरबोर्न, दोनों तरह के कैमरों से ली गई ऑर्थोफ़ोटोग्राफ़ी. इससे पृथ्वी की ऊपर से (नादिर) ली गई इमेज मिलती हैं.

  • हिलशेड कंटूर मैप.

2D Map Tiles, सभी जियोरेफ़रंस वाली होती हैं और एक-दूसरे के साथ अलाइन होती हैं. इन्हें व्यूपोर्ट की भौगोलिक सीमा और ज़ूम लेवल के आधार पर चुना जाता है. ज़ूम लेवल, शून्य (पूरी दुनिया को देखने के लिए) से लेकर 22 (सड़कें और ब्लॉक देखने के लिए) तक होते हैं.

मैप की थीम

मैप की इन थीम के लिए, मैप टाइलें पाई जा सकती हैं.

मैप की थीम ब्यौरा
रोडमैप सड़कें, इमारतें, लोकप्रिय जगहें, और राजनैतिक सीमाएं
सैटलाइट अंतरिक्ष से ली गई फ़ोटो वाली इमेज
इलाका कंटूर मैप, जिसमें पेड़-पौधों जैसी प्राकृतिक चीज़ें दिखती हैं

Map Tiles API से मैप टाइलें पाने के लिए, सबसे पहले सेशन टोकन का अनुरोध करना होगा. सेशन टोकन, आपके मैप और व्यूपोर्ट की मौजूदा स्थिति को ट्रैक करता है. सेशन टोकन सेट अप करते समय, आपको mapType की वैल्यू, अपनी पसंद की मैप थीम के हिसाब से सेट करनी होगी. इसके बाद, आपको Map Tiles API को भेजे जाने वाले हर अनुरोध में सेशन टोकन शामिल करना होगा.

व्यूपोर्ट की जानकारी के अनुरोध

व्यूपोर्ट, दुनिया के नज़ारे को फ़्रेम करने वाले बॉक्स का साइज़ तय करता है. व्यूपोर्ट की जानकारी के अनुरोधों से, आपके मौजूदा व्यूपोर्ट को बनाने वाली मैप टाइलें की जानकारी मिलती है. व्यूपोर्ट की जानकारी का अनुरोध करने की वजह यह है कि आप ऐसे ज़ूम लेवल पर इमेज का अनुरोध न करें जो मौजूद नहीं हैं.

उदाहरण के लिए, ज़्यादातर शहरों की इमेज, ज़ूम लेवल 22 पर मौजूद होती हैं. हालांकि, समुद्र की इमेज, ज़ूम लेवल 22 पर मौजूद नहीं होतीं, क्योंकि इससे सिर्फ़ नीले रंग के चौकोर दिखेंगे.

व्यूपोर्ट का अनुरोध, इस फ़ॉर्मैट में एक एचटीटीपीएस जीईटी अनुरोध होता है.

curl "https://tile.googleapis.com/tile/v1/viewport?session=YOUR_SESSION_TOKEN&key=YOUR_API_KEY&zoom=zoom&north=north&south=south&east=east&west=west"

अनुरोध में ये फ़ील्ड शामिल होते हैं:

zoom
व्यूपोर्ट का ज़ूम लेवल.
north, south, east, west
व्यूपोर्ट में सबसे उत्तरी, दक्षिणी, पूर्वी, और पश्चिमी पॉइंट. इन्हें डिग्री में दिखाया जाता है. उत्तर और दक्षिण की वैल्यू, (-90,90) के बीच होनी चाहिए. वहीं, पूर्व और पश्चिम की वैल्यू, (-180, 180) के बीच होनी चाहिए. एंटीमेरिडियन को पार करने वाली सीमाओं को दिखाने के लिए, पश्चिम की वैल्यू पॉज़िटिव (उदाहरण के लिए, 170) और पूर्व की वैल्यू नेगेटिव (उदाहरण के लिए, -170) हो सकती है. सभी पैरामीटर ज़रूरी हैं.

व्यूपोर्ट की जानकारी के रिस्पॉन्स

व्यूपोर्ट के रिस्पॉन्स से पता चलता है कि किन इलाकों की इमेज मौजूद हैं और वे किस ज़ूम लेवल पर मौजूद हैं. व्यूपोर्ट की जानकारी का रिस्पॉन्स, इस फ़ॉर्मैट में होता है.

{
  "copyright": "Map data ©2023",
  "maxZoomRects": [
    {
      "maxZoom": 19,
      "north": 90,
      "south": -90,
      "east": 180,
      "west": -180
    },
    {
      "maxZoom": 9,
      "north": 90,
      "south": -90,
      "east": 180,
      "west": -180
    },
    {
      "maxZoom": 14,
      "north": 84.375,
      "south": -84.375,
      "east": 180,
      "west": -180
    }, ...
  ]
}

रिस्पॉन्स के मुख्य हिस्से में ये फ़ील्ड शामिल होते हैं.

copyright
इसमें एट्रिब्यूशन स्ट्रिंग शामिल होती है. रोडमैप और सैटलाइट टाइलें दिखाने पर, आपको इसे अपने मैप पर दिखाना होगा. ज़्यादा जानकारी के लिए, Map Tiles API की नीतियां लेख पढ़ें.
maxZoomRect
इसमें बाउंडिंग रेक्टैंगल का कलेक्शन शामिल होता है. ये रेक्टैंगल, मौजूदा व्यूपोर्ट के साथ ओवरलैप होते हैं. इसमें हर रेक्टैंगल के लिए, ज़्यादा से ज़्यादा ज़ूम लेवल भी शामिल होता है.

टाइल कोऑर्डिनेट के फ़ंक्शन

ज़्यादातर प्रोग्रामिंग भाषाओं में टूल (सिंपल फ़ंक्शन) उपलब्ध होते हैं. इनकी मदद से, अक्षांश/देशांतर के पेयर को किसी खास ज़ूम लेवल पर टाइल कोऑर्डिनेट में बदला जा सकता है. JavaScript कोड का यह उदाहरण देखें. इसमें सबसे पहले latLng को पॉइंट में बदला जाता है. इसके बाद, पॉइंट को टाइल कोऑर्डिनेट में बदला जाता है.

var TILE_SIZE = 256;

function fromLatLngToPoint(latLng) {
  var mercator = -Math.log(Math.tan((0.25 + latLng.lat() / 360) * Math.PI));
  return {
    x: TILE_SIZE * (latLng.lng() / 360 + 0.5),
    y: TILE_SIZE / 2 * (1 +  mercator / Math.PI)
  };
}

function fromLatLngToTileCoord(latLng, zoom) {
  var point = fromLatLngToPoint(latLng);
  var scale = Math.pow(2, zoom);

  return {
    x: Math.floor(point.x * scale / TILE_SIZE),
    y: Math.floor(point.y * scale / TILE_SIZE),
    z: zoom
  };
}