前端开发,集成了腾讯地图,根据地图上多个坐标点,获取中心坐标点。
后台添加了地图上多个点,组成了一个区域,前端只能选择区域内的点。
取中心点主要是地图展示的默认位置,我希望是区域的中间。
//参数数组points的每一项为每一个点的:纬度,精度
//返回中心点的数组[纬度,精度]
getPointsCenter(points) {
var point_num = points.length; //坐标点个数
var X = 0, Y = 0, Z = 0;
for(let i = 0; i< points.length; i++) {
if (points[i] == '') {
continue;
}
let point = points[i].split(',');
var lat, lng, x, y, z;
lat = parseFloat(point[0]) * Math.PI / 180;
lng = parseFloat(point[1]) * Math.PI / 180;
x = Math.cos(lat) * Math.cos(lng);
y = Math.cos(lat) * Math.sin(lng);
z = Math.sin(lat);
X += x;
Y += y;
Z += z;
}
X = X / point_num;
Y = Y / point_num;
Z = Z / point_num;
var tmp_lng = Math.atan2(Y, X);
var tmp_lat = Math.atan2(Z, Math.sqrt(X * X + Y * Y));
return [tmp_lat * 180 / Math.PI, tmp_lng * 180 / Math.PI];
},
调用的方法是:
// 例如我的格式是:纬度1,经度1;纬度2,经度2;……
var str = "30.866603259732102,104.39074045163579;30.8619616865538,104.38696390134282;30.842287763333733,104.38807970029302;30.843761605258894,104.43202501279302;30.851572589486928,104.43545824033208;30.874265047548715,104.41202646237798";
var arr = str.split(';');
var tmp_center = this.getPointsCenter(arr);
//总之返回的tmp_center[0]就是纬度,tmp_center[1]就是经度
//如果是腾讯地图如下:
//var default_point = new qq.maps.LatLng(tmp_center[0], tmp_center[1]);
//this.map.setCenter(default_point);
核心算法已经给出,请自行根据项目需求修改。