根据地图上多个坐标点,获取中心坐标点。

后台添加了地图上多个点,组成了一个区域,前端只能选择区域内的点。

取中心点主要是地图展示的默认位置,我希望是区域的中间。

//参数数组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);

 

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]