我有2個GeoPoints給出在地圖上用標記顯示它們。在java中的Google地圖上自動縮放大小? (取決於android屏幕分辨率)
如何獲得MapController的最佳縮放級別,以便聚焦兩個點的中間位置,同時也可以將它們放在地圖上。
整件事應該在不同的屏幕分辨率下工作。
我有2個GeoPoints給出在地圖上用標記顯示它們。在java中的Google地圖上自動縮放大小? (取決於android屏幕分辨率)
如何獲得MapController的最佳縮放級別,以便聚焦兩個點的中間位置,同時也可以將它們放在地圖上。
整件事應該在不同的屏幕分辨率下工作。
您可以使用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()。
這是怎麼了應該做的事:
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
還有一種簡單的方法,你可以使用這個項目來完成所有地圖相關的活動:
在這種情況下,地圖會放大到隨機的位置,不是嗎? – poeschlorn 2010-04-19 14:21:48
使用這種方法,這兩點始終可見。然而,這些方法之間的距離越遠,這種方法越不準確。 – 2010-04-19 14:43:30
@poeschlorn:對,您還必須使用setCenter(),抱歉。 – 2010-04-19 15:16:39