高德地图中,计算距离米和经纬度之间的转换

项目的需求中,有一个设置围栏的功能。

高德地图的设置围栏,有2种类型,圆形和多边形。

多边形已经实现地图自动缩放。但是绘制圆形有问题,不能自动缩放,用户看到的圆形可能很小,或者很大。

我要讲解的是绘制圆形的自动缩放。

高德地图中的demo是不能自适应屏幕的,如上图所示。

我的思路是根据圆心的经纬度,和半径,计算出圆的上下左右的点的经纬度,然后调用多边形的缩放的接口方法。

说说代码的实现吧:

代码:

 /**
     *  假设地球为一半径为R的表面光滑圆球体,
        表面上同一经线圈上相差1"两点间的距离为 2πR/360/3600
        表面上同一纬线圈上相差1"两点间的距离为 2πR×cos(纬度)/360/3600

        当R取半径平均值6371km时,
        地球表面上同一经线圈上相差1"两点间的距离约为30.887m
        地球表面上同一纬线圈上相差1"两点间的距离约为30.887m×cos(纬度)
     * @param boundsBuilder
     * @param center
     * @param radius
     */
    private void calculateLl(LatLngBounds.Builder boundsBuilder,LatLng center,Double radius) {
        double latitude = center.latitude;//维度
        double longitude = center.longitude;//经度

        //地球周长
        Double perimeter =  2*Math.PI*6371000;
        //纬度latitude的地球周长:latitude
        Double perimeter_latitude =   perimeter*Math.cos(Math.PI * latitude / 180);

        //一米对应的经度(东西方向)1M实际度
        double longitude_per_mi = 360 / perimeter_latitude;
        double latitude_per_mi = 360 /perimeter;
        LogUtil.showLog("经度(东西方向)1M实际度","=="+ longitude_per_mi);
        LogUtil.showLog("纬度(南北方向)1M实际度","=="+ latitude_per_mi);

        Double leftLo =longitude-(radius*longitude_per_mi);
        Double rightLo =longitude+(radius*longitude_per_mi);
        Double topLa =latitude+(radius*latitude_per_mi);
        Double bottomLa =latitude-(radius*latitude_per_mi);
        LatLng left = new LatLng(latitude,leftLo);
        LatLng right = new LatLng(latitude,rightLo);
        LatLng top = new LatLng(topLa,longitude);
        LatLng bottom = new LatLng(bottomLa,longitude);
        LogUtil.showLog("left","=="+ left.toString());
        LogUtil.showLog("right","=="+ right.toString());
        LogUtil.showLog("top","=="+ top.toString());
        LogUtil.showLog("bottom","=="+ bottom.toString());

        boundsBuilder.include(left);
        boundsBuilder.include(right);
        boundsBuilder.include(top);
        boundsBuilder.include(bottom);
    }

欢迎博友留言不同的方案。

更多工具:

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值