आपको CameraUpdateसभी प्रोग्रामेटिक मैप आंदोलनों को करने के लिए कक्षा का उपयोग करना चाहिए (शायद)।
ऐसा करने के लिए, पहले सभी मार्करों की सीमा की गणना करें:
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : markers) {
builder.include(marker.getPosition());
}
LatLngBounds bounds = builder.build();
फिर कारखाने का उपयोग करके एक आंदोलन विवरण वस्तु प्राप्त करें CameraUpdateFactory:
int padding = 0; // offset from edges of the map in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
अंत में मानचित्र को स्थानांतरित करें:
googleMap.moveCamera(cu);
या यदि आप एक एनीमेशन चाहते हैं:
googleMap.animateCamera(cu);
बस इतना ही :)
स्पष्टता १
लगभग सभी आंदोलन विधियों Mapमें लेआउट प्रक्रिया को पारित करने के लिए ऑब्जेक्ट की आवश्यकता होती है। आप addOnGlobalLayoutListenerनिर्माण का उपयोग करने के लिए इसके लिए प्रतीक्षा कर सकते हैं । विवरण इस उत्तर और शेष उत्तर के लिए टिप्पणियों में पाया जा सकता है। आप यहां उपयोग करके मानचित्र सीमा निर्धारित करने के लिएaddOnGlobalLayoutListener एक पूर्ण कोड भी पा सकते हैं ।
स्पष्टता २
एक टिप्पणी नोट करती है कि केवल एक मार्कर के लिए इस पद्धति का उपयोग करने से मैप ज़ूम में "विचित्र" ज़ूम स्तर पर सेट होता है (जिसे मैं मानती हूं कि दिए गए स्थान के लिए अधिकतम ज़ूम स्तर उपलब्ध है)। मुझे लगता है कि यह अपेक्षित है क्योंकि:
LatLngBounds boundsउदाहरण होगा northeastसंपत्ति के बराबर southwestहै, जिसका अर्थ है कि पृथ्वी इस के अंतर्गत आने वाले क्षेत्र के भाग boundsबिल्कुल शून्य है। (यह तर्कसंगत है क्योंकि एकल मार्कर का कोई क्षेत्र नहीं है।)
- आपके पास जाने के
boundsलिए CameraUpdateFactory.newLatLngBoundsअनिवार्य रूप से ऐसे ज़ूम स्तर की गणना का अनुरोध करें जो bounds(शून्य क्षेत्र वाला) पूरे मानचित्र दृश्य को कवर करेगा।
- आप वास्तव में इस गणना को कागज के एक टुकड़े पर कर सकते हैं। सैद्धांतिक ज़ूम स्तर जो उत्तर है + + inf (सकारात्मक अनंत) है। व्यवहार में
Mapवस्तु इस मूल्य का समर्थन नहीं करती है, इसलिए इसे दिए गए स्थान के लिए अनुमति दी गई अधिक उचित अधिकतम स्तर पर दबाना है।
इसे लगाने का एक और तरीका: Mapऑब्जेक्ट कैसे जान सकता है कि किसी एकल स्थान के लिए ज़ूम स्तर क्या होना चाहिए ? शायद इष्टतम मूल्य 20 होना चाहिए (यदि यह एक विशिष्ट पते का प्रतिनिधित्व करता है)। या शायद 11 (यदि यह एक शहर का प्रतिनिधित्व करता है)। या हो सकता है 6 (यदि यह एक देश का प्रतिनिधित्व करता है)। एपीआई स्मार्ट नहीं है और निर्णय आप पर निर्भर है।
तो, आपको बस यह जांचना चाहिए कि markersक्या केवल एक स्थान है और यदि ऐसा है, तो निम्न में से एक का उपयोग करें:
CameraUpdate cu = CameraUpdateFactory.newLatLng(marker.getPosition()) - मार्कर स्थिति पर जाएं, वर्तमान ज़ूम स्तर बरकरार रखें।
CameraUpdate cu = CameraUpdateFactory.newLatLngZoom(marker.getPosition(), 12F) - मार्कर स्थिति पर जाएं, ज़ूम स्तर को मनमाने ढंग से चुने गए मान 12 पर सेट करें।