टाइल की लेयर

प्लैटफ़ॉर्म चुनें: Android iOS JavaScript

मैप के सबसे ऊपर, टाइल लेयर के तौर पर इमेज जोड़ी जा सकती हैं. टाइल लेयर को मैप टाइल के ऊपर, एक खास ज़ूम लेवल पर रखा जाता है. ज़रूरत के मुताबिक टाइलें होने से, कई ज़ूम लेवल पर पूरे मैप के लिए Google के मैप के डेटा को पूरा किया जा सकता है.

शुरुआती जानकारी

टाइल लेयर (जिसे कभी-कभी टाइल ओवरले भी कहा जाता है) से, Google की बेस मैप टाइल पर इमेज को सुपरइंपोज़ किया जा सकता है. अपने ऐप्लिकेशन में लोकप्रिय जगहों या ट्रैफ़िक की जानकारी और स्थानीय तस्वीरों जैसे डेटा को जोड़ने का यह एक शानदार तरीका है. kGMSTypeNone मैप टाइप के साथ जोड़ने पर, टाइल लेयर, Google के बुनियादी मैप के डेटा को आपके डेटा से बदल देती हैं.

टाइल लेयर तब काम आती हैं, जब आपको मैप पर कोई बड़ी तस्वीर जोड़नी हो, जो आम तौर पर बड़े भौगोलिक इलाकों को कवर करती हो. इसके उलट, ग्राउंड ओवरले तब काम करते हैं, जब आपको मैप पर किसी एक इमेज को ठीक करना हो.

टाइल निर्देशांक

Maps API, हर ज़ूम लेवल पर तस्वीरों को स्क्वेयर मैप टाइल के सेट में बांट देता है, जिन्हें क्रम से लगाए गए ग्रिड में व्यवस्थित किया जाता है. जब कोई मैप किसी नई जगह या किसी नए ज़ूम लेवल पर स्क्रोल करता है, तो Maps API यह पता लगाता है कि किन टाइल की ज़रूरत है. इसके बाद, उस टाइल को टाइल के एक सेट में बदल देता है, जिसे फिर से हासिल किया जाना है.

Google जब मर्केटर प्रोजेक्शन को लागू करता है, तो मैप के उत्तर-पश्चिमी कोने में निर्देशांक (0,0) वाली टाइल हमेशा होती है. इसमें x की वैल्यू पश्चिम से पूर्व की ओर बढ़ती है और y की वैल्यू उत्तर से दक्षिण तक बढ़ती है. टाइलों को उस ऑरिजिन के x,y निर्देशांक का इस्तेमाल करके इंडेक्स किया जाता है. उदाहरण के लिए, ज़ूम लेवल 2 पर, जब पृथ्वी को 16 टाइल में बांटा जाता है, तो हर टाइल को एक यूनीक x,y पेयर से रेफ़रंस किया जा सकता है:

दुनिया का मैप, जिसमें टाइल के चार कॉलम और चार पंक्तियां हैं.

हर मैप टाइल का साइज़ 256x256 पॉइंट स्क्वेयर होता है. ज़ूम स्तर 0 पर, पूरी दुनिया एक ही टाइल में रेंडर हो जाती है. हर ज़ूम लेवल, ज़ूम करने की सुविधा को दो गुना बढ़ा देता है. इसलिए, ज़ूम लेवल 1 पर, मैप को टाइल की 2x2 ग्रिड या ज़ूम लेवल 2 पर 4x4 ग्रिड, ज़ूम लेवल 3 पर 8x8 ग्रिड वगैरह के रूप में रेंडर किया जाएगा. अगर किसी टाइल लेयर के लिए इमेज बनाई जा रही हैं, तो आपको हर उस ज़ूम लेवल पर हर टाइल के लिए 256x256 पॉइंट वाली नई इमेज बनानी होगी जिसे आपको सपोर्ट करना है.

