Vorschlag für autom. Edit: Schreibweise Straßennamen

Hallo Markus,
evtl. hättest du ja Lust, deinen Schneide-Algorithmus etwas zu verbessern. Wenn ein Weg nur einen Knoten auf der Grenze des bounding-polygons hat und keinen Node in dem bounding-polygon, dann kann der Weg weg, weil er ja nicht in dem Polygon liegt.

Zu --ignore-dependencies:

Darüber hab ich auch schon nachgedacht. Das Problem ist dann, dass man gleich zu beginn alle Daten in Deutschland gegen ein bounding-polygon mit rund 80000 Punkten testen muss. Werde ich aber auch mal probieren.

Hallo Henning

Man kann doch --drop-relations schon bei osmconvert angeben. Irgendwie musst du die Daten ja erst einmal in das o5m Format bringen und kannst dann im selben Lauf die Relationen rauswerfen. Ich kann jetzt nicht einschätzen, ob du andere Auswertungen fährst, die Relationen brauchen. Dann passt das natürlich nicht an der Stelle.

Edbert (EvanE)

Ja, das würde gehen. Unterstützt das auch osmconvert?

Derzeit kämpfe ich auch noch etwas mit dem Finden der ganzen falschen Namen. Wenn sie auf Str., str., strasse, Strasse, Str und str enden ist das kein Problem. Wenn die Schlüsselworte allerdings nicht am Ende stehen gibt es Probleme.

–keep=“name=str” trifft bspw. auch auf straße zu. Nimmt man --keep=“name=*str *” interpretiert er den zweiten * als ein ‘nimm alles’. Hat jemand eine Ahnung, wie man nach einem Value mit Leerzeichen drin filtern kann?

Man muss Leerzeichen mit \ escapen, dann klappt das auch.

Was mir an der Lösung mit osmfilter ein wenig mißfällt ist, daß man mehrfach die kompletten Daten schreiben muß: Erst ein .osm.pbf herunterladen, dieses dann in ein o5m konvertieren, dann einen Zwischenstand nach der Filterung nur nach name speichern und erst dann das Endergebnis (modulo Konversion ins gewünschte Format). Ursache ist, daß osmfilter die Daten zweimal durchgeht, um die Knoten nachzuladen; d.h. es funktioniert nicht mit Pipelines.
Das Problem läßt sich mit ignore-dependencies und Verwendung von FIFOs umgehen, aber dann muß man vor dem Filtern doch wieder die Knoten nachladen. Dafür muß man nur einmal die heruntergeladene Datei speichern und anschließend das Ergebnis nach Filtern und sauberem Ausschneiden. Gibt es eine Möglichkeit, mit osmfilter effizient eine größere Anzahl von Knoten anhand ihrer ID auszufiltern? Ein --keep=“@id=1 or @id=2 or @id=3 or …” erscheint mir doch arg zäh, weil für jeden Knoten (über 100 Millionen im DE-Extrakt) sämtliche Bedingungen (einige tausend) durchprobiert werden müßten :wink:

