如何在特定国家/地区内随机生成数千个地理坐标(长/纬度)?
我正在做的应用程序,我需要测试数据。 我以JSON格式提供它。
答案 0 :(得分:1)
从OpenstreetMap下载国家/地区多边形,或者使用google kml或QGIS等免费GIS工具自行绘制。在QGI中导入kml并导出为只有lat,lon坐标的csv最后你有一个lat的点列表,长WGS84
确定国家多边形的最小值,最大值,这样就会在国家周围设置一个矩形边界框,左下角为minLong,minLat。
创建范围为minLongitude,maxLongitude和ramdom latitdue值的随机经度值。
检查来自步骤1的随机lat,lon isInsidePolygon,如果是,则使用此值并继续步骤3.
这应该在国家(多边形)区域内给出随机坐标的平均分布。
注意:对于重叠基准限制从-180到180经度的国家,步骤4将无法(轻松)工作。但这通常没有限制。
修改强>: 为了使任务更容易,只需使用国家内的矩形部分,您可以使用谷歌地图或地球手动获取坐标,然后从第3步开始。这样您就不会在国家边界附近获得积分,但它更容易
答案 1 :(得分:0)
我已经开发了一个可以解决问题的库:PyCristoforo。您可以通过pip pip install pycristoforo
轻松安装它。它期望的唯一输入变量是国家名称(或国家代码)和所需的点数。
查看我的Github,了解更多详细信息。
当前,PyPi有两个主要版本:
版本1
# getting min, max lat/lng
min_lng = get_min_lng(shape)
min_lat = get_min_lat(shape)
max_lng = get_max_lng(shape)
max_lat = get_max_lat(shape)
# generate random float between [min_lng, max_lng)
val1 = numpy_random.uniform(min_lng, max_lng)
# generate random float between [min_lat, max_lat)
val2 = numpy_random.uniform(min_lat, max_lat)
# random point generation
while counter != points:
if random_point.within(shape):
...
list_of_points.append(ran_point)
counter += 1
版本2 第2版的速度更快,因为它可以减少得分,因此提高了20%:
算法的第一部分实现了拒绝采样方法(如此处https://codereview.stackexchange.com/questions/69833/generate-sample-coordinates-inside-a-polygon所述)。关于此解决方案的硬约束是仅适用于凸形。 从下面的图片中可以看到,在国家形状之外可能会生成一些点。
要进行更正,将检查所有点是否在国家形状内。对于该国家/地区以外的每个地点,都会生成一个新地点。
希望这很清楚。查看代码和github存储库以获取更多详细信息