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