在区域(国家/城市)内生成随机经纬度值
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 这样的免费 GIS 工具更好地自己绘制一个。在 QGI 中导入 kml 并导出为仅具有 lat,lon 坐标的 csv 最后你有一个 lat,long WGS84 中的点列表
确定国家多边形的最小值,最大值,这给出了一个围绕国家的矩形边界框,左下角为 minLong, minLat。
在 minLongitude、maxLongitude 和随机纬度值范围内创建一个随机经度值。
检查第 1 步中的随机 lat, lon isInsidePolygon,如果是,请使用此值并继续第 3 步。
这应该在国家(多边形)区域内给出随机坐标的平均分布。
注意:步骤 4 不适用于(容易地)与基准限制从 -180 到 180 经度跳转的国家/地区重叠。但这通常没有限制。
编辑: 为了使任务更容易,只需使用国家内的一个矩形部分,您可以使用谷歌地图或地球手动获取坐标,然后从第 3 步开始。这样您将不会在国家边界附近获得点,但它更容易.
【讨论】:
以上是关于在区域(国家/城市)内生成随机经纬度值的主要内容,如果未能解决你的问题,请参考以下文章
如何在DBPedia中获取一个城市的POI及其所在国家的经纬度?