我已经获得了2个GeoPoints,用标记在地图上显示它们。
如何获得MapController的最佳缩放级别,以便聚焦两个点的中间,但也可以将它们放在地图上。
整个事情应该在不同的屏幕分辨率下工作。
答案 0 :(得分: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()。
答案 1 :(得分: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
还有另一种简单的方法,您可以使用此项目完成所有与地图相关的活动: