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

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

作者: 李翾 | 来源:发表于2017-12-12 17:48 被阅读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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/epvnixtx.html