//根据圆心获取对应区域的经纬度数组
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;
}
转载请注明出处