创建封闭的空间多边形

时间:2010-01-07 11:03:13

标签: geospatial polygon

我需要为测试目的创建一组(大)空间多边形。是否有算法可以创建一个保持在边界包络内的随机形状的多边形?我正在使用OGC简单的东西,所以创建知名文本的例程是最有用的,选择的语言是C#,但它并不重要。

3 个答案:

答案 0 :(得分:1)

你的边界信封是什么形状的?如果它是一个矩形,则将随机多边形生成为[0,1] x [0,1]内的点列表,并缩放到矩形的大小。

如果信封不是矩形,事情会变得有点棘手。在这种情况下,您可以简单地通过在单位正方形内生成点并拒绝位于单位正方形部分中的任何位置而不会缩放到您选择的边界包络来获得最佳性能。

HTH

标记

补充

如果您只想要凸多边形,则可以使用凸包算法之一。由于您似乎不仅需要凸多边形,因此您可以使用圆形扫描。

但是你可能会发现沿着平行于x轴或y轴的直线扫描更简单。假设x轴。

  1. 将点分类为x顺序。
  2. 选择最左边(即第一个)点。在此点的y坐标处,在单位正方形上绘制一条假想的水平线。准备沿假想线上方的多边形边界创建一个点列表,沿着它下面的边界创建另一个列表。
  3. 选择下一个点。将其添加到由y坐标确定的上边界或下边界列表中。
  4. 继续,直到你没有积分。
  5. 这将生成凸多边形和非凸多边形,但非凸性将是相当有限的形式。没有入口或曲折。

    另一种想法

    为了避免边缘交叉并避免在单位正方形内生成随机点后进行圆形扫描,您可以:

    1. 在极坐标中生成单位圆内的随机点,即(r,theta)。
    2. 按照以下顺序对点进行排序。
    3. 转换为笛卡尔坐标。
    4. 将单位圆缩放到您选择的边界椭圆。
    5. 在我的头顶,这似乎工作正常

答案 1 :(得分:1)

他们真的需要随机,还是真正的WKT呢?因为如果愿意,只需转到http://koordinates.com/并下载几个图层。

答案 2 :(得分:1)

在这里,您可以找到两个如何生成随机凸多边形的示例。它们都是Java,但应该很容易将它们重写为C#:

另一种可能的方法,基于生成一组随机点并采用Delaunay曲面细分。

通常,生成适当的随机多边形的问题并非无足轻重。