ग्राउंड ओवरले ऐसे इमेज ओवरले होते हैं जो अक्षांश/देशांतर निर्देशांक से जुड़े होते हैं, ताकि मैप को खींचने या ज़ूम करने पर ये मूव कर सकें.
कोड सैंपल
GitHub पर ApiDemos रिपॉज़िटरी में एक सैंपल शामिल है, जो ग्राउंड ओवरले को दिखाता है:
- GroundOverlayDemoActivity - Java: Java में ग्राउंड ओवरले की सुविधाएं और लिसनर
- GroundOverlayDemoActivity - Kotlin: Kotlin में ग्राउंड ओवरले की सुविधाएं और लिसनर
शुरुआती जानकारी
ग्राउंड ओवरले वह इमेज होती है जिसे मैप पर जोड़ा जाता है. मार्कर के उलट, ग्राउंड ओवरले का ओरिएंटेशन स्क्रीन के बजाय पृथ्वी की सतह पर होता है. इसलिए, मैप को घुमाने, झुकाने या ज़ूम करने से इमेज का ओरिएंटेशन बदल जाएगा. ग्राउंड ओवरले तब काम आते हैं, जब आपको मैप पर किसी जगह की एक इमेज ठीक करनी हो. अगर आपको मैप के एक बड़े हिस्से को कवर करने वाली विस्तृत तस्वीरें जोड़नी हैं, तो आपको टाइल ओवरले इस्तेमाल करना चाहिए.
ओवरले जोड़ें
GroundOverlay
जोड़ने के लिए, एक GroundOverlayOptions
ऑब्जेक्ट बनाएं, जो इमेज और पोज़िशन, दोनों के बारे में बताता हो. आप वैकल्पिक रूप से अतिरिक्त सेटिंग तय कर सकते हैं जो मैप पर इमेज की
स्थिति पर असर डालेगी. ज़रूरी विकल्प तय करने के बाद, मैप पर इमेज जोड़ने के लिए ऑब्जेक्ट को GoogleMap.addGroundOverlay()
तरीके में पास करें. addGroundOverlay()
तरीका, GroundOverlay
ऑब्जेक्ट दिखाता है. अगर आपको बाद में इस ऑब्जेक्ट में बदलाव करना है, तो इसका रेफ़रंस अपने पास रखें.
सिलसिलेवार निर्देश:
- नया
GroundOverlayOptions
ऑब्जेक्ट इंस्टैंशिएट करें BitmapDescriptor
के तौर पर इमेज बताएं.- उपलब्ध तरीकों में से किसी एक का इस्तेमाल करके, इमेज की जगह सेट करें:
position(LatLng location, float width, float height)
position(LatLng location, float width)
positionFromBounds(LatLngBounds bounds)
- अपने हिसाब से कोई भी वैकल्पिक प्रॉपर्टी सेट करें, जैसे कि
transparency
. - मैप में इमेज जोड़ने के लिए,
GoogleMap.addGroundOverlay()
पर कॉल करें.
नीचे दिए गए उदाहरण में, किसी मौजूदा GoogleMap
ऑब्जेक्ट में ग्राउंड ओवरले जोड़ने का तरीका बताया गया है.
Kotlin
val newarkLatLng = LatLng(40.714086, -74.228697) val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .position(newarkLatLng, 8600f, 6500f) map.addGroundOverlay(newarkMap)
Java
LatLng newarkLatLng = new LatLng(40.714086, -74.228697); GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .position(newarkLatLng, 8600f, 6500f); map.addGroundOverlay(newarkMap);
अगर मैप पर ग्राउंड ओवरले जोड़ने के बाद, आपको उसमें बदलाव करना है या उसे हटाना है, तो पक्का करें कि GroundOverlay
ऑब्जेक्ट पर आपका कंट्रोल रहे. इस ऑब्जेक्ट में बदलाव करके, ओवरले में बाद में बदलाव किया जा सकता है.
Kotlin
// Add an overlay to the map, retaining a handle to the GroundOverlay object. val imageOverlay = map.addGroundOverlay(newarkMap)
Java
// Add an overlay to the map, retaining a handle to the GroundOverlay object. GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);
ओवरले हटाना
GroundOverlay.remove()
तरीके का इस्तेमाल करके, ग्राउंड ओवरले को हटाया जा सकता है.
Kotlin
imageOverlay?.remove()
Java
imageOverlay.remove();
ओवरले बदलना
ग्राउंड ओवरले इमेज को GroundOverlay.setImage(BitmapDescriptor)
तरीके की मदद से मैप पर जोड़ने के बाद, बदला जा सकता है.
Kotlin
// Update the GroundOverlay with a new image of the same dimension // Update the GroundOverlay with a new image of the same dimension imageOverlay?.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
Java
// Update the GroundOverlay with a new image of the same dimension imageOverlay.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922));
setImage()
तरीका, मौजूदा इमेज को उसी डाइमेंशन की दूसरी इमेज से बदल देगा.
ग्राउंड ओवरले की जगह बदलें
ग्राउंड ओवरले की स्थिति दो तरीकों से तय की जा सकती है:
- ओवरले को सेंटर में लाने के लिए
LatLng
का और इमेज का साइज़ बताने के लिए डाइमेंशन को मीटर में इस्तेमाल करना. - इमेज के उत्तर-पूर्व और दक्षिण-पश्चिम कोनों के बारे में बताने के लिए,
LatLngBounds
का इस्तेमाल किया जा रहा है.
ग्राउंड ओवरले को मैप में जोड़ने से पहले, आपको इसकी जगह बतानी होगी.
इमेज को पोज़िशन करने के लिए, जगह की जानकारी का इस्तेमाल करें
इमेज जोड़ते समय, एक LatLng तय किया जाएगा, जिसमें ऐंकर तय किया जाएगा
और ओवरले की चौड़ाई (मीटर में). anchor
, डिफ़ॉल्ट रूप से इमेज के बीच में होता है. आप वैकल्पिक रूप से ओवरले की ऊंचाई (मीटर में) दे सकते हैं. अगर ओवरले की ऊंचाई नहीं बताई जाती है, तो इमेज के अनुपात को बनाए रखने के लिए, इसकी गिनती अपने-आप हो जाएगी.
नीचे दिए गए कोड में एक इमेज को 40.714086, -74.228697
पोज़िशन पर दिखाया गया है.
इसकी चौड़ाई 8.6 कि॰मी॰ और 6.5 कि॰मी॰ है. इमेज को सबसे नीचे बाईं ओर ऐंकर किया गया है.
Kotlin
val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .anchor(0f, 1f) .position(LatLng(40.714086, -74.228697), 8600f, 6500f)
Java
GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .anchor(0, 1) .position(new LatLng(40.714086, -74.228697), 8600f, 6500f);
इमेज की पोज़िशन सेट करने के लिए, LatLngBounds का इस्तेमाल करें
आपको LatLngBounds
देना होता है, जिसमें इमेज मौजूद होती है. LatLngBounds
, इमेज के उत्तर-पूर्व और दक्षिण-पश्चिम कोने सेट करता है. जब इमेज को मैप पर बनाया जाएगा, तो उसे सीमाओं में फ़िट करने के लिए घुमाया जाएगा. अगर सीमाएं, मूल आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) से मेल नहीं खातीं, तो इमेज तिरछी हो जाएगी.
नीचे दिए गए कोड में, मैप पर एक इमेज दिखाई गई है. इसमें इमेज का दक्षिण-पश्चिम कोने वाला हिस्सा 40.712216,-74.22655
से और उत्तर-पूर्व का कोना 40.773941, -74.12544
से जुड़ा हुआ है.
Kotlin
val newarkBounds = LatLngBounds( LatLng(40.712216, -74.22655), // South west corner LatLng(40.773941, -74.12544) // North east corner ) val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .positionFromBounds(newarkBounds)
Java
LatLngBounds newarkBounds = new LatLngBounds( new LatLng(40.712216, -74.22655), // South west corner new LatLng(40.773941, -74.12544)); // North east corner GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .positionFromBounds(newarkBounds);
डेटा को ग्राउंड ओवरले से जोड़ें
ग्राउंड ओवरले के साथ आर्बिट्ररी डेटा ऑब्जेक्ट को स्टोर करने और GroundOverlay.getTag()
का इस्तेमाल करके डेटा ऑब्जेक्ट वापस पाने के लिए, GroundOverlay.setTag()
को कॉल करें.
नीचे दिया गया कोड सैंपल, ग्राउंड ओवरले के साथ स्ट्रिंग की जानकारी सेव करता है:
Kotlin
val sydneyGroundOverlay = map.addGroundOverlay( GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge)) .position(LatLng(-33.873, 151.206), 100f) .clickable(true) ) sydneyGroundOverlay?.tag = "Sydney"
Java
GroundOverlay sydneyGroundOverlay = map.addGroundOverlay(new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge)) .position(new LatLng(-33.873, 151.206), 100) .clickable(true)); sydneyGroundOverlay.setTag("Sydney");
यहां ग्राउंड ओवरले के साथ डेटा को स्टोर और वापस पाने की स्थिति के कुछ उदाहरण दिए गए हैं:
- हो सकता है कि आपके ऐप्लिकेशन में अलग-अलग ग्राउंड ओवरले हों और आप उपयोगकर्ता के क्लिक करने पर उन्हें अलग-अलग तरीके से देखना चाहें.
- ऐसा हो सकता है कि आपको कोई ऐसा सिस्टम इस्तेमाल करना पड़े जिसमें यूनीक रिकॉर्ड आइडेंटिफ़ायर हों, जहां ओवरले उस सिस्टम के खास रिकॉर्ड दिखाते हों.
- ओवरले डेटा, ओवरले के लिए z-इंडेक्स तय करने की प्राथमिकता को दिखा सकता है.
ग्राउंड ओवरले इवेंट मैनेज करना
डिफ़ॉल्ट रूप से, ग्राउंड ओवरले पर
क्लिक नहीं किया जा सकता. क्लिक करने की सुविधा को चालू और बंद करने के लिए, GroundOverlay.setClickable(boolean)
को कॉल करें.
क्लिक किए जा सकने वाले ग्राउंड ओवरले पर, क्लिक इवेंट सुनने के लिए OnGroundOverlayClickListener
का इस्तेमाल करें. इस लिसनर को मैप पर सेट करने के लिए, GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener)
को कॉल करें.
जब कोई उपयोगकर्ता, ग्राउंड ओवरले पर क्लिक करता है, तो आपको onGroundOverlayClick(GroundOverlay)
कॉलबैक मिलेगा.