使用OpenStreetMap获取特定国家的所有城市

7

我一直在尝试使用OpenStreetMap API获取特定国家所有城市的经度、纬度列表,以便开发iOS应用程序。

然而,我一直无法做到这一点。 我一直在尝试使用Overpass API,但我无法找到正确的参数来列出所有城市(而不仅仅是前1000个左右)。

有人知道一种返回正确JSON格式的方法吗?

3个回答

8

我认为您的查询不适合使用API,因为结果非常稀少但需要运行所有数据(没有通用索引)。

因此,请获取OSM extact,使用osmosis进行过滤,然后对结果进行自己的处理。

请记住,在OSM中,城镇可以有不同的建模方式:

  • 作为标记节点,例如place=city
  • 作为土地利用区域(还带有其他位置标记)
  • 作为boundary,因此是一个(多边形)关系
你可能还想看一下 nominatim 用于地理编码,以及 legal FAQ 用于分发 OSM 数据。

1
Planet.osm是OpenStreetMap数据的一个文件:其中包含组成地图的所有节点、路径和关系。每周都会发布新版本。它是一个很大的文件(未压缩的XML变体超过498GB,经过bz2压缩后为36.1GB,PBF格式为25.2GB)。我认为最好只是向openstreetmap nominatim api或类似的服务请求,因为没有多少人能够使用如此庞大的数据集。 - Christopher Thomas

1
使用Overpass API。
area["ISO3166-1"="CY"]->.a1;
(
  nwr[place="city"](area.a1);
);
out body;
链接。打开控制台并点击运行以查看请求和响应。
或者使用 curl。
curl 'https://lz4.overpass-api.de/api/interpreter' \
 --data-raw 'data=[out:json];area["ISO3166-1"="CY"]->.a1;
(
nwr[place="city"](area.a1);
);
out body;'

0

尝试使用Overpass_API

例如,德国的所有州:

 http://overpass-api.de/api/interpreter?data=(rel[admin_level="4"](47,6,55,15););out;

我成功地通过 curl 'http://overpass-api.de/api/interpreter' --data-raw 'data=(rel[admin_level="4"](47,6,55,15););out;' 运行了它,但是它返回了大量的数据。它能否更简洁一些?顺便问一下,它能返回 JSON 吗? - Toolkit
1
(47,6,55,15) 不是一个国家。 - Toolkit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接