ग्राउंड ओवरले ऐसे इमेज ओवरले होते हैं जो अक्षांश/देशांतर से जुड़े होते हैं, ताकि मैप को खींचने या ज़ूम करने पर वे खिसक जाएं.
कोड सैंपल
GitHub पर ApiDemos डेटा स्टोर करने की जगह में, एक सैंपल शामिल है, जो ग्राउंड ओवरले दिखाता है:
- GroundOverlayDemoActivity - 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
ऑब्जेक्ट में ग्राउंड ओवरले जोड़ने का तरीका बताया गया है.
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);
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)
अगर आपको ग्राउंड ओवरले को मैप में जोड़ने के बाद बदलना है या हटाना है, तो GroundOverlay
ऑब्जेक्ट को दबाकर रखें. आप इस ऑब्जेक्ट में बदलाव करके, ओवरले में बाद में भी बदलाव कर सकते हैं.
Java
// Add an overlay to the map, retaining a handle to the GroundOverlay object. GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);
Kotlin
// Add an overlay to the map, retaining a handle to the GroundOverlay object. val imageOverlay = map.addGroundOverlay(newarkMap)
ओवरले हटाना
ग्राउंड ओवरले को हटाने के लिए,
GroundOverlay.remove()
तरीके का इस्तेमाल किया जा सकता है.
Java
imageOverlay.remove();
Kotlin
imageOverlay?.remove()
ओवरले बदलना
ग्राउंड ओवरले इमेज को मैप पर जोड़ने के बाद, उसे बदला जा सकता है. इसके लिए, GroundOverlay.setImage(BitmapDescriptor)
तरीके का इस्तेमाल करें.
Java
// Update the GroundOverlay with a new image of the same dimension imageOverlay.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922));
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))
setImage()
का तरीका मौजूदा इमेज को उन ही डाइमेंशन की दूसरी इमेज से बदल देगा.
ज़मीन का ओवरले लगाएं
ग्राउंड ओवरले की जगह बताने के दो तरीके हैं:
- ओवरले को बीच में लाने के लिए
LatLng
का इस्तेमाल करना और इमेज का साइज़ बताने के लिए मीटर में डाइमेंशन का इस्तेमाल करना. - इमेज के उत्तर पूर्व और दक्षिण-पश्चिमी कोने के बारे में बताने के लिए,
LatLngBounds
का इस्तेमाल किया जा रहा है.
मैप में जोड़ने से पहले आपको ग्राउंड ओवरले की स्थिति तय करनी होगी.
इमेज को सही जगह पर रखने के लिए, जगह की जानकारी का इस्तेमाल करना
इमेज जोड़ते समय, आपको एक LatLng तय करना होता है, जिसमें ऐंकर को तय किया जा सकेगा. साथ ही, ओवरले की चौड़ाई (मीटर में) भी तय की जाएगी. anchor
, डिफ़ॉल्ट रूप से इमेज के बीच में होता है. आपके पास ओवरले की ऊंचाई (मीटर में) देने का विकल्प भी है. अगर ओवरले की ऊंचाई नहीं बताई जाती है, तो इमेज का अनुपात बनाए रखने के लिए, अपने-आप इसकी गिनती कर ली जाएगी.
नीचे दिए गए कोड में, इमेज को 40.714086, -74.228697
जगह पर रखा गया है. इसकी चौड़ाई 8.6 कि॰मी॰ और ऊंचाई 6.5 कि॰मी॰ है. इमेज को सबसे नीचे बाईं ओर ऐंकर किया गया है.
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);
Kotlin
val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .anchor(0f, 1f) .position(LatLng(40.714086, -74.228697), 8600f, 6500f)
इमेज को सही जगह पर रखने के लिए LatLngBounds का इस्तेमाल करना
आपने इमेज वाला LatLngBounds
दिया हो. LatLngBounds
, इमेज के उत्तर-पूर्व और दक्षिण-पश्चिमी हिस्से को सेट करता है. जब इमेज को मैप पर बनाया जाएगा, तो उसे सीमा में फ़िट करने के लिए घुमाया जाएगा. अगर
सीमाएं मूल आसपेक्ट रेशियो से मेल नहीं खाती हैं, तो इमेज टेढ़ी-मेढ़ी होगी.
यहां दिए गए कोड की मदद से, मैप पर ऐसी इमेज दिखती है जिसका दक्षिण-पश्चिमी हिस्सा
40.712216,-74.22655
और उत्तर-पूर्वी कोने को
40.773941, -74.12544
से जोड़ा जाता है.
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);
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)
डेटा को ग्राउंड ओवरले से जोड़ना
ग्राउंड ओवरले के साथ आर्बिट्ररी डेटा ऑब्जेक्ट को स्टोर करने और GroundOverlay.getTag()
का इस्तेमाल करके, डेटा ऑब्जेक्ट वापस पाने के लिए, GroundOverlay.setTag()
को कॉल करें.
नीचे दिए गए कोड सैंपल में, स्ट्रिंग की जानकारी के साथ ग्राउंड ओवरले मौजूद होता है:
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");
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"
यहां उन स्थितियों के कुछ उदाहरण दिए गए हैं, जब ग्राउंड ओवरले के साथ डेटा को स्टोर करना और फिर से पाना ज़रूरी होता है:
- हो सकता है कि आपके ऐप्लिकेशन में अलग-अलग ग्राउंड ओवरले हों और आप उपयोगकर्ताओं के क्लिक करने पर उन्हें अलग-अलग तरीके से दिखाना चाहें.
- शायद आपको किसी ऐसे सिस्टम के साथ इंटरफे़स करना हो जिसमें यूनीक रिकॉर्ड आइडेंटिफ़ायर हों, जहां ओवरले उस सिस्टम में खास रिकॉर्ड दिखाते हों.
- ओवरले डेटा से यह पता चल सकता है कि ओवरले के लिए z-इंडेक्स तय करने की प्राथमिकता कितनी है.
ग्राउंड ओवरले इवेंट मैनेज करना
डिफ़ॉल्ट रूप से, ग्राउंड ओवरले
क्लिक नहीं किए जा सकते. क्लिक करने की सुविधा को चालू और बंद करने के लिए,
GroundOverlay.setClickable(boolean)
पर कॉल करें.
क्लिक किए जा सकने वाले ग्राउंड ओवरले पर
क्लिक इवेंट सुनने के लिए, OnGroundOverlayClickListener
का इस्तेमाल करें. इस लिसनर को मैप पर सेट करने के लिए, GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener)
पर कॉल करें.
जब कोई उपयोगकर्ता किसी ग्राउंड ओवरले पर क्लिक करता है, तो आपको
onGroundOverlayClick(GroundOverlay)
कॉलबैक मिलेगा.