腾讯地图多边形转换成圆

6 篇文章 0 订阅
2 篇文章 0 订阅

//根据圆心获取对应区域的经纬度数组

getRadius(latLng,list) {//times 半径,单位:公里;latLng为点击地图时的经纬度,即为圆心,list传进来的参数默认是空数组

var latRate = 0.008983153559494;//此参数为本人经过测试后所得的维度为1公里的固定参数值

var lngRate = 0.0096998403403;//此参数为本人经过测试后所得的经度为1公里的固定参数值

var times = 0.15;//默认设置为150米,具体值可以作为参数值进行传入
       var pointLen = 10;//默认为10变形,具体多边形的条数可以作为参数值进行传入
       var duobian = [];//此参数用于存储多边形的经纬度,在vue中可以使用变量进行代替,其他参数同理

for(let m=0;m<pointLen;m++)  {

      //duobian里面放的是圆外围的经纬度,维度=圆心的维度+余弦计算每个夹角度数所得值*每公里的维度固定值*设置的圆半径times即 Math.cos(m*Math.PI*2/pointLen)*latRate*times,latLng.lng;

      //同理,经度=圆心的维度+正弦计算每个夹角度数所得值*每公里的经度固定值*设置的圆半径times即 Math.sin(m*Math.PI*2/pointLen)*lngRate*times;其中Math.PI*2/pointLen为每两条边的夹角度数

      duobian.push(new qq.maps.LatLng(latLng.lat-0 + Math.cos(m*Math.PI*2/pointLen)*latRate*times,latLng.lng + Math.sin(m*Math.PI*2/pointLen)*lngRate*times));

      //此处存储多边形的经纬度到list是用于腾讯地图转百度所用,方法放在下方

     list.push({

            lng:latLng.lng-0 + Math.sin(m*Math.PI*2/pointLen)*lngRate*times,

            lat:latLng.lat-0 + Math.cos(m*Math.PI*2/pointLen)*latRate*times

     })

}

list = this.qqMapToBMap(list);

var lngArray = [];

var latArray = [];

for(var i=0;i<list.length;i++){

     lngArray.push(list[i].lng);

     latArray.push(list[i].lat);

}

var obj = {

     lng: lngArray,

     lat: latArray

}

return obj;

},

//效果图如下

放大后看到的外围边是平整的,如下

//腾讯经纬转“百度”经纬度

qqMapToBMap(latLng) {

var list = [];

for(var i=0;i<latLng.length;i++) {

     if (latLng[i].lng == null || latLng[i].lng == '' || latLng[i].lat == null || latLng[i].lat == '') {

        list.push({

        lng:latLng[i].lng,

        lat:latLng[i].lat,

    });

}  else  {

     var x_pi = 3.14159265358979324;

     var x = parseFloat(latLng[i].lng);

     var y = parseFloat(latLng[i].lat);

     var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);

     var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);

     var lng = (z * Math.cos(theta) + 0.0065).toFixed(12);

     var lat = (z * Math.sin(theta) + 0.006).toFixed(12);

 

    list.push({

      lng:lng-0,

      lat:lat-0

   });

}

}

return list;

}

转载请注明出处

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值