Zum Problem der -s-trassen: Ich habe gerade die Kandidatenliste nach möglichen Fehlmatches durchgeschaut. Gefunden habe ich nur die beiden bereits bekannten “Gleistrasse” und “Gastrasse” sowie “An der Gastrasse”. Wer selbst noch einmal durchschauen will, hier ist die Liste aller derzeitigen Straßennamen auf -strasse in DE (plus eine Handvoll in CH, siehe Problem mit dem Abschneiden grenzüberschreitender Wege [1]):


     14 Bergstrasse
     12 Ladestrasse
      6 Hauptstrasse
      6 Gartenstrasse
      4 Itterstrasse
      3 Talstrasse
      3 Rothbachstrasse
      3 Querstrasse
      3 Poststrasse
      3 Osterbergstrasse
      3 Leopardstrasse
      3 Klotzstrasse
      3 Gastrasse
      3 Friedhofstrasse
      3 Dorfstrasse
      3 Bahnhofstrasse
      3 Angerstrasse
      2 Zollhausstrasse
      2 Wirtschaftsstrasse
      2 Wiesenstrasse
      2 Siegelhofstrasse
      2 Reuthenstrasse
      2 Neustrasse
      2 Neue Kulturstrasse
      2 Meyerhofstrasse
      2 Mauerstrasse
      2 Konstanzerstrasse
      2 Kirchstrasse
      2 Hegelstrasse
      2 Haldenstrasse
      2 Geißbergstrasse
      2 Forststrasse
      2 Fischerstrasse
      2 Buskower Dorfstrasse
      2 Brückenstrasse
      1 Zehentstrasse
      1 Weststrasse
      1 Weilstrasse
      1 Wallgrabenstrasse
      1 Waldstrasse
      1 Wahlstrasse
      1 Vitalisstrasse
      1 Untere Ringstrasse
      1 Untere Kampstrasse
      1 Untere Dorfstrasse
      1 Ulmerstrasse
      1 Turmstrasse
      1 Thayngerstrasse
      1 Süesslerstrasse
      1 Steinschachtenstrasse
      1 Sportplatzstrasse
      1 Siedlungsstrasse
      1 Selmsdorfer Landstrasse
      1 Schultheißstrasse
      1 Schulstrasse
      1 Schopenhauerstrasse
      1 Schmiedestrasse
      1 Schloßstrasse
      1 Schlossstrasse
      1 Russbergerstrasse
      1 Rheinhaldenstrasse
      1 Predigerstrasse
      1 Oehningerstrasse
      1 Odenwaldstrasse
      1 Obere Ringstrasse
      1 Obere Kampstrasse
      1 Obere Dorfstrasse
      1 Nüffernstrasse
      1 Nietzschestrasse
      1 Mühltalstrasse
      1 Mühlstrasse
      1 Moorstrasse
      1 Maschstrasse
      1 Marktstrasse
      1 Lörracherstrasse
      1 Lindenstrasse
      1 Kolpingstrasse
      1 Kirchenstrasse
      1 Kaufungstrasse
      1 Kaldenbergerstrasse
      1 Kaiserstrasse
      1 Judenstrasse
      1 Jahnstrasse
      1 Industriestrasse
      1 Hofstrasse
      1 Hintere Dorfstrasse
      1 Hiltalingerstrasse
      1 Hilchenbacherstrasse
      1 Herrmannstrasse
      1 Herderstrasse
      1 Heinrichtsbrunnerstrasse
      1 Haydnstrasse
      1 Hauffstrasse
      1 Hansjakobstrasse
      1 Gryphiusstrasse
      1 Grenzstrasse
      1 Grenzacherstrasse
      1 Goldbergstrasse
      1 Gewerbestrasse
      1 Gertenstrasse
      1 Friedenstrasse
      1 Freiburgerstrasse
      1 Finsterauerstrasse
      1 Esperantostrasse
      1 Erlenstrasse
      1 Eichertstrasse
      1 Ebringerstrasse
      1 Ebersbergstrasse
      1 Dörpstrasse
      1 Domagkstrasse
      1 Diademstrasse
      1 Dahlienstrasse
      1 Cranachstrasse
      1 Büsingerstrasse
      1 Burgstrasse
      1 Bunsenstrasse
      1 Brunnenstrasse
      1 Blumenstrasse
      1 Betriebstrasse
      1 Bachstrasse
      1 Anliegerstrasse
      1 An der Gastrasse
      1 Alte Poststrasse
      1 Alte Muchenländerstrasse
      1 Alte Gleistrasse
      1 Akazienstrasse

[1] Dieses sollte sich mit osmosis --bp clipIncompleteEntities=true lösen lassen.
[1] Dieses ist mittlerweile gelöst, lediglich in der obigen Liste sind die betroffenen Wege bzw. ihre Namen noch enthalten…

Du kannst das ganze auch mit osm-xml machen. Dauert dann halt nur länger. Zu dem mehrfachen Filtern: Ich hab es bisher noch nicht geschafft, osmfilter zu sagen er soll highway=… AND name=… filtern. Ich vermute mal, dass es klappt, wenn man es ihm explizit sagt. Dann könnte man sich einiges sparen. Der letzte Aufruf von osmconvert läuft nur, weil nochmal gegen das exakte Polygon geprüft wird.

