User:Hfst/Osmosis/TagTransform01
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=routewegen--tf accept-relations type=route - und davon nur die mit
route=bicyclewegen--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.