如何获取数千个地理坐标(经度/纬度),并使其仍然在特定的国家内随机生成?
这是我正在开发的应用程序中需要测试数据。我更喜欢将其以JSON格式提供。
如何获取数千个地理坐标(经度/纬度),并使其仍然在特定的国家内随机生成?
这是我正在开发的应用程序中需要测试数据。我更喜欢将其以JSON格式提供。
我开发了一个库可以完成这个任务: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存储库。
从OpenstreetMap下载国家多边形或者使用Google KML或免费GIS工具(如QGIS)自己绘制。将KML导入QGIS并导出为CSV,只保留纬度和经度坐标,最终得到一组WGS84坐标系下的点列表。
确定国家多边形的最小值和最大值,这将在国家周围创建一个矩形边界框,左下角为minLong、minLat。
创建一个随机的经度值,范围在minLongitude和maxLongitude之间,并创建一个随机的纬度值。
检查步骤1中的随机纬度和经度是否在多边形内,如果是,则使用此值并继续进行第3步。
这样可以在国家(多边形)区域内获得随机坐标的均匀分布。
注意:对于跨越数据极限从-180经度跳跃到180的国家,步骤4可能不起作用(容易)。但这通常不是限制。
编辑:为了使任务更加简单,只需使用国家内部的一个矩形部分,您可以手动使用Google Maps或Earth获取该国家的坐标,并从第3步开始。这样,您将不会获得靠近国家边界的点,但是这样更容易。