根据地图上多个坐标点,获取中心坐标点。
后台添加了地图上多个点,组成了一个区域,前端只能选择区域内的点。
取中心点主要是地图展示的默认位置,我希望是区域的中间。
//参数数组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);