我一直在寻找一些能让我快速有效地转换openstreetmaps(.osm)使用的xml的方法,以便创建一个符合我自己目的的更好的结构。
我想过并查看了不同的选项,例如XSLT,干净的JavaScript或nodejs,但我不确定这一切是否符合我的目的。
.osm文件如下所示:
<?xml version='1.0' standalone='no'?>
<osm version='0.6' generator='xapi: OSM Extended API'
xmlns:xapi='http://www.informationfreeway.org/xapi/0.6'
xapi:uri='/api/0.6/*[amenity=hotel]'
xapi:planetDate='200803150826'
xapi:copyright='2008 OpenStreetMap contributors'
xapi:instance='zappy2'>
<node id='218963' lat='52.5611324692581' lon='-1.79024812573334' timestamp='2006-03-22T16:47:48+00:00' version='1' changeset='2211'>
</node>
<node id='331193' lat='53.7091237972264' lon='-1.50282510180841' timestamp='2007-03-31T00:09:22+01:00' version='1' changeset='2211'>
<tag k='amenity' v='hotel'/>
</node>
...
<way id='4958218' timestamp='2007-07-25T01:55:35+01:00' version='1' changeset='2211'>
<nd ref='218963'/>
<nd ref='331193'/>
...
<tag k='amenity' v='hotel'/>
<tag k='building' v='hotel'/>
</way>
<relation id='123456' timestamp='2007-10-25T03:05:34Z' version='32' changeset='2211'>
<member type='node' ref='331193' role=''/>
<member type='node' ref='331194' role=''/>
...
<tag k='amenity' v='hotel'/>
<tag k='operator' v='Premier Inns'/>
<tag k='type' v='operators'/>
</relation>
</osm>
我想要达到的目标是:
<?xml version=‘1.0’ standalone=‘no’?>
<ways>
<way>
<id>1</id>
<name>Name</name>
<height>50m</height>
<geocoord>51.00000, 12.00000</geocoord>
</way>
<ways>
<relations>
<relation>
..
</relation>
</relations>
<nodes>
<node>
..
</node>
</nodes>
这是我想到的xml的简化版本
但正如您所看到的:我希望能够从标签中提取密钥和值,还能从osm中的数据中提取属性。这意味着<node>
元素(例如<node id="123">
)内的数据以及子元素标记(例如<node id=...><tag k="maxspeed" v="50"></node>
)。
由于osm中还有很多自定义创建的标签,我还需要解析“key”标签的值,因为我也想要使用它。 (例如<tag k="maxspeed" v="50">
maxspeed是自定义标记:它变为<maxspeed>50</maxspeed>
。
如果您有任何疑问,请随时提出!我很感激任何意见。