टाइल की लेयर

प्लैटफ़ॉर्म चुनें: 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 पर मैप, या ज़ूम लेवल 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 में से किसी एक के साथ किया जा सकता है या tileSize को 512 पर सेट करके, GMSURLTileLayer. tileSize प्रॉपर्टी से, टाइल मिलने पर पिक्सल की संख्या के बारे में पता चलता है चित्र के रूप में प्रदर्शन को प्राथमिकता दी जाएगी; यह डिफ़ॉल्ट रूप से 256 पर सेट होता है — डाइमेंशन की इमेज दिखाई गई है.

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

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

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

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];