根据多边形的坐标点计中心点的方法

由于项目需要在地图覆盖物中心增加一个标签,我在网上找到一个算法来根据多边形的坐标点来计算得出该图像的中心点,在此记录一下。

复制代码
    var findCenter = function (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];
            var lat, lng, x, y, z;
            lat = parseFloat(point.lat) * Math.PI / 180;
            lng = parseFloat(point.lng) * 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 {lat:tmp_lat * 180 / Math.PI, lng:tmp_lng * 180 / Math.PI};
    }
复制代码

调用时通过Polygon的点直接获取中心点

var map = new BMapGL.Map('container');
var points = marker.getPath();
var center = findCenter(points);
var centerPoint = new BMapGL.Point(center.lng, center.lat);
var marker = new BMapGL.Marker(centerPoint);
map.addOverlay(marker1);

 

原文地址: https://blog.csdn.net/michaelzhouh/article/details/107380025

posted @   安培昌浩  阅读(391)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示