टाइल लेयर जोड़ना

  1. कोई GMSURLTileLayer ऑब्जेक्ट या GMSTileLayer/GMSSyncTileLayer की कस्टम सब-क्लास इंस्टैंशिएट करें.
  2. आपके पास zIndex प्रॉपर्टी में बदलाव करने का विकल्प है, ताकि अन्य टाइल लेयर के हिसाब से प्रॉपर्टी की जगह को अडजस्ट किया जा सके.
  3. GMSTileLayer ऑब्जेक्ट को मैप पर असाइन करने के लिए, उसकी map प्रॉपर्टी सेट करें.

iOS के लिए Maps SDK टूल, तीन क्लास उपलब्ध कराता है. इनका इस्तेमाल टाइल लेयर लागू करने के लिए किया जा सकता है. हर क्लास में, आपको यह तय करना होगा कि {x,y,zoom} निर्देशांक के दिए गए सेट के लिए, सही मैप टाइल को कैसे फ़ेच किया जाए. यहां उपलब्ध विकल्प दिए गए हैं:

  • सब-क्लास GMSSyncTileLayer, जो tileForX:y:zoom को लागू करने के तरीके से UIImage इंस्टेंस दिखाती है.
  • सब-क्लास GMSTileLayer, जो एसिंक्रोनस तरीके requestTileForX:y:zoom को लागू करता है. यह बाद में टाइल इमेज के साथ कॉल करता है.
  • यूआरएल से अपने-आप टाइल फ़ेच करने के लिए, मौजूदा क्लास GMSURLTileLayer का इस्तेमाल करें. इससे आपको GMSTileURLConstructor ब्लॉक मिलेगा. GMSURLTileLayer एक ऐसी कंक्रीट क्लास है जिसे सब-क्लास नहीं किया जा सकता.

GMSSyncTileLayer या GMSTileLayer को सब-क्लास करने के मामले में nil टाइल वाला नतीजा देने पर, iOS के लिए Maps SDK टूल को पता चल जाएगा कि फ़िलहाल डेटा उपलब्ध नहीं है, लेकिन आने वाले समय में उपलब्ध हो सकता है. इसके अलावा, यह बताने के लिए कि इस जगह पर कोई टाइल नहीं है, kGMSTileLayerNoTile दिखाएं.

GMSURLTileLayer के लिए, GMSTileURLConstructor से nil लौटने से यह पता चलेगा कि इस जगह पर कोई टाइल नहीं है.

यूआरएल से टाइल पाने के लिए `GMSURLTilelayer` का इस्तेमाल करना

GMSURLTileLayer के लिए सब-क्लास की ज़रूरत नहीं है, लेकिन आपको GMSTileURLConstructor ब्लॉक लागू करना होगा. नीचे दिए गए कोड में बताया गया है कि कई मंज़िलों वाली इमारत के फ़्लोर प्लान को दिखाने के लिए, GMSURLTileLayer को कैसे इस्तेमाल करें.

Swift

let floor = 1

// Implement GMSTileURLConstructor
// Returns a Tile based on the x,y,zoom coordinates, and the requested floor
let urls: GMSTileURLConstructor = { (x, y, zoom) in
  let url = "https://www.example.com/floorplans/L\(floor)_\(zoom)_\(x)_\(y).png"
  return URL(string: url)
}

// Create the GMSTileLayer
let layer = GMSURLTileLayer(urlConstructor: urls)

// Display on the map at a specific zIndex
layer.zIndex = 100
layer.map = mapView
      

Objective-C

NSInteger floor = 1;

// Create the GMSTileLayer
GMSURLTileLayer *layer = [GMSURLTileLayer tileLayerWithURLConstructor:^NSURL * _Nullable(NSUInteger x, NSUInteger y, NSUInteger zoom) {
  NSString *url = [NSString stringWithFormat:@"https://www.example.com/floorplans/L%ld_%lu_%lu_%lu.png",
                   (long)floor, (unsigned long)zoom, (unsigned long)x, (unsigned long)y];
  return [NSURL URLWithString:url];
}];

