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

时间:2016-10-18 15:48:41

标签: geocoding latitude-longitude auto-generate random-data

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

我正在做的应用程序,我需要测试数据。 我以JSON格式提供它。

2 个答案:

答案 0 :(得分:1)

  1. 从OpenstreetMap下载国家/地区多边形,或者使用google kml或QGIS等免费GIS工具自行绘制。在QGI中导入kml并导出为只有lat,lon坐标的csv最后你有一个lat的点列表,长WGS84

  2. 确定国家多边形的最小值,最大值,这样就会在国家周围设置一个矩形边界框,左下角为minLong,minLat。

  3. 创建范围为minLongitude,maxLongitude和ramdom latitdue值的随机经度值。

  4. 检查来自步骤1的随机lat,lon isInsidePolygon,如果是,则使用此值并继续步骤3.

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

    注意:对于重叠基准限制从-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)

enter image description here

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

enter image description here

    最后,仅保留国家形状内的点,而外部的点则被丢弃。然后生成新的点,直到达到用户期望的数量。
# random point generation
while counter != points:
  if random_point.within(shape):
    ...
    list_of_points.append(ran_point)
    counter += 1

enter image description here

版本2 第2版​​的速度更快,因为它可以减少得分,因此提高了20%:

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

enter image description here

要进行更正,将检查所有点是否在国家形状内。对于该国家/地区以外的每个地点,都会生成一个新地点。

enter image description here

希望这很清楚。查看代码和github存储库以获取更多详细信息