我使用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 如何从原始查询中下载的所有地点获取此数据?
答案 0 :(得分:2)
您可以通过Overpass API检索此信息,因为此API仅用于从OpenStreetMap下载原始和未处理的地理数据。但是为了确定哪个街道和地点属于哪个地区地理编码是必需的。
您已经发现Nominatim提供(反向)地理编码,但一次只能用于单个地址或单个坐标。您必须分别为每条街道和每个地点运行查询。但是这会让你陷入困境,因为它不符合OSM官方Nominatim实例的usage policy,该实例运行在受资助的服务器上。有两种选择:选择其他实例,例如Nominatim instance provided by MapQuest,或安装local Nominatim instance。
另一种可能性是在布达佩斯获得所有boundary=administrative关系(例如通过Overpass API)并自己进行地理编码。但请注意,这需要一些思考和后期处理,因为一条街道可以成为多个地区的一部分。
答案 1 :(得分:0)
您可以使用Overpass API 0.7获取点所属的区域(is_in)检查相同坐标的示例: http://overpass-api.de/api/interpreter?data=is_in(47.4959374,19.1174585);out; 它甚至更精确 - 因为nominatim试图找到最近的建筑并将其用作参考点。
答案 2 :(得分:0)
请查看以下有关如何将城市/县详细信息添加到每个信息路标的说明:
这适用于is_in,但也适用于使用foreach处理大量对象。