ग्राउंड ओवरले ऐसे इमेज ओवरले होते हैं जो अक्षांश/देशांतर निर्देशांक से जुड़े होते हैं, ताकि मैप को खींचने या ज़ूम करने पर ये मूव कर सकें.
कोड सैंपल
GitHub पर ApiDemos रिपॉज़िटरी में एक सैंपल शामिल है, जो ग्राउंड ओवरले को दिखाता है:
- GroundOverlayDemoActivity - Java: Java में ग्राउंड ओवरले की सुविधाएं और Listener
- 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 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)
कॉलबैक मिलेगा.