根据多个坐标点计算腾讯地图、百度地图、高德地图中心点

来源:网络 文章列表 2023-04-27 8
线路图计算腾讯地图、百度地图、高德地图中心点

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

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

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

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

 

腾讯云限量秒杀

1核2G 5M 50元/年 2核4G 8M 74元/年 4核8G 5M 818元/年 CDN流量包 100GB 9元

版权声明

本站部分原创文章,部分文章整理自网络。如有转载的文章侵犯了您的版权,请联系站长删除处理。如果您有优质文章,欢迎发稿给我们!联系站长:
愿本站的内容能为您的学习、工作带来绵薄之力。

评论

  • 随机获取
点击刷新
精彩评论

友情链接