我有一份经度和纬度列表,它们构成了一个地理区域的边界。我想在这个地理区域内生成一些随机坐标。你能用一种语言建议一些方法吗?
答案 0 :(得分:6)
像任何问题一样,有很多方法可以解决它,我想到的第一件事就是
x=rand()%(maxX-minX)+minX
内生成随机坐标(对Y来说也是如此)http://en.wikipedia.org/wiki/Point_in_polygon
修改: 正如Jan Dvorak所说,在大面积区域使用它可能会有问题,我相信如果你的多边形接近赤道并且他的尺寸小于100公里,它就可以正常工作。
如果你靠近180°线,你也会遇到问题,因为它旁边是-180°。
答案 1 :(得分:1)
首先,我们将地球的形状建模为球体。解决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(搜索“用于计算构造板块几何参数的计算方法”)。
答案 2 :(得分:0)
你可以试试这个:
计算此地理区域内的所有坐标,请参阅vector<Point> points
中的保存。
在[0, points.size())
中生成随机整数,见k
。
points[k]
就是你想要的。