User:Hfst/Osmosis/TagTransform01

From OpenStreetMap Wiki
Jump to: navigation, search

Fahrradgeeignete Wege markieren

Für eine kompakte Fahrradkarte will ich alle fahrradgeeigneten Wege markieren. Dazu gehören

  • Wege die zu einer Fahrradroute gehören
  • Wege mit cycleway*=*
  • ...

Das Osmosis-Shellscript

Ich will alle Mitglieder einer Fahrradroute (type=route, route=bicycle) markieren.

#!/bin/bash

# $1 name der input-Datei

name=`basename $1 .osm`
output=$name-1.osm

# nimm die Datei $name.osm
# schnapp dir alle relationen mit type=route
# und davon alle mit route = bicycle
# die darin enthaltenen Wege
# die darin enthaltenen Punkte
# und dann --tt (tagtransform) ergänzt ein Feld hfbike=route_bicycle

osmosis \
        --read-xml $name.osm \
        --tf accept-relations type=route \
        --tf accept-relations route=bicycle \
        --used-way \
        --used-node \
        --tt bike-yes01.xml \
        \
        --read-xml $name.osm \
        \
        --merge \
        \
        --tf accept-ways highway=* \
        --used-node \
        --tt bike-yes02.xml \
        \
        --write-xml $output

Die erste xml-Datei zum Suchen und Ersetzen

Wenn wir an der Stelle --tt bike-yes01.xml ankommen haben wir

  • die Relationen mit type=route wegen --tf accept-relations type=route
  • und davon nur die mit route=bicycle wegen --tf accept-relations route=bicycle
  • die Wege in den Relationen wegen --used-way
  • die Punkte in den Wegen und Relationen wegen --used-node

Das ganze Material geht in Tagverarbeitung mit bike-yes01.xml -tt bike-yes01.xml.

Nochmal einlesen

<?xml version="1.0"?>
<translations>
  <translation>
    <name>set bike=yes</name>
    <description>
        no description
    </description> 

    <match type="way">
      <tag k="highway" match_id="hw" v=".*"/>
    </match>

    <output>
      <copy-all/>
      <tag k="hfbike" v="route_bicycle"/>
    </output>

  </translation>

</translations>

Jetzt kommen wir zu der Zeile mit --read-xml $name.osm. Die letzten Ergebnisse liegen jetzt erst mal auf einem Stapel und es wird zum zweiten Mal die $name.osm eingelesen und auf komplett auf den Stack gelegt. Danach kommt ein --merge. Das nimmt sich die zuletzt abgelegten Daten, also die unveränderten und merged die mit den Daten die drunter liegen, also die, die durch den bike-yes01.xml-Filter gegangen sind. Bei doppelten Wegen gewinnt der 2te, also der mit dem Extra-Tag.

Die Zweite xml-Datei zum Suchen und ersetzen

Jetzt sind wir an der Stelle --tt bike-yes02.xml. Hier schnappe wir uns erst alle highway=cycleway* und setzen unser neues Tag hfbike und dann noch alle Wege, die ein *bicycle=yes haben. Das ganze sollte man noch um die highway=track erweitern.

<?xml version="1.0"?>
<?xml version="1.0"?>
<translations>

  <translation>
    <name>set hfbike=cycleway</name>
    <description>
        no description
    </description>
    <match mode="or" type="way">
      <tag k="cycleway.*" match_id="cw" v=".*"/>
    </match>
    <output>
      <copy-all/>
      <tag k="hfbike" from_match="cw" v="cycleway"/>
    </output>
  </translation>

  <translation>
   <name> set hfbike=footandcycle</name>
   <description>
        no description
   </description>
   <match mode="and" type="way">
        <tag k="highway" v=".*"/>
        <tag k=".*bicycle" v="yes"/>
   </match>
   <output>
        <copy-all/>
        <tag k="hfbike" v="footandcycle" />
   </output>
 </translation>
</translations>

Damit haben wir jetzt alle fahrradtauglichen Wege mit dem Tag hfbike gekennzeichnet und in einer eigenen osm-Datei.