【发布时间】:2014-01-18 14:15:21
【问题描述】:
我有一个构成地理区域边界的经度和纬度列表。我想在这个地理区域内生成一些随机坐标。您能否建议一些我可以采用任何语言的方法?
【问题讨论】:
标签: algorithm latitude-longitude
我有一个构成地理区域边界的经度和纬度列表。我想在这个地理区域内生成一些随机坐标。您能否建议一些我可以采用任何语言的方法?
【问题讨论】:
标签: algorithm latitude-longitude
就像任何问题一样,有很多方法可以解决它,我首先想到的是
x=rand()%(maxX-minX)+minX 内生成随机坐标(Y 也一样)http://en.wikipedia.org/wiki/Point_in_polygon
编辑: 正如 Jan Dvorak 所建议的那样,在大面积上使用它可能会有问题,我相信如果你的多边形靠近赤道并且他的大小小于 100 公里,它会工作得很好。
如果您在 180° 线附近也会遇到问题,因为它旁边就是 -180°。
【讨论】:
首先,我们将地球的形状建模为一个球体。解决oblate spheroid 的问题要困难得多。
生成random point on a sphere 相对容易。
生成random point on a spherical triangle 更难,但在这篇链接的文章中有解释。
您需要将多边形划分为spherical triangles,并根据它们的面积对它们进行加权。然后根据权重随机选择一个球面三角形。
对于一般情况,triangulating a spherical polygon is not possible,然而,对于大多数实际情况,三角测量是一项简单的任务。 here(算法 1,第 901 页)描述了一种这样的算法,并提供了 C++ 源代码 here(搜索“计算构造板块几何参数的计算方法”)。
【讨论】:
你可以试试这个:
计算此地理区域内的所有坐标,请参阅保存在vector<Point> points。
在[0, points.size()) 内生成一个随机整数,见k。
points[k] 是你想要的。
【讨论】: