【发布时间】:2010-09-10 03:52:12
【问题描述】:
拥有来自 GIS 文件(城市地图)的一组(2D)点,我需要生成定义该地图(其边界)的“轮廓”的多边形。它的输入参数将是点集和“最大边长”。然后它将输出相应的(可能是非凸的)多边形。
到目前为止,我发现的最佳解决方案是生成 Delaunay 三角形,然后移除比最大边长更长的外部边。在所有外部边缘都比这短之后,我只需删除内部边缘并获得我想要的多边形。问题是,这非常耗时,我想知道是否有更好的方法。
【问题讨论】:
-
实际上,我认为 ArcGIS 没有内置算法来做他想做的事。 ArcGIS 有能力做凸包,但凹包要复杂得多。
-
您能更准确地定义您的问题吗? :) 5 分:正方形的 4 个角及其中心。你的边界是什么?如果您的最大边长允许中心,那么您将“弯曲”到正方形的 4 条边中的哪条边以包括中间点是完全任意的。
-
是的,我做到了,我在问题中提到的方式(使用德劳内三角形)。后来我对下面 nsanders 指出的 alpha 形状概念做了一些工作,但在我成功之前,问题的优先级降低了,我转向另一个问题。
-
Delaunay 具有正确的复杂度 (O(n log n))。我怀疑你可以渐近地做得更好。
-
@frank 这不是手动的,它是为 GPS 导航应用程序处理地图的自动化工具的一部分。在我的具体情况下,这确实是任意的——这些点是街角,而生成的多边形将是一个城市的轮廓。我使用了一个任意值,它会给我一个足够详细的多边形,不会太重而无法渲染。我认为必须这样,您必须根据应用程序的需要确定最大长度 - 我不知道您如何事先自动计算它。
标签: algorithm geometry 2d gis concave-hull