Wenn du also ein germany.osm auf der Platte hast und wir das mit der Filtersyntax hinbekommen, dann brauchst du lediglich einen Aufruf von osmfilter zum Filtern der Daten und einen Aufruf von osmconvert zum Prüfen gegen das exakte Polygon. Das was dabei geschrieben wird ist aber aktuell bei mir im hohen kb-Bereich, wenn man es als xml ausgibt. Von daher eher nicht so tragisch.

Daran bin ich auch gescheitert. Ist aber kein Beinbruch, der zweite Waschgang bearbeitet ja schon eine gegenüber der ersten Stufe drastisch reduzierte Datenmenge. Und wie gesagt, die Gesamtlaufzeit des Programms ist für mich auch sonst eher nachrangig. Das Endergebnis brauche ich ohnehin in XML.

Ich habe ein .osm.bz2 herumliegen und möchte es nicht entpacken. Mit dem .osm.bz2 kann aber osmfilter nicht umgehen - also muß ich ihm einen FIFO hinstellen, der von bzcat gefüllt wird. Dann kann osmfilter diese “Datei” aber nur einmal lesen, was nur mit --ignore-dependencies funktioniert, und dann fehlen natürlich die Knoten für das Polygon-Schneiden. Um diese aus dem .osm.bz2 (statt wie zuvor bei den ersten Tests von der API) nachzuladen, habe ich mir ein Skript gebastelt, das den Wegen die Knoten hintendranhängt. Sortieren mit osmosis, anschließend Ausschneiden. Für letzteres habe ich jetzt auch wieder osmosis genommen, weil ich hoffe, daß die Option clipIncompleteEntities=true das konservative Abschneiden an der Grenze (mindestens ein Punkt außerhalb → Weg verwerfen) sicherstellt. Edit: falsch gelesen, löst das Problem nicht. Also müssen unvollständige Objekte doch noch einmal im Nachgang aussortiert werden. Erst an dieser Stelle kommt wieder die Festplatte zum Einsatz, mit der fertigen Kandidatendatei (<700 kB).

Das Skript zum Nachladen der Knoten ist im Moment die Spaßbremse. Ist auf die Schnelle in AWK geschrieben, was natürlich eher nicht so flott ist (derzeit Faktor drei langsamer als bzcat). Edit: dank Regex-Vereinfachung mittlerweile “nur noch” ein Faktor zwei. Daher die Frage oben, ob osmfilter (o.a.) effizient nach einer Liste von IDs filtern kann. Ansonsten muß ich mir da irgendwann selbst was schnelleres schreiben.

Der ganze Vorgang ist damit ein Dreizeiler :smiley: (Aktualisieren des Extrakts, Einrichten der FIFOs und abschließendes Aufräumen mal außen vor)


bzcat /tmp/germany.osm.bz2 > "$fifofile-1" &
../osmfilter32 $fifofile-1 --ignore-dependencies --keep="name=*strasse =*str =*str. =*Strasse =*Str =*Str. =*Strasse\ * =*Str.\ * =*\Str\ * =*strasse\ * =*str.\ * =*str\ *" > $fifofile-2 &
../osmfilter32 $fifofile-2 --ignore-dependencies --keep="highway=path =cycleway =footway =bridleway =steps =road =track =service =pedestrian =living_street =residential =unclassified =tertiary =tertiary_link =secondary =secondary_link =primary =primary_link =trunk =trunk_link =motorway =motorway_link" | awk -v BZ2FILE=/tmp/germany.osm.bz2 -f reread-missing-nodes.awk | ~/osm/osmosis-0.41/bin/osmosis --rx file=- --sort --wx file=- | ~/osm/osmosis-0.41/bin/osmosis --rx file=- --bp file=~/osm/wall-e/Deutschland.poly clipIncompleteEntities=true --wx file=~/osm/wall-e/candidates.osm

Könnte man natürlich auch noch einen Einzeiler draus machen.

Genauer anschauen würde ich noch “Friedenstrasse”. Da ist beides durchaus denkbar Frieden-Straße oder Friedens-Trasse.

