【地图】高德地图多个Marker标记自动缩放全部显示在屏幕中

2017-12-12  本文已影响0人  李翾

一般我们可以手动设置地图缩放级别,但有时候需求会要求根据地图上的Marker,自定义缩放级别,这个时候就用到下面的代码:

LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder();//存放所有点的经纬度

for(int i=0;i<markers.size();i++){
boundsBuilder.include(markers.get(i).getPosition());//把所有点都include进去(LatLng类型)
}

aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(boundsBuilder.build(), 15));//第二个参数为四周留空宽度

animateCamera也可以使用moveCamera方法,效果一样,15有点小可以设置200,试试效果吧。
这个样有个问题,就是屏幕中心点和当前坐标点不重合了,高德官方给出了方法如下:
/**
* 缩放移动地图,保证所有自定义marker在可视范围中,且地图中心点不变。
*/
public void zoomToSpanWithCenter() {
if (pointList != null && pointList.size() > 0) {
if (aMap == null)
return;
centerMarker.setVisible(true);
centerMarker.showInfoWindow();
LatLngBounds bounds = getLatLngBounds(centerPoint, pointList);
aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50));
}
}

//根据中心点和自定义内容获取缩放bounds
private LatLngBounds getLatLngBounds(LatLng centerpoint, List<LatLng> pointList) {
    LatLngBounds.Builder b = LatLngBounds.builder();
    if (centerpoint != null){
        for (int i = 0; i < pointList.size(); i++) {
            LatLng p = pointList.get(i);
            LatLng p1 = new LatLng((centerpoint.latitude * 2) - p.latitude, (centerpoint.longitude * 2) - p.longitude);
            b.include(p);
            b.include(p1);
        }
    }
    return b.build();
}

/**
 *  缩放移动地图,保证所有自定义marker在可视范围中。
 */
public void zoomToSpan() {
    if (pointList != null && pointList.size() > 0) {
        if (aMap == null)
            return;
        centerMarker.setVisible(false);
        LatLngBounds bounds = getLatLngBounds(pointList);
        aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50));
    }
}
/**
 * 根据自定义内容获取缩放bounds
 */
private LatLngBounds getLatLngBounds( List<LatLng> pointList) {
    LatLngBounds.Builder b = LatLngBounds.builder();
    for (int i = 0; i < pointList.size(); i++) {
         LatLng p = pointList.get(i);
         b.include(p);
     }
    return b.build();
}

关键方法: LatLng p1 = new LatLng((centerpoint.latitude * 2) - p.latitude, (centerpoint.longitude * 2) - p.longitude);
详情见高德官方链接:https://lbs.amap.com/dev/demo/map-zoomtospan#Android

上一篇下一篇

猜你喜欢

热点阅读