housenumbervalidator

Hallo zusammen,

da es mir in letzter Zeit öfter passiert ist, dass ich beim Abzeichnen von Gebäuden schon mal versehentlich doppelte Hausnummern kreiere, habe ich angefangen, ein Skript (anfangs in bash, jetzt php [mein 1. php-Projekt]) zu schreiben, was doppelte Hausnummern und unvollständige Adressangaben findet. Ganz nebenbei wird auch noch gezählt, wie oft eine PLZ vorkommt (damit lassen sich - zumindest bei kleinen osm-Dateien - schnell Tippfehler finden) und als Nebenprodukt werden auch noch falsche Straßennamen gefunden.

Der Community will ich dieses “Wunderskript” natürlich nicht vorenthalten und hab’ den Code mal hier hochgeladen.

Das Skript habe ich mal auf nordrhein-westfalen.osm vom 8.6. losgelassen mit dem Ergebnis

  • 2528 doppelte Hausnummern
  • 214283 unvollständige Adressen, davon

    71430 ohne Stadt
    84669 ohne PLZ
    33389 ohne Straße
    22247 ohne Hausnummer

  • 90 PLZs, die nur 1 mal vorkommen (diese Information ist nicht sonderlich hilfreich, da das Skript hier (noch) keine IDs mit ausgibt)
  • Laufzeit: 9227 Sekunden (für diejenigen, die genauso gut Kopfrechnen können wie ich: das sind knapp 2,6 Stunden) bei 2,4GHz
    (Parameter -if -in -icc -iih, d.h. Wege/Punkte mit fixme oder note werden ignoriert; fehlendes addr:country wird ignoriert; bei Wegen/Punkten mit addr:city wird nicht angenommen, dass eine vollständige Adresse gegeben sein muss [Grund dafür waren solche Nodes, die in meinem kleinen Textgebiet oft vorkamen])

Das Ergebnis kann hier als Archiv heruntergeladen werden. Da es sich oft bei den “doppelte Hausnummern” einfach um falsche Straßennamen oder falsche Hausnummernfolgen (20, 21, 22, 22, 24) handelt, lassen sich die Fehler auch ganz gut “aus der Ferne” beheben. (In Josm kann man über Datei > Objekt herunterladen Wege/Punkte per ID herunterladen)

Wenn jemand Anregung/Kritik/Lob/odersonstwas loswerden möchte, soll er/sie es bitte tun.

Muss den unbedingt jedesmal die Stadt hinzugefügt werden?
Das ist - abgesehen von ein paar Grenzstraßen - ohnehin meistens eindeutig!

Ich finde es “schöner” wenn die ganzen Adressinformation am Punkt/Weg sind, aber das ist ja bekannterweise wieder Geschmackssache. Man muss die “Fehler” ja nicht beheben :wink:

+1
Es kommt auch vor das die selbe Hausnummer tatsächlich für mehrere Hauptgebäude gilt, dann tagge ich sie auch an jedes davon. Es sind also auch nicht alle doppelten Hausnummern in den Daten Fehler.

Bei meinen Stichproben war es meistens so, dass die doppelten Hausnummern wirklich nach einem Fehler aussahen. Wenn es tatsächlich verschieden Häuser mit der selben Adresse gibt, sollten die auch so eingetragen werden (ein Validator ohne false positives wäre ja auch zu schön…)

Ich habe OSM-Dateien mit je 25 Dubletten erstellt und im Wiki eine Tabelle angelegt. Wer Lust hat, Fehler zu korrigieren, bitte da eintragen.

(Bitte Anleitung beachten!)

Ein Hinweis in der Tabelle, wo die Hausnummern sich befinden, wäre ganz nützlich.
Ortsname (ggfs. Stadtteil) und/oder Postleitzahl sollten für diesen Zweck ausreichen.
Blind auf irgendeine Nummer klicken ist nicht jedermanns Sache.

Edbert (EvanE)

Das Problem ist, dass die OSM-Dateien einfach die Punkte sortiert nach ID enthalten. Eine Gruppierung nach Stadt finde ich jetzt nicht so unglaublich wichtig. Wenn jemand nur Fehler aus einer bestimmten Region korrigieren möchte, kann er/sie ja in der dupes.txt (siehe 1. Beitrag) nach der Stadt suchen.

Was läuft hier falsch?

zibi@amd64 /home/zibi $ php housenumbervalidator.php temp.osm
Lines: 4409 temp.osm

NOCOUNTRY

NOCITY

NOPOSTCODE

NOSTREET

NONUMBER

POSTCODES
PHP Warning: array_combine(): Both parameters should have at least 1 element in/home/zibi/housenumbervalidator.php on line 284

Warning: array_combine(): Both parameters should have at least 1 element in /home/zibi/housenumbervalidator.php on line 284
PHP Warning: Invalid argument supplied for foreach() in /home/zibi/housenumbervalidator.php on line 284

Warning: Invalid argument supplied for foreach() in /home/zibi/housenumbervalidator.php on line 284

finished after 1 seconds

Entweder gibt es keine Fehler oder das Skript macht was falsch. Kannst du mal die OSM irgendwo hochladen? (Ferndiagnose ist etwas kompliziert)

@EvanE: Ich plane jetzt die Hausnummern nach PLZs zu sortieren. Sollte ich spätestens morgen fertig haben.