Ein wenig OffTopic, aber Süesslerstrasse kommt mir auch reichlich komisch vor. üe… statt ü oder ue und dann noch kurz gesprochenes ss dahinter…

Ist in der Schweiz wohl nicht unüblich: http://www.bdn.ch/accessions/38613/view/ und http://www.idiotikon.ch/Register/faksimile.php?band=7&spalte=1411

Sollte sich aber ein Orts- oder Landeskundiger dazu äussern.

Gruss
walter

Grundsätzlich möglich, konkret aber sehr unwahrscheinlich. Es handelt sich um den Weg 87630958, welcher umgeben ist von “Birkenstasse” (sic!), “Obere Ringstrasse” und “Untere Ringstrasse” sowie “Lindenstrasse”. Alle Namen stammen von demselben Mapper und sogar aus demselben Änderungssatz.

Komisch kommt mir bei den Straßennamen insgesamt so einiges vor. “Th.-Mü.-Str.”, “Strasse ohne Namen”, " Obere Dorfstr." (mit zehn Leerzeichen) seien als Beispiele genannt.

Auch OT: Eine Friedenstraße (fälschlicherweise oft als Friedensstraße bzeichnet) gibt es bei uns auch. Tarnung à la Bundeswehr: dort liegt ein NATO-Tanklager.

Nachtrag hierzu: das Schneideverhalten von osmosis ist in diesem Punkt für meine Zwecke vorteilhaft: Wege, die nur teilweise innerhalb des Polygons liegen, sind nach dem Schneiden unvollständig, weil die Knoten außerhalb des Polygons fehlen. Solche Wege verwerfe ich anschließend mit einem zusätzlichen Skript, 18 von derzeit 443 fliegen auf diese Weise heraus. Übrig bleiben nur solche, deren Knoten sämtlich innerhalb des Polygons liegen.

Leider scheint mein User Agent neuerdings blockiert zu werden. Auf die Spielzeug-API kann ich zugreifen, auf die echte nicht mehr. :frowning: Mit JOSM geht es tadellos.

@BFX: Ist Deinen Bedenken mit der Durchsicht der “-strassen”-Liste und dem Aussparen von (vorerst nur) /[Gg]astrasse/ und /[Gg]leistrasse/ abgeholfen, oder siehst Du weiterhin Probleme?

Die Liste ist ja doch recht überschaubar und wenn was falsch umbenannt wird, wird sich über kurz oder lang schon jemand melden oder es zurückändern und du hast den way beim nächsten mal wieder drin. Das könnte man eventuell noch abfragen.

Also meinetwegen leg los.

Ja, das hatte ich mir auch schon überlegt: einmal angefaßte Objekte auf eine Veto-Liste zu setzen und gegen eine erneute Korrektur des gleichen (vermeintlichen) Fehlers zu verhindern. Ist aber noch nicht implementiert.

Danke, aber wenn das so einfach wäre… Eigentlich wollte ich heute einen ersten Demolauf starten, aber die API redet nicht mehr mit Emacs.

Ich könnte mir Vorstellen, dass wegen der vielen Nodes dicht gemacht hat.

Ich nicht. Ich habe gestern vier Änderungssätze erstellt und dabei fünf Objekte bearbeitet. Heruntergeladen habe ich zuvor genau diese Objekte; in einer ähnlichen Größenordnung bewegen sich die anderen Zugriffe in den letzten paar Wochen, seit ich Emacs erstmals auf die echte API losgelassen habe.
Die Knoten-Abfrage ist überflüssig geworden und davor nur vor etwa einer Woche eine Handvoll Male mit je <150 Stück gelaufen (aufgeteilt auf je drei nodes?nodes=…-Abfragen).

Bei den Zugriffen gestern gab es noch einen Fehler mit der UTF-8-Kodierung (die ich in einer Abfrage schlicht vergessen hatte), welchen der Server übel genommen haben könnte. Merkwürdig ist auch, daß ich selbst mit einem - nur versuchsweise! - gefälschten User Agent nicht mehr an die API drankomme. Mit der dev-API funktioniert es weiterhin problemlos. Naja, nachher mal auf dem anderen Rechner mit der aktuellen Version des OSM-Pakets versuchen.

