百度地图多个兴趣点(经纬度、坐标点)需要同时显示在地图上,如何设置自动缩放等级

如果有多个兴趣点(经纬度、坐标点)需要同时显示在地图上,如何设置缩放比例。如果缩放太细,那么一个屏幕放不下,如果缩放太粗,显示就太密集。需要在程序中根据点的分布来设置。

百度地图Android SDK v3.5.0从3.5版本开始,它的缩放级别从3-20,总共18个级别,如下:

{"10m", "20m", "50m", "100m", "200m", "500m", "1km", "2km", "5km", "10km", "20km", "25km", "50km", "100km", "200km", "500km", "1000km", "2000km"} 
Level依次为:20191817161514131211109876543

我们可以先计算出两个点之间的距离,从而判断设置其Level。

因为我需要显示很多点,因此计算出了经纬度的范围,然后计算出最长的距离,这个距离就是在同一个屏幕上需要显示的长度。我比划了一下手机上的百度地图,宽度差不多是单位长度的8.5倍,简单起见就当成9倍。比如计算出来的最长的距离是10公里,那么单位长度应该是10/9=1.1公里左右,然后跟缩放比例对比一下,比1000m的缩放级别要广,下一个级别就是2000m。因此就设置2000m的level 13就可以了。

伪代码:

                //经度范围-180到180,纬度范围-90到90,对所有的轨迹中的经纬度进行比较,找到最大和最小的经度,最大和最小的维度
                double minLongitude=180 ,maxLongitude=-180,minlatitude=90,maxlatitude=-90;
 
                    for(LatLng pos:坐标的list){
                        if(minlatitude > pos.latitude) minlatitude=pos.latitude;
                        if(maxlatitude < pos.latitude) maxlatitude = pos.latitude;
                        if(minLongitude > pos.longitude) minLongitude = pos.longitude;
                        if(maxLongitude < pos.longitude) maxLongitude = pos.longitude;
                    }
    
                //对角线的距离,单位m
                double maxdis=DistanceUtil.getDistance(new LatLng(minlatitude,minLongitude),new LatLng(maxlatitude,maxLongitude));

                int [] zoomSize={10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 25000, 50000, 100000, 200000, 500000, 1000000, 2000000};
                int [] zoomlevel={20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3};
                //将轨迹显示在地图上,正好是标准尺的9倍。
                double mapWidth = maxdis/9;
               int dx=0;
                //找到合适的单位距离,就是稍微大一点的那个单位
                for(int i=0;i<zoomSize.length;i++){
                    if(mapWidth < zoomSize[i]) {
                        dx = i;
                        break;
                    }
                }

                MapStatus.Builder builder = new MapStatus.Builder();
                //地图中心移动到轨迹中间的地方
                builder.target(new LatLng((minlatitude+maxlatitude)/2,(minLongitude+maxLongitude)/2));
                //设置缩放级别
                builder.zoom(zoomlevel[dx]);
                //刷新地图
                mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));

思路参考http://blog.csdn.net/u013067184/article/details/48471199

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值