如何获得随机生成的数千个保留在特定国家/地区内的地理坐标(经度/纬度)?
它适用于我正在做的应用程序,我需要测试数据。我更喜欢 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 或像 QGIS 这样的免费 GIS 工具更好地自己绘制一个。在 QGIs 中导入 kml 并导出为 csv,只有 lat,lon 坐标 最后你有一个 lat,long WGS84 中的点列表
确定国家多边形的最小值,最大值,这给出了一个围绕国家的矩形边界框,左下角为 minLong,minLat。
在 minLongitude、maxLongitude 范围内创建一个随机经度值和一个随机纬度值。
检查第 1 步中的随机 lat, lon isInsidePolygon,如果是,请使用此值并继续第 3 步。
这应该给出国家(多边形)区域内随机坐标的平均分布。
注意:步骤 4 不适用于(容易)与基准限制从 -180 到 180 经度跳跃的国家重叠。但这通常没有限制。
编辑:为了使任务更容易,只需在国内使用一个矩形部分,您可以使用谷歌地图或地球手动获取该坐标,然后从第 3 步开始。这样您将不会在国家边界附近获得点,但它是容易得多。