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

Posted

技术标签:

【中文标题】在区域(国家/城市)内生成随机经纬度值【英文标题】:Generate random latitude-longitude values within an area(country/city) 【发布时间】:2017-02-27 23:47:50 【问题描述】:

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

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

【问题讨论】:

请说明您生成随机地理点的目的。 @prophet1906 我已经编辑了它的目的...... Google Maps API - generate random cooridinates in USA的可能重复 【参考方案1】:

我开发了一个可以解决问题的库: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 repo 了解更多详情

【讨论】:

这真的很有帮助。我只是用它来创建基于位置的随机 twitter 句柄生成器。 github.com/asimokby/random-twitter-handles_generator祝你好运!【参考方案2】:

    从 OpenstreetMap 下载国家多边形,或者使用 google kml 或像 QGIS 这样的免费 G​​IS 工具更好地自己绘制一个。在 QGI 中导入 kml 并导出为仅具有 lat,lon 坐标的 csv 最后你有一个 lat,long WGS84 中的点列表

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

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

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

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

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

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

【讨论】:

以上是关于在区域(国家/城市)内生成随机经纬度值的主要内容,如果未能解决你的问题,请参考以下文章

如何在DBPedia中获取一个城市的POI及其所在国家的经纬度?

如何在另一个点的半径内生成随机纬度和经度?

简单查询:各个国家最北端的城市? (纬度、城市、国家)

全球78707个主要城市数据库,包含经纬度坐标值国家省份

从国家、州、城市和每个城市纬度/经度的数据库查询构建 JSON

给定纬度/经度坐标,我们如何找出城市/国家?