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