OSM(XML)转换

时间:2016-10-12 13:20:14

标签: javascript xml xslt xml-parsing openstreetmap

我一直在寻找一些能让我快速有效地转换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>

如果您有任何疑问,请随时提出!我很感激任何意见。

0 个答案:

没有答案