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

一般我们可以手动设置地图缩放级别,但有时候需求会要求根据地图上的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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 项目中用到地图的地方越来越多,从O2O商城、出行、交通、单车等无处不在使用地图,以下是在多个项目中集成高德地图常用...
    倔强的炉包阅读 18,541评论 6 21
  • 【 申请密钥AndroidSDK:应用程序包名+数字签名 As查看数字签名:cmd-----cd .android...
    征程_Journey阅读 6,910评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,777评论 19 139
  • 首先是地图组建的使用流程 1.注册Google、高德接口调用的key key是官方api提供的访问权限 各类型的K...
    尚山夏香阅读 10,958评论 0 0
  • 10.1 一个特别的日子………… 昨晚接到爸妈电话 說,今天一家四人聚一聚。好开心!因为从小跟父母在处的时光很少,...
    智生争冠阅读 1,176评论 0 0