2011-03-09 6 views
52

ऑनज़ेट() के अंदर सेटज़ूम() को कड़ी-कोडिंग करना बहुत पुराना लगता है और मैं शुरुआत में मानचित्र दृश्य को ज़ूम सेट करना चाहता हूं जब तक कि सभी GeoPoints/ओवरले इटम्स मानचित्र पर दिखाई दे रहे हैं।एंड्रॉइड मैप व्यू -सेटिंग स्वचालित रूप से ज़ूम स्वचालित रूप से ज़ूम हो जाता है जब तक कि सभी आइटमकृत ओवरले दिखाई नहीं दे रहे हैं

यह ऑटो-जादुई तरीके से कैसे किया जा सकता है?

उत्तर

128

किंडा इस

int minLat = Integer.MAX_VALUE; 
int maxLat = Integer.MIN_VALUE; 
int minLon = Integer.MAX_VALUE; 
int maxLon = Integer.MIN_VALUE; 

for (GeoPoint item : items) 
{ 

     int lat = item.getLatitudeE6(); 
     int lon = item.getLongitudeE6(); 

     maxLat = Math.max(lat, maxLat); 
     minLat = Math.min(lat, minLat); 
     maxLon = Math.max(lon, maxLon); 
     minLon = Math.min(lon, minLon); 
} 

mapController.zoomToSpan(Math.abs(maxLat - minLat), Math.abs(maxLon - minLon)); 
mapController.animateTo(new GeoPoint((maxLat + minLat)/2, 
(maxLon + minLon)/2)); 

edit: रयान एक अच्छा सुझाव दिया की तरह सेट किया किनारों (धन्यवाद रयान!)

double fitFactor = 1.5; 
mapController.zoomToSpan((int) (Math.abs(maxLat - minLat) * fitFactor), (int)(Math.abs(maxLon - minLon) * fitFactor)); 
+1

उत्कृष्ट! केंद्र के लिए एक वर्ग और ज़ूम करें –

+1

धन्यवाद .. काम कर रहा है .. – Shaiful

+10

मैं इसे दो भूगर्भ, मेरे स्थान और रुचि के बिंदु के लिए उपयोग करता हूं, और मैंने देखा कि कभी-कभी ओवरले स्क्रीन के किनारे के बहुत पास होते हैं। इसे ठीक करने के लिए मैंने 'डबल fitFactor = 1.5'' को mapController.zoomToSpan ((int) Math.abs (maxLat - minLat) * fitFactor), (int) (Math.abs (maxLon - minLon) * fitFactor) में जोड़ा; 'जो एक अच्छा पैडिंग जोड़ता है। –

2

इसे प्राप्त करने के लिए कोई जादुई तरीका नहीं है। मैं इन सभी वस्तुओं के केंद्र और अवधि प्राप्त करने के लिए अपने सभी ओवरलेइटम्स के माध्यम से पुन: प्रयास करने का सुझाव देता हूं। ताकि बिंदु में से कुछ पर झूठ मत बोलो एक गद्दी डाल करने के लिए: तब केंद्र और विस्तार तदनुसार नक्शे के लिए

संबंधित मुद्दे