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