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