1

我使用 Overpass API 获取布达佩斯的街道和公共场所。我使用以下查询来获取它:

<union>
  <area-query ref="3600037244"/>
  <recurse type="node-relation" into="rels"/>
  <recurse type="node-way"/>
  <recurse type="way-relation"/>
</union>
<print mode="body"/>

它看起来可用,但我也需要市区。我发现市区位于此处的地址部分中:http://nominatim.openstreetmap.org/reverse?format=xml&lat=47.4959374&lon=19.1174585&zoom=18&addressdetails=1如何 获取我下载的所有地方的这些数据从原始查询?

4

3 回答 3

2

您可以通过 Overpass API 检索此信息,因为此 API 仅用于从 OpenStreetMap 下载原始和未处理的地理数据。但是为了确定哪条街道和地点属于哪个区,需要进行地理编码

您已经发现Nominatim提供(反向)地理编码,但一次仅针对单个地址或单个坐标。您必须单独为每条街道和每个地方运行查询。但这会给您带来麻烦,因为它不符合OSM 官方 Nominatim 实例的使用政策,该实例在受资助的服务器上运行。有两种选择:要么选择另一个实例,例如MapQuest 提供的 Nominatim 实例,要么安装您本地的 Nominatim 实例

另一种可能性是在布达佩斯获取所有边界=管理关系(例如通过 Overpass API)并自己进行地理编码。但请注意,这需要一些思考和后期处理,因为一条街道可以是多个区的一部分。

于 2013-11-07T09:47:06.357 回答
0

请查看以下关于如何将城市/县详细信息添加到每个信息路标的说明:

https://help.openstreetmap.org/questions/35976/add-reverse-geocoding-information-to-the-overpass-resulting-set

这适用于 is_in,但也适用于使用 foreach 处理大量对象。

于 2014-09-10T06:48:07.813 回答
0

您可以使用 Overpass API 0.7 获取点所属的区域 (is_in) 检查相同坐标的示例:http://overpass-api.de/api/interpreter?data=is_in(47.4959374,19.1174585); out ; 它更加精确——因为 nominatim 试图找到最近的建筑物并将其用作参考点。

于 2013-12-25T12:02:39.927 回答