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