आपके पास टाइल लेयर के तौर पर, अपने मैप पर इमेज जोड़ने का विकल्प होता है. टाइल लेयर, किसी खास ज़ूम करने के लेवल पर मैप की टाइल के ऊपर रखी जाती हैं. ज़्यादा टाइलें होने पर, 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 पॉइंट की इमेज बनाएं.
टाइल लेयर जोड़ना
- एक
GMSURLTileLayerऑब्जेक्ट याGMSTileLayerयाGMSSyncTileLayerकी पसंद के मुताबिक सबक्लास का इंस्टेंस बनाएं. - ज़रूरी नहीं: अन्य टाइल लेयर के मुकाबले इसकी पोज़िशन अडजस्ट करने के लिए,
zIndexप्रॉपर्टी में बदलाव करें. 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;
रेटिना डिवाइसों के लिए, हाई DPI टाइलें
tileSize को 512 पर सेट करके, GMSSyncTileLayer
या GMSURLTileLayer के साथ हाई DPI इमेज का इस्तेमाल किया जा सकता है.
tileSize प्रॉपर्टी, पिक्सल की वह संख्या दिखाती है जिसे लौटाए गए टाइल इमेज, डिफ़ॉल्ट रूप से दिखाने के लिए इस्तेमाल करते हैं. यह डिफ़ॉल्ट रूप से 256 पर सेट होती है. यह नॉन-रेटिना डिवाइस पर Google Maps की टाइल का डाइमेंशन है.
अगर हाई DPI डिवाइस पर सामान्य DPI टाइलें दिखाई जा रही हैं, तो tileSize को 512 पर सेट करके, इमेज को स्केल अप किया जा सकता है. ध्यान दें कि इमेज को स्केल अप करने से, इमेज की क्वालिटी कम हो सकती है. खास तौर पर, बारीक लाइनों या टेक्स्ट के लिए. सबसे अच्छे नतीजे पाने के लिए, tileSize और इमेज DPI को डिसप्ले से मैच करें. रेटिना डिवाइस पर दिखाए जाने वाले मैप, 512 के tileSize के साथ हाई DPI इमेज दिखाने पर सबसे अच्छे दिखेंगे. वहीं, नॉन-रेटिना डिवाइस पर दिखाए जाने वाले मैप, सामान्य इमेज और डिफ़ॉल्ट tileSize 256 के साथ बेहतरीन दिखेंगे.
पुरानी टाइलें मिटाना
अगर लेयर से मिली टाइलें 'पुरानी' हो जाती हैं, तो उन्हें रीफ़्रेश करने के लिए, लेयर पर clearTileCache मेथड को कॉल किया जाना चाहिए. इससे इस लेयर की सभी टाइलें फिर से लोड हो जाएंगी.
Swift
layer.clearTileCache()
Objective-C
[layer clearTileCache];