// Display on the map at a specific zIndex
layer.zIndex = 100;
layer.map = mapView;
      

टाइल को UIImage के तौर पर दिखाने के लिए, GMSSyncTileLayer सब-क्लास

GMSSyncTileLayer और GMSTileLayer ऐसी ऐब्स्ट्रैक्ट क्लास हैं जिन्हें सब-क्लास करने के लिए डिज़ाइन किया गया है. टाइल को UIImage के तौर पर दिखाने के लिए, इन क्लास का इस्तेमाल किया जा सकता है. नीचे दिए गए उदाहरण में, GMSSyncTileLayer को सब-क्लास करके, मैप की कुछ टाइल पर कस्टम इमेज रेंडर करने का तरीका बताया गया है.

Swift

class TestTileLayer: GMSSyncTileLayer {
  override func tileFor(x: UInt, y: UInt, zoom: UInt) -> UIImage? {
    // On every odd tile, render an image.
    if (x % 2 == 1) {
      return UIImage(named: "australia")
    } else {
      return kGMSTileLayerNoTile
    }
  }
}

      

Objective-C

@interface TestTileLayer : GMSSyncTileLayer
@end

@implementation TestTileLayer

- (UIImage *)tileForX:(NSUInteger)x y:(NSUInteger)y zoom:(NSUInteger)zoom {
  // On every odd tile, render an image.
  if (x % 2 == 1) {
    return [UIImage imageNamed:@"australia"];
  } else {
    return kGMSTileLayerNoTile;
  }
}

@end
      

लेयर को अपने मैप में जोड़ने के लिए, ऑब्जेक्ट को इंस्टैंशिएट करें और उसकी मैप प्रॉपर्टी सेट करें.

Swift

let layer = TestTileLayer()
layer.map = mapView
      

Objective-C

GMSTileLayer *layer = [[TestTileLayer alloc] init];
layer.map = mapView;
      

रेटिना डिवाइसों के लिए हाई डीपीआई टाइल

GMSSyncTileLayer या GMSURLTileLayer के साथ हाई डीपीआई इमेज का इस्तेमाल करने के लिए, tileSize को 512 पर सेट करें. tileSize प्रॉपर्टी से पता चलता है कि लौटाए गए टाइल इमेज कितने पिक्सल दिखाना पसंद करेंगे. यह डिफ़ॉल्ट रूप से 256 पिक्सल पर सेट हो जाती है — यह डाइमेंशन ऐसे डिवाइस पर Google Maps टाइल का डाइमेंशन होता है जो रेटिना डिवाइस नहीं है.

अगर हाई डीपीआई डिवाइस पर सामान्य डीपीआई टाइल दिखाई जा रही हैं, तो tileSize को 512 पर सेट करके इमेज का साइज़ बढ़ाया जा सकता है. ध्यान दें कि इमेज को बड़ा करने से इमेज की क्वालिटी खराब हो सकती है. खास तौर पर फ़ाइन लाइन या टेक्स्ट के मामले में ऐसा हो सकता है. सबसे अच्छे नतीजे पाने के लिए, tileSize और इमेज डीपीआई को डिसप्ले से मैच करें. रेटिना डिवाइस पर दिखाए गए मैप 512 के tileSize के साथ हाई डीपीआई इमेज दिखाते समय बेहतर दिखेंगे. जबकि रेटिना डिवाइस पर दिखाए गए मैप सामान्य इमेज और डिफ़ॉल्ट 256 वाले tileSize के साथ अच्छे दिखेंगे.

पुरानी टाइल हटाई जा रही हैं

अगर लेयर से दी गई टाइल 'पुरानी' हो जाती हैं, तो रीफ़्रेश करने के लिए लेयर पर clearTileCache तरीके को कॉल किया जाना चाहिए. ऐसा करने से, इस लेयर की सभी टाइल फिर से लोड हो जाएंगी.

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];