2010-04-19 31 views

回答

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 2010-04-19 14:21:48

+1

使用這種方法,這兩點始終可見。然而,這些方法之間的距離越遠,這種方法越不準確。 – 2010-04-19 14:43:30

+0

@poeschlorn:對,您還必須使用setCenter(),抱歉。 – 2010-04-19 15:16:39

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