提问者:小点点

如何使用许多坐标在谷歌地图中绘制多边形


我有一个包含不同位置的纬度和经度的数组,显示在谷歌地图上。现在我需要做一个通过所有这些点的多边形。我已经在google apis中找到了很好的教程,但是这个例子只适用于3点。

有没有人可以帮助我或给我参考任何教程,我可以创建一个多边形,而不相交的线。

谢谢你。


共2个答案

匿名用户

您可以使用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平面。

试试这个:默卡特投影