我有一个包含不同位置的纬度和经度的数组,它显示在google地图中。现在我需要做一个通过所有这些点的多边形。我在google apis中找到了很好的教程,但这个例子只适用于3点。
有没有人可以帮助我,或者给我推荐一些教程,让我可以创建一个多边形,而不是线之间的相交。
谢谢。
发布于 2018-11-05 12:30:49
可以使用Graham scan方法查找坐标点的凸包,并将这些凸包传递给多边形。
该算法有一个javascript实现:
https://github.com/brian3kb/graham_scan_js
上面的repo还提供了一个如何使用Google Maps实现此功能的示例:
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
});
发布于 2017-07-12 22:11:23
只需使用您获取的example并添加更多积分即可。
但是,对于超过三个点的情况,如果不正确地对坐标进行排序,将会遇到相交问题。
要解决这个问题,你需要一个算法:
答案是:Sorting points to avoid intersections。
你可以停在答案的第二个点,你只需计算多边形的中心,然后计算角度来对点进行排序。
但是,您不能在此算法中使用纬度和经度。
对于这种比例,你可以将你的坐标投影到一个二维平面上。
试试这个:merkator projection
https://stackoverflow.com/questions/45056207
复制相似问题