User:Geo-francis

From OpenStreetMap Wiki
Jump to: navigation, search

Hallo an alle Interessierten.

Ich wohne in Schwarzhofen, Landkreis Schwandorf, Bayern und bearbeite den Raum Neunburg vorm Wald.

Mein Ausrüstung: eTrex Legend HCx, Weiterverarbeitung mit OpenSuSe 11.1 und JOSM.

f.stockerl(at)t-online(dot)de

Grüße an Alle.


Public domain
All my contributions to OpenStreetMap are released into the public domain. This applies worldwide.
In case this is not legally possible, I grant anyone the right to use my contributions for any purpose, without any conditions, unless such conditions are required by law.





Anleitung zum Erstellen eines Straßenverzeichnisses

Da ich selber nicht der PC-Überflieger bin, versuche ich hier, vielleicht auch etwas langatmig und umständlich,

eine Anleitung zum Erstellen eines Straßenverzeichnisses zu verfassen.

Ich selber habe das unter OpenSuSE getestet, wie es mit Windows ausschaut, kann ich nicht sagen.

Sven Anders hat mir mit Rat und Tat beiseite gestanden, dafür vielen Dank.

Wer für seinen Bereich ein Straßenverzeichnis erstellen bzw. überprüfen möchte, ob alle Straßen seines Ortes erfasst sind, kann das auch selber machen.

Auch wenn (noch) kein Straßenverzeichnis vorhanden ist, kann man damit überprüfen, welche Straßen schon erfasst sind und ob deren Schreibweise korrekt ist.

Dadurch sollen aber die Bemühungen, ein offizielles Straßenverzeichnis von seiner Gemeinde / Stadt zu bekommen, keinesfalls untergraben werden!


Benötigt werden:

  • ein Straßenverzeichnis im CSV-Format, UTF8-codiert
  • Perl-Scripte (Ev. müssen noch Pakete installiert werden, z.B. "Text/LevenshteinXS.pm". Wenn das Script nicht läuft, bitte die Fehlermeldungen kontrollieren und fehlende Pakete / Abhängigkeiten korrigieren.)
  • die ...osm.bz2-Datei seines Bundeslandes
  • eine Relation mit der Gemeindegrenze oder ein Polygon; zur Not geht auch die BoundingBox seines Bereiches
  • etwas Geduld ;-)

Wenn in einem Gebiet (verschiedene Orts- bzw. Stadtteile) mehrere gleichnamige Straßen vorkommen,

so kann nicht überprüft werden, ob diese Straße in jedem Teil vorhanden ist.

Das müsste dann manuell überprüft oder jeder Orts- / Stadtteil müsste

separat abgefragt werden.


Straßenverzeichnis:

Das Straßenverzeichnis im fertigen CSV-Format muss folgenden Aufbau haben:

erste Zeile: darf keine der Straßennamen enthalten und wird nicht ausgewertet, kann z.B. den Namen des Ortes enthalten oder bleibt leer

ab der zweiten Zeile folgende Inhalte: <Straßenname>,<ggf. Ortsteil, Stadtteil oder leer>

Soll also so ausschauen:

Straßenverzeichnis Erding
“Brauhausstraße“,“Erding“
“Wirtshausstraße“,“Erding“

oder

Straßenverzeichnis Erding mit Ortsteilen
“Weizenstraße“,“Erding“
“Hopfenstraße“,“Gillamoos“
“Schwarzbierstraße“,“Erding“
usw.

Es ist eigentlich egal, in welcher Spalte die Straßen- und / oder Ortsteilnamen sind,

da man das im Script einstellen kann.

Wenn man also ein fertiges Verzeichnis hat, das einen anderen Spaltenaufbau hat, kann man das im Script umstellen.

Beim Konvertieren einer Excel-Tabelle o.ä. in das CSV-Format unbedingt darauf achten,

dass UTF-8 konvertiert wird.

Obwohl die Spaltentrenner grundsätzlich zwischen <tab>, <Komma> und <Semikolon> eingestellt werden können, sollte man zu <tab> tendieren, da dieses Zeichen üblicherweise sonst nicht vorkommt.

