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

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

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

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

  • पहाड़ी की छाया वाले कंटूर मैप.

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

मैप की थीम

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

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

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

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

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

उदाहरण के लिए, ज़्यादातर शहरों की इमेज ज़ूम लेवल 22 पर होती है, लेकिन महासागर की इमेज ज़ूम लेवल 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
  };
}