2010-04-19 12 views
8

मुझे मार्करों के साथ मानचित्र पर दिखाने के लिए 2 जियोपॉइंट दिए गए हैं।जावा में Google मानचित्र पर ऑटो-आकार ज़ूम? (एंड्रॉइड स्क्रीन रिज़ॉल्यूशन के आधार पर)

मैप कंट्रोलर के लिए इष्टतम ज़ूम स्तर कैसे प्राप्त कर सकता है ताकि दोनों बिंदुओं के बीच ध्यान केंद्रित किया जा सके, लेकिन उन्हें मानचित्र पर भी रखा जा सके।

पूरी चीज को विभिन्न स्क्रीन संकल्पों पर काम करना चाहिए।

उत्तर

9

आप MapView के MapController का उपयोग करके ऐसा कर सकते हैं। आपको MapView.getController() का उपयोग करके MapController मिलता है, तो आप MapController.zoomToSpan() का उपयोग करके सही ज़ूम सेट करने का प्रयास कर सकते हैं। मैं यह आसान बनाने के लिए ItemizedOverlay के getLatSpanE6() और getLonSpanE6() का उपयोग भी करता हूं। एक उदाहरण:

क्योंकि जूम केवल असतत स्तर को प्राप्त कर सकते हैं, और क्योंकि नक्शा पहलू अनुपात मेल न खाते हों अनुपात को देखते हुए:

MapView map = (MapView) findViewById(R.id.Map); 
MapController mc = map.getController(); 
mc.zoomToSpan(overlay.getLatSpanE6(), overlay.getLonSpanE6()); 

यह उनकी चेतावनी नोट करना महत्वपूर्ण है , फिट की गुणवत्ता भिन्न हो सकती है। एकमात्र चीज जो हम गारंटी देते हैं, ज़ूम के बाद, पर नए अक्षांश में से कम से कम एक या नया देशांतर इसी पैरामीटर से 2 कारक के भीतर होगा।

संपादित करें: सही जगह पर ज़ूम करने के लिए मानचित्र भी प्राप्त करने के लिए, आपको MapController.setCenter() का उपयोग करना होगा।

+2

इस मामले में नक्शा एक यादृच्छिक स्थिति में ज़ूम करेगा, है ना? – poeschlorn

+1

दोनों बिंदु हमेशा इस विधि का उपयोग कर दिखाई देंगे। हालांकि, आगे के अंक एक-दूसरे से हैं, यह विधि कम सटीक होती है। –

+0

@poeschlorn: सही, आपको setCenter(), माफ करना भी उपयोग करना होगा। –

0

यह है कि यह कैसे किया जाना चाहिए है:

private void loadMarkerPositions() { 


    for (Stores store : storeList) { 
     latlong1 = new LatLng(store.getLatitude(), store.getLongtitude()); 
     array.add(latlong1); 
    } 

    List<LatLng> points = array; 

    final LatLngBounds.Builder bc = new LatLngBounds.Builder(); 

     for (LatLng item : points) { 
      bc.include(item); 
     } 

    googleMap.setOnCameraChangeListener(new OnCameraChangeListener() { 

     @Override 
     public void onCameraChange(CameraPosition arg0) { 
      // Move camera. 
      googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bc.build(), 30)); 
      // Remove listener to prevent position reset on camera move. 
      googleMap.setOnCameraChangeListener(null); 
     } 
    }); 

} 

संदर्भ: moveCamera with CameraUpdateFactory.newLatLngBounds crashes

एक और आसान तरीका, आप सभी नक्शे से संबंधित गतिविधियों को पूरा करने के लिए इस परियोजना का उपयोग कर सकते है:

https://github.com/girishnair12345/Google-Maps-V2-library

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