Android Maps v2 - 动画相机以包含大多数标记

Vin*_*rat 4 android google-maps-android-api-2

我有一组来自网络服务的点,需要在地图上显示.

我有一个当前的解决方案适用于大多数情况,使用众所周知的LatLngBounds.Builder,CameraUpdateFactory.newLatLngBoundsmap.animateCamera.

我有一些情况会产生问题:当点太远时,地图以这些点的重心上的最大缩放水平为中心.例如:我在法国有10分,在夏威夷有2分.地图中心或多或少地以最小缩放级别放置在caribeans上.因此,在屏幕上我没有显示任何内容,用户必须滚动到实际看到的东西在那里.

所以我的问题是:

有没有办法让地图缩小到足够远,以便我可以看到所有点(这将是首选)

或者:这将是滤除那些只有几个点离大多数点很远并选择一组点放大的情况的最好方法(在我的例子中,我会选择放大法国的10个点)并忘记夏威夷的那些.

Oma*_*din 5

将标记的所有LatLng放在列表中并将它们传递给此方法,并在newLatLngBounds(bounds, 50)) 50 的最后一行表示地图边缘和每边最外部标记之间的填充

public void centerIncidentRouteOnMap(List<LatLng> copiedPoints) {
        double minLat = Integer.MAX_VALUE;
        double maxLat = Integer.MIN_VALUE;
        double minLon = Integer.MAX_VALUE;
        double maxLon = Integer.MIN_VALUE;
        for (LatLng point : copiedPoints) {
            maxLat = Math.max(point.latitude, maxLat);
            minLat = Math.min(point.latitude, minLat);
            maxLon = Math.max(point.longitude, maxLon);
            minLon = Math.min(point.longitude, minLon);
        }
        final LatLngBounds bounds = new LatLngBounds.Builder().include(new LatLng(maxLat, maxLon)).include(new LatLng(minLat, minLon)).build();
        mapFragment.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50));
    }
Run Code Online (Sandbox Code Playgroud)