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=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.