平铺的OSM& - 找到给定城市/州的界限

时间:2015-05-06 16:09:31

标签: openstreetmap

我使用立交桥api下载了几张美国地图的瓷砖,现在我在美国本地有地图,我想获得一个特定城市(或州)的边界而不涉及API。

我应该搜索某些标签或关系吗?我假设我必须从标记为k=namev=city_name)和(k=placev=city)的节点开始,并以此为基础id找到way个节点。

我的假设是否正确?如果是的话,一旦我有一个与城市相对应的节点,你能给我一些指示吗?

请注意。我浏览了OSM维基并研究了一点OSM XML格式,但到目前为止我还没有能够全面了解OSM XML结构,所以也许有更多经验的人可以帮助我。

1 个答案:

答案 0 :(得分:1)

管理边界被映射为waysrelations,并带有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

另见search engine results