Die Spaltentrenner werden in der "SV-Stat.pl" eingestellt; in welcher Spalte die Straßen- bzw. Ortsteilnamen sind,

wird in der "Stadtname.pm" eingestellt. Das wird aber weiter unten erklärt.

Wenn kein Straßenverzeichnis vorhanden ist, eine leere "Stadtname.csv" erstellen.


osm.bz2-Datei des Bundeslandes:

Die gibt es von der GeoFabrik unter dieser Adresse:

http://download.geofabrik.de/osm/europe/germany/

Die Datei wird täglich neu ausgeschnitten und muss dann, sofern Änderungen erfolgt sind, am nächsten Tag wieder neu geladen werden.

Die "...osm.bz2-Datei" braucht nicht entpackt zu werden.


Polygon, Way, Relation oder BoundingBox der Stadt oder Gemeinde:

Ein Polygon, ein Way oder eine Relation, das die genaue Gemeindegrenze beschreibt, ist natürlich besser, als „nur“ die BoundingBox,

da bei der Relation oder beim Polygon nur die Straßen in dem „eingekreisten“ Gebiet geprüft werden,

während bei der BoundingBox eben auch Straßen außerhalb mit einbezogen werden.

Es kann dann sein, dass im überprüften Ort die „Hautpstraße“ noch nicht erfasst ist, jedoch die „Hauptstraße“ eines anderen Ortes angezeigt wird.

Ways, Polygone und Relationen müssen noch bearbeitet werden, weil das Script zum Erstellen einer "poly-Datei"

einen bestimmten Dateiaufbau bzw -inhalt voraussetzt.

Polygon:

Am einfachsten wird ein Polygon mit JOSM erstellt. Dazu den Ort herunterladen und ggf. lokal abspeichern oder die Ebene umbenennen.

Das hat den Vorteil, dass man nicht durcheinanderkommt, weil man noch eine zusätzliche leere Ebene laden muss.

Also über „Datei – Neu“ eine neue Ebene laden.

Auf dieser Ebene erstellt man nun rund um den Ort ein Polygon, das keinerlei Tags oder Bezeichnungen erhält und enthält.

Dann dieses Polygon abspeichern. Dazu die „Ebene“ in JOSM rechts oben anklicken und mit Rechtsklick das Kontext-Menü aufrufen.

Dann „Speichern unter...“ "Stadtname.osm" .

Diese Datei in einem Editor öffnen und überprüfen, ob sie keinerlei Tags enthält.

Wenn ja, was eigentlich nicht sein kann, müssten die Tags gelöscht werden.

Die Datei sollte so aussehen:

<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.5' generator='JOSM'>
  <node id='-1' action='modify' visible='true' lat='49.417...' lon='12.338...' />
  <node id='-2' action='modify' visible='true' lat='49.407...' lon='12.380...' />
  <node id='-3' action='modify' visible='true' lat='49.401...' lon='12.374...' />
…
 <node id='-538' action='modify' visible='true' lat='49.359...' lon='12.291...' />
  <way id='-539' action='modify' visible='true'>
    <nd ref='-492' />
    <nd ref='-521' />
    <nd ref='-290' />
…
    <nd ref='-492' />
Jetzt werden am Ende noch folgende Zeilen eingefügt:
  <tag k='polygon_id' v='1' />
      <tag k='polygon_file' v='name-der-stadt' />
      <tag k='note' v='Created by poly2osm from a polygon file. Not for uploading!' />
und am Schluss stehen folgende Zeilen:
  </way>
</osm>

fertige Wege (Stadt-/Gemeindegrenzen):

Wenn man schon einen fertigen Weg (keine Relation!) hat, holt man sich den Weg vom Server:

wget http://api.openstreetmap.org/api/0.6/way/<id-des-Weges>/full -O stadtname.osm

"Stadtname.osm" dann wie oben beschrieben von allen Tags säubern und die Tags wie oben einfügen.

Relationen:

Die Relation holt man sich ebenfalls vom Server:

wget http://api.openstreetmap.org/api/0.6/relation/<id-der-Relation>/full -O stadtname.osm

Die Relation wird nun in JOSM geöffnet und die einzelnen Wege der Relation

