在有界区域内随机生成坐标

8

我有一组经纬度,构成了一个地理区域的边界。我想在这个地理区域内生成一些随机坐标。您可以建议我可以用任何语言采取哪些方法?


类似但是针对平面的问题:https://dev59.com/ynjZa4cB1Zd3GeqPay-T - Lior Kogan
3个回答

8
像任何问题一样,解决它的方法有很多种,我首先想到的是:
  1. 我们把这个“地理区域”称为一个多边形。
  2. 找到多边形的边界框(很容易,只需要找到 maxX maxY minX minY)。
  3. 在边界框内生成随机坐标 x=rand()%(maxX-minX)+minX(Y同理)。
  4. 检测此坐标是否在多边形内,这个问题有很多解决方案,并且在任何给定的语言中都有实现,因此您不必自己实现。以下是C/C++的实现(很容易将其更改为其他语言):点在多边形内算法

http://en.wikipedia.org/wiki/Point_in_polygon

编辑: 正如Jan Dvorak所建议的那样,在大面积上使用这种技术可能会有问题,我认为如果你的多边形靠近赤道并且大小小于100km,它就可以正常工作。

另外,如果您接近180°线,就会遇到问题,因为它旁边就是-180°。


在大范围内,你无法用平面多边形来近似球面多边形,这是很复杂的。 - John Dvorak

1
首先,我们将地球的形状建模为一个球体。解决扁球体的问题要困难得多。
生成球面上的随机点相对容易。
生成球面三角形上的随机点更困难,但在这篇链接文章中有解释。
您需要将多边形分成球面三角形并根据它们的面积进行加权。然后根据权重随机选择一个球面三角形。
对于一般情况,无法三角化球面多边形,但对于大多数实际情况,三角剖分是一个简单的任务。其中一种算法在这里(算法1,第901页)进行了描述,C++源代码可在这里(搜索“计算构造板块几何参数的计算方法”)找到。

地理区域并不是很大,所以我没有采用这种方法。但是这些链接对于更大的地理区域非常有用和适合。 - van

0
你可以尝试这样做:
  1. 计算出该地理区域内的所有坐标,存储在vector<Point> points中。

  2. 生成一个[0, points.size())范围内的随机整数,将其存储在k中。

  3. points[k]就是你想要的。


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