So, auf dem anderen Rechner klappt es wieder. Warum es vorhin nicht ging, ist mir ein Rätsel.

Es gibt zwei erste Demo-Änderungssätze, mit der Bitte um Kontrolle und ggf. Kritik/Anmerkungen.
http://www.openstreetmap.org/browse/changeset/14180769
http://www.openstreetmap.org/browse/changeset/14180833

Ich habe die Kandidatenliste räumlich beschnitten (grob mit JOSM, “Bereinigen”), um nicht gleich ganz Deutschland mit fast leeren Änderungssätzen zu überziehen; daher die regionale Verteilung. (Außerdem gibt es eine ganze Reihe leerer Änderungssätze, die wurden versehentlich bei eigentlich trockenen Läufen erzeugt. Da saß das Problem allerdings vor dem Rechner.)

Der Korrekturvorgang ist nun vollständig automatisiert und könnte in einem Aufwasch alle derzeit vorhandenen “Strassen” etc. umbenennen; dies wird derzeit durch eine Beschränkung auf fünf bearbeitete Objekte unterbunden. Sofern es keinen neuen Widerspruch gibt, würde ich nächste Woche den Probebetrieb starten mit täglich etwa einem Änderungssatz à 10 Objekte.

Die Erkennung der bisher bekannten Spezialfälle “Gastrasse” und “Gleistrasse” ist eingebaut.

Als Testgebiet wäre der Süden BaWüs noch interessant.

Du meinst wegen der Grenze zur Schweiz? Die ist fürs Filtern der Kandidaten interessant, aber für die Ausführung der Korrekturen nicht interessanter als andere Regionen. Oder gibt es in BaWü noch andere beachtenswerte Besonderheiten, die mir nicht bewußt sind? Wenn der Filterprozeß korrekt funktioniert (wovon ich nach aktuellem Stand ausgehe), ist hauptsächlich noch der eigentliche Korrekturvorgang zu prüfen.

Hier sind die Kandidaten, die es durch den Tagfilter und das Filterpolygon schaffen: http://osmac.bplaced.net/candidates.osm (Datenstand von vorgestern oder so, aber das ist ja Nebensache.) Einige Wege, deren Knoten teilweise außerhalb des Polygons liegen, treten hier als unvollständige Wege auf.
In dieser Datei: http://osmac.bplaced.net/candidates_strict.osm sind solche unvollständigen Wege entfernt, d.h. es sollten nur noch Wege übrig sein, die vollständig (d.h. mit ihren sämtlichen Knoten) innerhalb DE liegen. Diese Datei dient als Input für das Korrekturprogramm (als Kandidatenquelle, d.h. vor tatsächlichen Bearbeitungen wird jeweils der aktuelle Stand geladen).

Folgende “Strassen” werden zwischen beiden Versionen entfernt:
< Rheinhaldenstrasse
< Schulstrasse
< Grenzacherstrasse
< Grenzstrasse
< Freiburgerstrasse
< Thayngerstrasse
< Judenstrasse
< Weilstrasse
< Büsingerstrasse
< Konstanzerstrasse
< Lörracherstrasse
< Hauptstrasse
< Süesslerstrasse
< Konstanzerstrasse
< Oehningerstrasse
< Ebringerstrasse
< Kreuzlinger Strasse
< Hiltalingerstrasse

Soweit ich sehe, tragen diese Straßen alle ein is_in=“… Schweiz …”, wohl um sie vor xybot zu schützen. Solche Schutzmaßnahmen sollten zukünftig hoffentlich nicht mehr nötig sein.

Dann ist gut, ich dachte du wolltest den gesamtprozess nochmal testen.

Wie schaut es mit den Fällen aus, bei denen “Straße” Präfix und nicht Suffix im Straßennamen ist - sind die auch berücksichtigt ?

In Halle (Saale) gibt es viele “Straße der …”:
Straße der Handwerke,
Straße der Opfer des Faschismus,
Straße der Einheit,
Straße der Waggonbauer,
Straße der Befreiung,