müssen zu einem Weg zusammengelegt werden.

Diese Relation dann lokal abspeichern, keinesfalls hochladen.

Durch das Zusammenlegen der Wege werden einige Way's zum Löschen gekennzeichnet.

Beim Hochladen auf den Server würde das Löschen automatisch erledigt,

hier müssen wir das mit "der Hand" machen.

Also die Datei mit einem Editor öffnen und alle Way's die mit

<way ... action="delete">

gekennzeichnet sind, löschen.

Es dürfen nur Way's, die mit

<way ... action="modify">

gekennzeichnet sind, übrigbleiben.

Jetzt noch alle Tags entfernen und wie unter "Polygon" die Tags einfügen.

BoundingBox:

Die Daten einer BoundingBox werden in der Datei "Stadtname.pm" direkt eingegeben.


benötigte Scripte:

Scripte zum Erstellen einer "poly-Datei":

Scripte zur Umwandlung von osm-Dateien in eine poly-Datei gibt’s hier:

http://svn.openstreetmap.org/applications/utils/osm-extract/polygons/

Benötigt werden "osm2poly.pl" und "poly2osm.pl".

Beide Scripte herunterladen und dann durch folgenden Befehl die "osm-Datei" in eine "poly-Datei" umwandeln:

./osm2poly.pl stadtname.osm > germany/bundesland/stadtname.poly

Die entstandene poly-Datei sollte so aussehen:


stadtname
1
  1.233275E+01   4.942626E+01
  1.233211E+01   4.942588E+01
…
  1.233211E+01   4.942674E+01
  1.233275E+01   4.942626E+01
END
END

Zur Kontrolle kann man mit dem Befehl

./poly2osm.pl germany/bundesland/stadtname.poly > stadtname.osm

die Poly-Datei wieder in eine osm-Datei umwandeln und diese in JOSM öffnen.

Wenn alles klappt, dürfte kein Fehler vorhanden sein und die "poly-Datei" kann für das Straßenverzeichnis verwendet werden.


Scripte zum Erstellen des Straßenverzeichnisses:

Die Scripte bzw. Dateien für den eigentlichen Lauf des Straßenverzeichnisses gibt’s hier:

http://svn.openstreetmap.org/applications/utils/sv-stat/

Benötigt werden eigentlich nur "SV-Stat.pl" und die "....pm", die "....coordinaten" kann man sich selbst erstellen.

Das Script „SV-Stat.pl“ ist der eigentliche Programmaufruf, „....coordinaten“ und „....pm“ dienen zur Konfiguration.

Achtung! Die SV-Stat im SVN ist nicht mehr zu den neueren Versionen (>0.30) von Osmosis kompatibel. Ebbe73, aus dem Forum war so freundlich die Datei entsprechend an die neue "Osmosis-Generation" anzupassen. Hier gibt's die gepachte Version: http://telegnom.net/osm/sv/SV-Stat_patch.txt Der doofe Server erlaubt leider keine .pl Dateien -.-

SV-Stat.pl

Dieses Script muss ggf. an die eigenen Pfade angepasst werden.

Außerdem muss man hier in Zeile 19 den Spaltentrenner einstellen!

Voreingestellt ist "Komma" (",").

Für TAB wird ("\t") und für Semikolon (";") eingestellt.

#!/usr/bin/perl -w
use utf8;
use Time::Local;
use Text::LevenshteinXS qw(distance);
use XML::Parser;
...
$java_bin="/usr/bin/java";
$osmosisjar="/etc/osmosis/osmosis.jar";
...
$csvSeperator=",";
...

Stadtname.pm

Diese Datei muss auf die jeweiligen Gegebenheiten angepasst werden

und wird in "Stadtname.pm" umbenannt.

Eine Verständnisfrage sind die Angabe der Spalten-Nummer:

Informatiker fangen bei "0" zu zählen an, während der Anwender idR bei "1" beginnt.

In der CSV-Datei ist die erste Spalte daher "0", die zweite Spalte "1" usw.

So muss das auch hier angegeben werden. Im obigen Beispiel steht also der

Straßenname in Spalte 0

