OpenStreetMap关系ID很少出现

时间:2014-02-07 11:24:21

标签: openstreetmap

首先,我不是在寻找任何第三方解析器或现有库。我还在StackOverflow上阅读了所有相关的OSM问题,但没有看到答案。

我正在寻求将OpenStreetMap数据解析为一个可行的呈现和路由结构,并对此有一个快速的问题。为此,我出口了一个主要城市中心的一小部分,并将其解析为可用的结构。

Relation-XML看起来像这样:

<relation id="31249" visible="true" version="100" changeset="13180178" timestamp="2012-09-20T08:12:17Z" user="Skywave" uid="10927">   
<member type="way" ref="22375740" role=""/>   
<member type="way" ref="39271187" role=""/>   
<member type="way" ref="39271189" role=""/> 
<member type="way" ref="39271191" role=""/> 
</relation>

..等等

但这些ref-ID通常不存在于XML中。理想情况下,他们会引用另一个节点,另一个关系......但通常它们只出现在这一行中。这实际上意味着它是无价值的信息,对吗?

我怀疑OSM包含所有已知信息,如果该信息恰好位于地图区域之外,其关系中的引用仍然包含在内,但所引用的实际对象不会一直导出,我可以将其修剪掉吗? ...

试图在OSM网站上找到这个..不能: - )

2 个答案:

答案 0 :(得分:3)

API等提取的OSM不包含关系中链接的所有元素。它们包含触及提取的边界框的所有地理对象(节点,方式)。但是对于关系而言,它不会像这样工作,只是因为否则在最坏的情况下它将级联(关系链接到其他关系或存在于多个关系中的巨大方式......)直到大量的对象(即使没有bbox) )需要存在于提取物中。

您可以使用更大的提取,确保包含所有数据(例如country planet.osm提取)或调用Overpass API之类的只读API来获取对象。

答案 1 :(得分:0)

Overpass API是最佳选择。要提取与给定关系相关的所有节点,您需要执行如下查询:

relation(31249);
>;
out;

请参阅:http://overpass-turbo.eu/s/41k

仅选择给定关系的方式成员(及其节点ID):

relation(31249);
way(r);
out;

Overpass API起初非常混乱但非常强大。