Hi Gulp21!

Ich habe die Nachricht von dem User

Zbigniew Czernik

schreib ihn bitte an.

Viele Grüße,
Marek

Done.

Die Liste ist jetzt nach PLZ sortiert; angegeben ist jeweils die höchste PLZ, die in der Datei vorkommt.

(Das Skript für die Aufteilung ist Momentan noch in bash geschrieben, wird aber noch in das php-Skript, was ich noch ein wenig überarbeiten werde, integriert werden)

So, ich hab das Projekt jetzt mal wiederbelebt…

Den Code habe ich nochmal komplett in C++ neugeschrieben (Qeullcode bei GitHub) und die Ergebnisse sind jetzt auf einer Karte zu finden. Zur Zeit wird nur nach doppelt eingetragenen Hausnummern gesucht, wobei unvollständige Einträge ohne addr:(housenumber|street|postcode|city) und Einträge mit fixme ignoriert werden. Momentan werden nur Nodes ausgewertet, bei den Ways gib es irgendwie noch ein Problem, welches ich noch genauer untersuchen muss. (Vllt. wäre es doch am einfachsten, das ganze mit einer Datenbank zu machen…)

Bei den Ergebnissen sind wieder häufig falsche Straßennamen zu finden, die sich auch ohne Ortskenntnis korrigieren lassen.

Hast du den Auswertebereich eingeschränkt? Es fällt auf das auf den ersten Blick das “Ruhrgbiet” sehr stark betroffen ist. Weiter südlich scheint alles i.O. zu sein. Wäre ja schön, ist aber wenig glaubhaft… :slight_smile:
Desweiteren habe ich gesehen, dass ß,ä,ö,ü unterschlagen werden?!
Georg

Edit… sorry Frage eins hat sich erledigt, du schreibst ja oben das der Bereich eingeschränkt ist…

Ja, das hätte ich vielleicht nochmal hinschreiben können. Ausgewertet wird nordrhein-westfalen.osm von gestern.

Ein bekanntes Problem… QTextStream::readLine() ‘filtert’ die Sonderzeichen – warum auch immer – raus. Falls jemand weiß, wo der Fehler in meinem Code ist, soll er/sie es bitte sagen/schreiben.

Im Laufe des Tages kommt übrigens vllt. noch ein Update mit Unterstützung für Ways (sofern jetzt nichts schiefläuft…).

Die Seite wurde inzwischen etwas erweitertet: Es stehen jetzt folgende, standardmäßig ausgeblendete Layer zur Verfügung:

  • Broken Street: Zeigt Hausnummern, bei denen addr:street auf “str” oder “str.” endet. Abkürzungen sollten grundsätzlich nicht verwendet werden.
  • Broken Postcode: Hausnummern, bei denen addr:postcode keine Zahl ist. Oft wird fälschlicherweise die Stadt mit angegeben. (z.B. addr:postcode=48143 Münster)
  • Incomplete: Hausnummern, bei denen nicht alle wichtigen addr:*-Tags angegeben sind. Da es hier sehr viele Ergebnisse gibt (150567), werden nur 2000 Treffer angezeigt, bei denen vier Informationen fehlen (i.d.R. ist nur die Hausnummer angegeben). Wichtig: Das Programm prüft nicht, ob evtl. eine Adressrelation vorhanden ist. Und wie schon früher erwähnt ist es Geschmackssache, ob alle Adressinformationen an den Knoten/Weg gehören.

Außerdem ist jetzt das Encoding-Problem behoben. (Vielen Dank an User_5359, der mich nochmal auf setCodec() aufmerksam gemacht hat.)

Die sogenannten broken street sollten eigentlich durch den xybot korrigiert werden, die habe den Maintainer mal dazu angeschrieben.
Bei der Postcode Geschichte würde mir auch noch eine Prüfung auf 5 Stellen nummerisch wünschen, da öfters mal auch die Hausnummer in das Attribut rutscht.
Beim Prüfen der Karte für Bonn ist mir (außer dem Rechtschreibfehler im roten Schriftzug) noch ein Problem aufgefallen: Du berichtest z.B. Dupe: 101534198 (JOSM) DE Bonn 53227 Julius-Vorster-Straße 10 Itzel-Sanatorium im Collegium Augustinum nursing_home is dupe of 98389278 (JOSM), dabei gibt es diese Adresse direkt dreimal: Neben den genannten Wegen
http://www.openstreetmap.org/browse/way/101534198
http://www.openstreetmap.org/browse/way/98389278
ist dieser auch im Weg
http://www.openstreetmap.org/browse/way/101534200

MfG Georg V. (OSM=user_5359)

P.S.: Ich werde die Adresse nach geeigneter Zeit (zum Testen) hoch zur Relation verschieben…

Hallo,

http://gulp21.bplaced.net/osm/housenumbervalidator.html?zoom=17&lat=6887377.74636&lon=1011510.48213&layers=BTTFFF wird als Fehler markiert. Die Hausnummern sind aber definitiv korrekt. Wie kann man das „Problem" lösen?

Grüße
Rob

Dafür ist der Link “Fehlalarm melden” (unten auf der Seite) gedacht. Für dieses Problem hab ich das jetzt schon erledigt.