der

Ortsteil in Spalte 1 .

#Der Name, der über dem Straßenverzeichnis steht.
$ort="Schwandorf";
#Der Ordner bzw. das Verzeichnis, unter dem die Daten abgelegt werden.
$ortURL="Schwandorf";
#Das Bundesland.
$bundesland="Bayern";
#Hier wird angegeben, ob das Verzeichnis allgemein zugänglich
#oder mit Passwortschutz erstellt wird.
#0 = frei zugänglich ; 1 = Passwortschutz; für den "Hausgebrauch" auf 0 stellen.
$pw_schutz=0;
#Erstellungsdatum manuell eingeben.
$standdate="12/2008";
#Die Spaltennummer, in der die Straßennamen stehen.
#Bitte beachten: die Spalten werden ab "0" gezählt.
#D.h., so wie es hier eingestellt ist, muss zunächst
#eine leere Spalte kommen, dann wird der Straßenname
#erwartet und in der 3. Spalte der Stadt- oder Ortsteilname.
#Sofern Straßen- und / oder Ortsteilnamen in anderen
#Spalten stehen, kann man das hier einstellen.
$csvSpalteStr=0;
$csvSpalteOrt=1;
#Der Name der jeweiligen "bundesland.osm.bz2-Datei".
$osmosis_source="bayern.osm.bz2";
#Wenn ein Polygon vorhanden ist, dann den Namen des Polygons angeben.
$osmosis_polygon="Schwandorf.poly";
#Wenn kein Polygon vorhanden ist, dann die Koordinaten einer BBox angeben.
#Koordinaten UNTEN
#$osmosis_minLat="49.2984";
#Kordinaten OBEN
#$osmosis_maxLat="49.3627";
#Koordinaten LINKS
#$osmosis_minLon="12.0742";
#Koordinaten RECHTS
#$osmosis_maxLon="12.1634";
#
$nutzungsErlaubnis="Die Daten sind uns von der Stadt Schwandorf zur Verwendung in OSM freigegeben worden.";
#
1;
!! Nicht vergessen, die „#“ auszukommentieren !!

Stadtname.coordinaten

Hier können die Koordinaten einzelnen Stadt-/Ortsteile eingegeben werden.

Dann wird bei Wegen, die nicht in "Stadtname.csv" vorhanden sind

und aufgefunden werden, in der Datei "Nur in OSM" die Meldung ausgegeben:

"Straßenname, vermutlich in <Stadtteil ...>"

Einträge in dieser Datei schauen folgendermaßen aus:

PLZ<tab>Ortsteil<tab>lat<tab>lon

12345 A-Dorf 12.123 49.123

12346 B-Dorf 12.124 49.124

Für den Hausgebrauch reicht es aber vollkommen aus,

eine leere Textdatei mit dem Namen "<Stadtname>.coordinaten" zu erstellen.

Erstellen des Straßenverzeichnisses:

Jetzt sollten in einem Verzeichnis folgende Dateien vorhanden sein:

  • "bundesland".osm.bz2
  • "Stadtname".csv (kann auch leer sein)
  • "Stadtname".poly
  • "Stadtname".pm
  • "Stadtname".coordinaten (kann auch leer sein)

und

  • SV-Stat.pl

Jetzt kann man das Script starten:

./SV-Stat.pl Stadtname.pm

und im Idealfall wird nun ein Ordner "Stadtname" erstellt, der html-Dateien mit einer Auflistung

über die gefundenen Straßen enthält.

Auf der Seite "Nur in OSM" werden die Straßen aufgelistet, die zwar in dem überprüften Bereich

gefunden wurden, aber (noch) nicht im Straßenverzeichnis erfasst sind.

Eventuell sind diese Straßen auch im Straßenverzeichnis richtig oder falsch geschrieben

und in OSM falsch oder richtig eingetragen.

Wenn noch kein "offizielles" Straßenverzeichnis vorhanden ist, könnte man auf diesem Weg vielleicht

zumindest ein "inoffizielles" Straßenverzeichnis erstellen.

Aber trotzdem versuchen, ein offizielles Verzeichnis von der Gemeinde zu bekommen.