java中谷歌地图的自动缩放?(取决于android屏幕分辨率)

java中谷歌地图的自动缩放?(取决于android屏幕分辨率),java,android,google-maps,zooming,Java,Android,Google Maps,Zooming,我得到了2个地质点,用标记在地图上显示它们 如何获得MapController的最佳缩放级别,以便聚焦两个点的中间,同时也使它们位于地图上 整个过程应该在不同的屏幕分辨率下工作。您可以使用MapView的。使用获取MapController,然后可以尝试使用MapController.zoomToSpan()设置正确的缩放。我还倾向于使用ItemizeOverlay的getLatSpanE6()和getLonSpanE6()来简化这个过程。例如: MapView map = (MapView)

我得到了2个地质点,用标记在地图上显示它们

如何获得MapController的最佳缩放级别,以便聚焦两个点的中间,同时也使它们位于地图上


整个过程应该在不同的屏幕分辨率下工作。

您可以使用MapView的。使用获取MapController,然后可以尝试使用MapController.zoomToSpan()设置正确的缩放。我还倾向于使用ItemizeOverlay的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);
        }
    });

}
private void loadMarkerPositions(){
对于(存储:存储列表){
latlong1=新LatLng(store.getLatitude(),store.getLongtude());
array.add(latlong1);
}
列表点=数组;
final LatLngBounds.Builder bc=新LatLngBounds.Builder();
用于(板条项目:点){
bc.包括(项目);
}
setonCamerachenglistener(新的onCamerachenglistener(){
@凌驾
CameraChange上的公共无效(CameraPosition arg0){
//移动摄像机。
moveCamera(CameraUpdateFactory.newLatLngBounds(bc.build(),30));
//移除监听器以防止摄像机移动时位置重置。
setonCamerachenglistener(null);
}
});
}
参考:

还有一种简单的方法,您可以使用此项目完成所有与地图相关的活动:


在这种情况下,地图将缩放到一个随机位置,不是吗?使用这种方法,两个点都将始终可见。但是,点之间的距离越远,此方法的精确度就越低。@poeschlorn:正确,您还必须使用setCenter(),抱歉。非常感谢:)它工作正常!现在我只需要在我的马克笔上建一个,但这不会那么困难;-)再次感谢!不幸的是,上述表达式并不总是按预期执行。一年多过去了,有没有解决警告的办法?