我有一个包含不同位置的纬度和经度的数组,显示在谷歌地图上。现在我需要做一个通过所有这些点的多边形。我已经在google apis中找到了很好的教程,但是这个例子只适用于3点。
有没有人可以帮助我或给我参考任何教程,我可以创建一个多边形,而不相交的线。
谢谢你。
您可以使用Graham扫描方法来查找坐标点的凸包,并将其传递给多边形。
这里有一个算法的javascript实现:< br > https://github.com/brian3kb/graham_scan_js
上述回购还提供了一个如何使用谷歌地图实现这一点的示例:
https://github.com/brian3kb/graham_scan_js/blob/master/example/app1.js
以下是上述功能的基本实现:
function getConvexHullCoords(coords) {
const convexHull = new ConvexHullGrahamScan();
coords.forEach(item => {
convexHull.addPoint(item.lng, item.lat);
});
return convexHull.getHull().map((item) => {
return {
lat: item.y,
lng: item.x
};
});
}
const coords = [
{lat: 37.772, lng: -122.214},
{lat: 21.291, lng: -157.821},
{lat: -18.142, lng: 178.431},
{lat: -27.467, lng: 153.027}
];
new google.maps.Polygon({
paths: [getConvexHullCoords(coords)],
fillColor: '#000',
fillOpacity: 0.5
});
只需以您为例并添加更多积分。
然而,如果有三个以上的点,如果没有正确地对坐标进行排序,就会有相交的麻烦。
要解决这个问题,你需要一个算法:
答案如下:分拣点以避免交叉。
你可以停在答案的第二点,你只需要计算多边形的中心,然后计算角度来排序这些点。
但是,您不能在此算法中使用纬度和经度。
对于这个比例,您可以将坐标投影到2d平面。
试试这个:默卡特投影