9

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

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

4

2 回答 2

10

我开发了一个可以解决问题的库: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 存储库以获取更多详细信息

于 2019-07-28T09:09:33.620 回答
2
  1. 从 OpenstreetMap 下载国家多边形,或者使用 google kml 或像 QGIS 这样的免费 G​​IS 工具更好地自己绘制一个。在 QGIs 中导入 kml 并导出为 csv,只有 lat,lon 坐标 最后你有一个 lat,long WGS84 中的点列表

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

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

  4. 检查第 1 步中的随机 lat, lon isInsidePolygon,如果是,请使用此值并继续第 3 步。

这应该给出国家(多边形)区域内随机坐标的平均分布。

注意:步骤 4 不适用于(容易)与基准限制从 -180 到 180 经度跳跃的国家重叠。但这通常没有限制。

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

于 2016-10-19T14:36:35.437 回答