给定随机坐标点,构建确定边点的多边形。

3
我有一组在 Leaflet 地图上没有组织的点,这些点在我的实现中代表 Minecraft 服务器地图上的领土节点(可在此网址查看:http://loka.minecraftarium.com/map)。目前,我的实现只使用这些点并使用 Leaflet 在点周围画圆来粗略地表示控制区域。
然而,这样做有些丑陋,并且不能代表期望的最终结果,即根据一组数据边缘点绘制多边形区域。由于这些点的无组织性质,我无法轻松地在这些点上声明 '边缘点',因为它们将源于一个原始来源(城镇中心)并向外扩展,直到玩家扩展其领土。
我的问题是:是否有一种方式,给定这些点集,可以迭代它们以自动确定边缘点和某种顺序,然后将它们传递给 Leaflet 多边形位置并绘制代表控制而不仅仅是在它们周围画圆的一堆点的多边形区域呢?
我看到了关于套鞋带公式的一些东西,但我不确定它/如何与“内部”有点的区域一起工作。
下面是当前结果:Current Result 期望的结果(当然不带圆圈):Desired Result (without the circles inside of course) 非常感谢!

5
您需要寻找的是“凸包”,有几个已知的算法可用于计算凸包:http://en.wikipedia.org/wiki/Convex_hull_algorithms。 - Jean-Karim Bockstael
1个回答

0

我从user3413723那里得到了这个,它在使用lat/lng对象方面表现出色。 https://npm.runkit.com/hull.js 这是我如何与谷歌地图一起使用它的:

// 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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接