在区域(国家/城市)内生成随机经纬度值

Xsm*_*ael 8 geocoding latitude-longitude auto-generate random-data

如何随机生成保留在特定国家/地区内的数千个地理坐标(长/纬度)?

这是我正在做的应用程序,我需要测试数据。我更喜欢 JSON 格式。

小智 9

我开发了一个应该可以解决问题的库: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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 在其中,随机坐标以统一的方式生成
# 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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 最后,只保留国家形状内部的点,丢弃外部的点。然后生成新的点,直到达到用户预期的数量。
# random point generation
while counter != points:
  if random_point.within(shape):
    ...
    list_of_points.append(ran_point)
    counter += 1
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

版本 2 版本 2 的速度提高了 20%,因为它丢弃的点数更少:

算法的第一部分实现了拒绝采样方法(如这里所解释的https://codereview.stackexchange.com/questions/69833/generate-sample-coordinates-inside-a-polygon)。此解决方案的硬约束是仅适用于凸面形状。正如您从下图中所看到的,一些点可以在国家形状之外生成。

在此处输入图片说明

为了纠正它,然后检查所有点是否位于国家形状内。对于国外的每个点,都会生成一个新点。

在此处输入图片说明

希望这已经足够清楚了。查看代码和github repo以获取更多详细信息


Ale*_*ien 2

  1. 从 OpenstreetMap 下载国家多边形,或者更好地使用 google kml 或 QGIS 等免费 GIS 工具自己绘制一个。在 QGI 中导入 kml 并导出为仅具有经纬度坐标的 csv 最后,您将获得经纬度 WGS84 中的点列表

  2. 确定国家多边形的最小值、最大值,这给出了围绕国家的矩形边界框,其左下角为 minLong、minLat。

  3. 创建一个范围为 minLongitude、maxLongitude 的随机经度值和一个随机纬度值。

  4. 检查步骤 1 中的随机纬度、经度是否在多边形内部,如果是,则使用该值并继续步骤 3。

这应该使随机坐标在国家(多边形)区域内均匀分布。

注意:对于与从 -180 度经度跳到 180 度经度的基准限制跳跃重叠的国家/地区,步骤 4 不会(很容易)起作用。但这通常没有限制。

编辑:为了使任务更容易,只需使用国家内的矩形部分,您可以使用谷歌地图或地球手动获取该坐标,然后从步骤 3 开始。这样您将不会获得国家边界附近的点,但它是容易多了。