我在Leaflet map 上有一组无组织的点,在我的实现中,这些点代表我的Minecraft服务器上 map 上的区域节点(可在http://loka.minecraftarium.com/map上查看)。目前,我的实现仅采用这些点,并使用传单在该点周围绘制一个圆圈以大致指示控制区域。

然而,这有点难看,并且不能代表期望的最终结果,该期望的最终结果是从给定一组数据的边缘点绘制多边形区域。但是,由于这些点是无组织的,因此,我无法轻松地在这些点上声明“边缘点”,因为它们将源自原始来源(市中心),并且随着玩家扩展其领土而消失。

我的问题:有没有一种方法可以给这些点集以迭代的方式自动确定边缘点和某种顺序,以便随后馈送Leaflet多边形位置并绘制一个表示控件的多边形区域,而不仅仅是一堆具有相交点的点在他们周围绘制的圆圈。

我已经看过一些有关鞋带配方的东西,但是我不确定在将“要点”放在该区域内时是否/如何工作。

以下是当前结果:

所需结果(当然没有圆圈)

提前谢谢了!

最佳答案

我是从user3413723获得的。它适用于经纬度对象。
https://npm.runkit.com/hull.js
这就是我在Google Maps中使用它的方式:

// in main.js
Hull = require("hull.js");

// ... results is my object array with lat/lng properties
var hull    = Hull(results, 50, ['.lng', '.lat']),
    hullMap = new google.maps.Polygon({
        paths: hull,
        strokeColor: '#FF0000',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.35
    });

hullMap.setMap(map);

10-01 14:18