User:Juwe/Qualitätssicherung

From OpenStreetMap Wiki
Jump to: navigation, search

Für die Sicherstellung der Vollständigkeit und Reihenfolge der Wege wird die Unterstützung durch JOSM genutzt.

Weiterhin werden OSM Relation Analyzer und Abfragen mittels Oberpass-API genutzt. Diese Abfrage wird nur für den jeweils gewählten Kartenausschnitt ausgeführt. Um alle Wegweiser in Lübeck abzufragen, bitte die Ansicht der Karte in der Overpass-API entsprechend einstellen.

Liste der erfassten Radrouten

Die Liste aller erfassten Radrouten des Netzes der Hansestadt Lübeck liefert folgende Anfrage bei Overpass-API:

[out:json][timeout:25];
relation["route"="bicycle"]["operator"~"^Hansestadt"|"Lüneburg Marketing"]({{bbox}});
out body;
>;
out skel qt;

Liste der erfassten Radwegweiser

Eine Karte aller erfassten Radwegweiser des Netzes der Hansestadt Lübeck liefert folgende Anfrage bei Overpass-API:

[out:json][timeout:25];
(
 node[lcn_ref~"^HL-"]({{bbox}});
);
out body;
>;
out skel qt;

oder alternativ dazu mit farblicher Markierung. Hier die Abfrage der Overpass-Api

 <osm-script output="json" timeout="25">
 <union into="_">
   <query into="_" type="node">
     <has-kv k="lcn_ref" modv="" regv="^HL-"/>
   </query>
 </union>
 <print e="" from="_" geometry="skeleton" limit="" mode="body" n="" order="id" s="" w=""/>
 <recurse from="_" into="_" type="down"/>
 <print e="" from="_" geometry="skeleton" limit="" mode="skeleton" n="" order="quadtile" s="" w=""/>
 </osm-script>
 {{style:
  node, way relation {text: lcn_ref;}
  node[description=Zwischenwegweiser] {color:black; fill-color:black;}
  node[description=Armwegweiser] {color:red; fill-color:red;}
  node[description=Tabellenwegweiser] {color:blue; fill-color:blue;}
 }}

Liste der erfassten Wegweiser und Radrouten

Und zum Schluss die Kombination aus farblich markierten Wegweisern und den Routen (mit deralten Salzstraße, da sie mit Wegweisern aus Lübeck beschildert ist, aber der Operator aus Lüneburg kommt. Hier ist die: Overpass-Api-Abfrage

 <osm-script output="json" timeout="25">
  <union into="_">
    <query into="_" type="node">
      <has-kv k="lcn_ref" modv="" regv="^HL-"/>
    </query>
    <query into="_" type="relation">
      <has-kv k="route" modv="" v="bicycle"/>
      <has-kv k="operator" modv="" regv="^Hansestadt"/>
    </query>
    <query into="_" type="relation">
      <has-kv k="route" modv="" v="bicycle"/>
      <has-kv k="operator" modv="" regv="^Lüneburg Marketing"/>
    <query into="_" type="relation">
      <has-kv k="route" modv="" v="bicycle"/>
      <has-kv k="name" regv="^Alte S"/>
    </query>
  </union>
  <print e="" from="_" geometry="skeleton" limit="" mode="body" n="" order="id" s="" w=""/>
  <recurse from="_" into="_" type="down"/>
  <print e="" from="_" geometry="skeleton" limit="" mode="skeleton" n="" order="quadtile" s="" w=""/>
 </osm-script>
 {{style:
  node, way relation {text: lcn_ref;}
  node[description=Zwischenwegweiser] {color:black; fill-color:black;}
  node[description=Armwegweiser] {color:red; fill-color:red;}
  node[description=Tabellenwegweiser] {color:blue; fill-color:blue;}
 }}

awk-Skript zur Ausgabe der erfassten Ziele auf den Wegweisern

Zunächst ist mittels der Abfrage über die Overpass-Turbo [[1]] (siehe oben) eine Datei in der Notation .osm zu erstellen (z.B. Wegweiser.osm). Das geht über den Export-Tab auf der Seite der Overpass-API. Diese Datei wird dann von einem AWK-Skript analysiert die enthaltenen Ziele als Liste ausgegeben. Der Aufruf in einer Linux-Shell (mit installiertem gwak) sieht dann so aus:

./Auswertung.awk Wegweiser.osm|sort

Und dies ist das Skript:

#!/usr/bin/gawk -f
/direction/	{
                        #print NR,length($0),$0;
			if (match($0,/<tag k='direction_[a-z]+' v='/) > 0){
				zielstr=substr($0,RSTART+RLENGTH, length($0)-RSTART-RLENGTH-3);		
				#print RSTART, RLENGTH, zielstr;
				split(zielstr,zziele,";");
				for (j in zziele) {
					sub(/^ /,"",zziele[j]); #ltrim
					#print j, zziele[j];					
					sub(/[0-9]+,*[[0-9]*( km)*/,"",zziele[j]); #rtrim, auch für Zahlen derEntfernungsangabe
					#print j, zziele[j],"<";					
					sub(/ $/,"",zziele[j]); #rtrim
					#print j, zziele[j]"<";					
					if (zziele[j]=="") {print "zuviel getrimmt:j=",j,"zz(j)",zziele[j],"zielstr:" zielstr,$0};
					ziele[zziele[j]]=++ziele[zziele[j]];
					#print zziele[j];
				}
			}
		}
END	{print "00_Ausgabe de Ziele";
		for (ind in ziele){
			print ind, ziele[ind];	
	        }
        }