我使用立交桥api下载了几张美国地图的瓷砖,现在我在美国本地有地图,我想获得一个特定城市(或州)的边界而不涉及API。
我应该搜索某些标签或关系吗?我假设我必须从标记为k=name
,v=city_name
)和(k=place
,v=city
)的节点开始,并以此为基础id
找到way
个节点。
我的假设是否正确?如果是的话,一旦我有一个与城市相对应的节点,你能给我一些指示吗?
请注意。我浏览了OSM维基并研究了一点OSM XML格式,但到目前为止我还没有能够全面了解OSM XML结构,所以也许有更多经验的人可以帮助我。
答案 0 :(得分:1)
管理边界被映射为ways或relations,并带有boundary=administrative标记。边界类型由admin_level指定。城市的admin_level值因国家/地区而异,甚至可以包含多个值。但对于大多数国家而言,城市的admin_level值介于6到8之间(美国甚至从5开始)。相比之下,美国州的admin_level为4.在这些键的帮助下,您可以为特定城市/目标构建一个Overpass查询,甚至可以查询所有城市和州。这是一个example for Denver:
[out:json][timeout:25];
// gather results
(
way["boundary"="administrative"]["admin_level"~"6|7|8"]["name"="Denver"];
relation["boundary"="administrative"]["admin_level"~"6|7|8"]["name"="Denver"];
);
// print results
out body;
>;
out skel qt;
您可以看到它会产生多个结果。查看place和admin_level标记,以确定结果的重要性。
或者,您可以使用地理编码器,例如Nominatim。这是一个example for Denver。与Overpass API相比,Nominatim将按重要性对结果进行加权。它还支持多种输出格式,并且可以返回多边形(可用于确定边界)。在nominatim.openstreetmap.org上使用该实例时,请阅读Nominatim的usage policy。