Automatische Korrektur von Fehlern in addr:* (4) - :postcode und :city

Auf die Gefahr hin, daß manch einem die Flut solcher Threads mittlerweile zu den Ohren herauskommt: Mein nächstes Vorhaben zur automatisierten Adresskorrektur (nur in Deutschland, Aufnahme in das bestehende Programm, das derzeit unter genauer Überwachung im Probebetrieb läuft, Details siehe (1) Strasse, Str. & Co) lautet: Postleitzahl und Ort auseinanderklamüsern, wenn sie gemeinsam in addr:postcode oder addr:city geschrieben oder vertauscht wurden. Beide Fehler treten regelmäßig auf, werden aber in der Regel zügig (manuell) behoben.

Beispiele: http://www.openstreetmap.org/browse/node/2124164360/history (kombiniert), http://www.openstreetmap.org/browse/way/133302861/history (vertauscht)

Bei diesen Tags können nicht wie bei den anderen Korrekturen einfach bestimmte Ersetzungen versucht werden, bis eine gelingt, sondern die beiden Tags müssen gemeinsam analysiert und ggf. geändert werden. Je nach vorliegenden Bedingungen (ein Tag vorhanden, beide Tags vorhanden) können unterschiedliche Fehler vorliegen.

Die Analyse unterscheidet folgende Fälle:

  1. Keines von beiden Tags vorhanden: nichts zu tun.

  2. Nur addr:postcode vorhanden: Prüfen, ob der Wert eine gültige PLZ ist; wenn nicht, Korrektur versuchen (also “PLZ Ort” aufteilen).

  3. Nur addr:city vorhanden: Prüfen, ob eine PLZ mit enthalten sein könnte: in diesem Fall Korrektur versuchen (“PLZ Ort” aufteilen).

  4. Beide Tags vorhanden: Prüfen, ob addr:postcode eine gültige PLZ und addr:city einen plausiblen Ortsnamen enthält; falls nicht, Korrektur versuchen: Wenn addr:city nach PLZ und addr:postcode nach Ort aussieht, beide tauschen; wenn einer die Form “PLZ Ort” hat, prüfen, ob dieser konsistent mit dem Wert des anderen Tags ist - in diesem Fall den überfüllten Wert reduzieren.

Zunächst einmal: Was ist eine gültige PLZ und was ist ein gültiger bzw. plausibler Ortsname?
Eine PLZ ist eindeutig zu definieren als eine Folge aus genau fünf Ziffern: /^[[:digit:]]{5}$/; ein Ortsname ist für meine Zwecke eine Folge von Nicht-Ziffern: /^[^[:digit:]]+$/. Letzteren würde man zunächst enger definieren wollen: als eine Folge von Buchstaben. Dann gibt es aber noch Ortsnamen, die aus mehreren Wörtern bestehen, mit Leerzeichen und Bindestrichen oder mit Abkürzungen (Frankfurt a. M., Einen a. d. Waffel), und ehe man sich versieht, ist man praktisch bei “alles außer Zahlen”. Dieser Regex ist natürlich äußerst unspezifisch; daher baue ich eine zusätzliche Sicherung ein, dazu später.

Zu den Korrekturversuchen im einzelnen: Ist nur eines der Tags vorhanden und sieht nicht vernünftig aus (d.h. addr:postcode anders als /^[[:digit:]]{5}$/ bzw. addr:city anders als /^[^[:digit:]]+$/), wird zunächst sämtlicher Leerraum am Anfang und Ende entfernt. Anschließend wird geprüft, ob “PLZ Ort” (Leerzeichen, Tab etc. optional) vorliegen könnte, also /^[0-9]{5}[[:blank:]]*[^[:digit:]]+$/.Wenn dies der Fall ist und das zusätzliche Kriterium (siehe unten) erfüllt ist, wird der Inhalt des Tags auf addr:postcode und addr:city aufgeteilt; d.h. das vorhandene Tag wird verkürzt und das fehlende hinzugefügt.

Sind beide Tags vorhanden, aber mindestens eines von beiden sieht fragwürdig aus, wird wieder zunächst sämtlicher überschüssige Leerraum entfernt. Dann wird geprüft, ob eine Vertauschung vorliegen könnte: hat addr:city die Form einer Postleitzahl und addr:postcode die eines Ortsnamens, und ist ferner das zusätzliche Kriterium gegeben, werden beide getauscht.
Handelt es sich nicht um eine Vertauschung, gibt es noch folgende zwei korrigierbare Fehler: addr:city enthält den Ortsnamen, addr:postcode “PLZ Ort”; oder addr:postcode enthält die PLZ und addr:city “PLZ Ort”. Falls beide Orte bzw. beide PLZ übereinstimmen, wird das gedoppelte Tag reduziert. In diesem Fall wird das zusätzliche Kriterium nicht überprüft.

Das zusätzliche Kriterium ist folgendes: die mutmaßliche Kombination von PLZ und Ort muß in einer aus dem OSM-Datenbestand erstellten PLZ-Liste enthalten sein. Ich habe alle Relationen mit postal_code=* aus germany.osm analysiert und soweit möglich die zugeordneten Namen herausgelesen. Dies sind zum einen admin-Grenzrelationen, wo name=* den Ortsnamen enthält, zum anderen PLZ-Relationen, wo der name meist in note=“PLZ Ort” steckt. Herausgekommen ist eine Liste, die zu jeder eingetragenen PLZ die damit assoziierten Ortsnamen aufführt, etwa: (49448 “Stemshorn” “Quernheim” “Marl” “Hüde” “Brockum” “Lemförde”). Bei diesem Beispiel würde bei Vorliegen von addr:postcode=Marl, addr:city=49448 die Vertauschung der Tags durchgeführt; im Falle von addr:postcode=Pusemuckel nicht. Analog würde “49448 Hüde” zerlegt; “49448 Kleinkleckersdorf” nicht.

Das Verfahren hat ein paar Macken: Bei manchen Relationen liefert das Analyseverfahren dank eigenwilligem Tagging Ortsnamen wie “post_code”, die entsprechenden PLZ werden also von Korrekturen ausgenommen. Auch wenn am untersuchten Objekt ein Ortsteil mit angegeben ist, in der Liste aber nur der Hauptort steht - oder umgekehrt, findet keine Korrektur statt. In der Liste steht z.B. (14050 “Berlin Westend”). Pech, wenn am Objekt eben nur “Berlin” steht. Die Liste muß also wohl noch nachbearbeitet werden. In der Regel führen diese Defekte aber nur dazu, daß sinnvolle Korrekturen unterbleiben - nicht dazu, daß falsche Korrekturen durchgeführt werden.

Ich vermute, daß bisher bei manuellen Korrekturen in den wenigsten Fällen auf ähnliche Weise geprüft wird, ob PLZ und Ort passen; aber ich möchte zumindest vermeiden, daß mein Bot auf “12345 keine Ahnung” oder “11880 ich merke mir diese blöde Telefonnummer nicht, sondern speichere sie in OSM” hereinfällt.

Es gibt einige wenige Orte mit einer Zahl im Namen, z.B. Altenhagen I, Stadt Springe oder Altenhagen II, Gemeinde Messenkamp, Kreis Schaumburg. Im Kreis Schaumburg gibt es insgesamt drei Altenhagen, die anderen aber ohne Nummer. Solange die offizielle Schreibweise Römische Nummern verwendet, fällt das bei Deiner Auswertung natürlich unter den Tisch. Du solltest aber mal schauen, ob Orte mit ein bis zweistelligen Zahlen auftreten.

Baßtölpel

Soeben getan: keine gefunden. (Sie werden auch nicht versehentlich vorher aussortiert.)

Speziell für Berlin ist dieses Thema erledigt; möglicherweise sind aber analog auch noch andere größere Städte betroffen. Ein weiteres Problem stellen aber fehlende PLZ-Relationen dar und solche ohne jeden Hinweis auf den Ortsnamen, wie diese: http://www.openstreetmap.org/browse/relation/1244366

Ich habe das Zusatzkriterium nun dahingehend überarbeitet, daß auch in solchen Fällen eine Korrektur stattfinden kann. Beim Abgleich des vermeintlichen Ortsnamens am Objekt mit dem aus der PLZ-Liste wird nicht unbedingt völlige Übereinstimmung verlangt. Alternativ genügt es, wenn der eine Name mit dem ersten Wort des anderen übereinstimmt. Als Wort zählt in diesem Zusammenhang eine Folge von mindestens drei Buchstaben, der ein Leerzeichen oder Bindestrich folgt. (Änderungen dieser Arbeitsdefinition behalte ich mir vor.)

Beispiele:

  • Die PLZ-Liste enthält (21244 “Buchholz in der Nordheide”). “21244 Buchholz in der Nordheide” konnte bereits bisher in seine Bestandteile zerlegt werden; “21244 Buchholz” erst jetzt mit der Änderung des Kriteriums.

  • Die PLZ-Liste enthält (55411 “Bingen am Rhein”). “55411 Bingen am Rhein” kann nun auch “55411 Bingen” zerlegt werden.

  • Die PLZ-Liste enthält (60438 “Frankfurt am Main”). Neben “60438 Frankfurt am Main” kann nun auch “60438 Frankfurt” bearbeitet werden; “60348 Frankfurt a.M.” immer noch nicht. Dazu müßte sich entweder das Kriterium mit der Übereinstimmung der jeweils ersten Wörter zufrieden geben; oder ich müßte eine Erkennung von Abkürzungen einbauen. Alternativ könnte ich auch einfach die PLZ-Liste auch manuell um abgekürzte Varianten größerer Städte anreichern. Ansonsten bleibt eben für die Korrekteure aus Fleisch und Blut auch noch ein bißchen was übrig.

Mich würden einmal eure Meinungen zu dem Vorhaben interessieren. Vielleicht habe ich noch was wichtiges übersehen?

Ich finde das sinnvoll.
Deswegen habe ich mit dem Overpass-Turbo eine kleine Overpass-Abfrage entwickelt, die alle Städte (Knoten mit place=city/town) in Deutschland (is_in enthält Deutschland) mit Leerzeichen oder Bindestrich im Namen auflistet (445 Treffer). Daraus habe ich noch die 116 Sädte die mit "Bad " beginnen entfernt.


Wendlingen am Neckar
Esslingen am Neckar
Ostseebad Rerik
Markt Schwaben
Königs Wusterhausen
Furth im Wald
Herzebrock-Clarholz
Ramstein-Miesenbach
Neuburg an der Donau
Steinau an der Straße
Höchstadt an der Aisch
Neunkirchen am Brand
Gemünden am Main
Königslutter am Elm
Bergen auf Rügen
Clausthal-Zellerfeld
Garmisch-Partenkirchen
Weil am Rhein
Efringen-Kirchen
Frankfurt am Main
Höchst im Odenwald
Sankt Blasien
Annaberg-Buchholz
Zell im Wiesental
Winsen (Aller)
Ottendorf-Okrilla
Monheim am Rhein
Bergisch Gladbach
Osterode am Harz
Herzberg am Harz
Hann. Münden
Neustadt in Holstein
Weimar (Lahn)
Neustadt-Glewe
Oer-Erkenschwick
Osterholz-Scharmbeck
Wennigsen (Deister)
Neustadt am Rübenberge
Wasserburg am Inn
Waren (Müritz)
Biberach an der Riß
Ribnitz-Damgarten
Friedberg (Hessen)
Plau am See
Königsbach-Stein
Zella-Mehlis
Neustadt an der Aisch
Naumburg (Saale)
Freyburg (Unstrut)
Kronberg im Taunus
Dillingen an der Donau
Hohenstein-Ernstthal
Neu-Isenburg
Geislingen an der Steige
Mühlheim am Main
Porta Westfalica
Sankt Augustin
Emmerich am Rhein
Limbach-Oberfrohna
Hessisch Oldendorf
Königstein im Taunus
Wangen im Allgäu
Gau-Algesheim
Maxhütte-Haidhof
Ebersbach an der Fils
Schwalbach am Taunus
Oldenburg in Holstein
Ober-Ramstadt
Dießen am Ammersee
Rheda-Wiedenbrück
Lindenberg im Allgäu
Kalbe (Milde)
Burgkirchen an der Alz
Garching an der Alz
Landau an der Isar
Stetten am kalten Markt
Bruchhausen-Vilsen
Neu-Ulm
Schwäbisch Gmünd
Kirchheim unter Teck
Doberlug-Kirchhain
Oberndorf am Neckar
Giengen an der Brenz
Lohne (Oldenburg)
Neukirchen-Vluyn
Kamp-Lintfort
Bruck in der Oberpfalz
Groß-Zimmern
Nieder-Olm
Preußisch Oldendorf
Bietigheim-Bissingen
Schwarzenbach an der Saale
Sandau (Elbe)
Bernkastel-Kues
Markt Indersdorf
Übach-Palenberg
Neumagen-Dhron
Traben-Trarbach
Burg Stargard
Herrsching am Ammersee
Kernen im Remstal
Brake (Unterweser)
Obernburg am Main
Wörth am Main
Heilbad Heiligenstadt
Sankt Andreasberg
Neuhaus am Rennweg
Korntal-Münchingen
Neustadt bei Coburg
Haren (Ems)
Postbauer-Heng
Lindow (Mark)
Castrop-Rauxel
Lingen (Ems)
Neustadt (Dosse)
Rotenburg an der Fulda
Rüdesheim am Rhein
Steinbach-Hallenberg
Dietfurt an der Altmühl
Zell am Harmersbach
Isny im Allgäu
Biebesheim am Rhein
Lindau (Bodensee)
Staufen im Breisgau
Linz am Rhein
Ilsenburg (Harz)
Grafing bei München
Werder (Havel)
Neukirchen (Knüll)
Oberursel (Taunus)
Meisenheim, Glan
Sankt Georgen
Alfeld (Leine)
Wilkau-Haßlau
Bendorf (Rhein)
Bernburg (Saale)
Nassau (Lahn)
Endingen am Kaiserstuhl
Neunburg vorm Wald
Hochheim am Main
Wörth an der Donau
Henstedt-Ulzburg
Rheinfelden (Baden)
Hohen Neuendorf
Neustadt am Kulm
Röthenbach an der Pegnitz
Hitzacker (Elbe)
Eisenberg (Pfalz)
Simbach am Inn
Lohr am Main
Krakow am See
Eltville am Rhein
Neusalza-Spremberg
Sankt Goar
Bernau bei Berlin
Remseck am Neckar
Titisee-Neustadt
Barchfeld, Werra
Leinfelden-Echterdingen
Hohenberg an der Eger
Haslach im Kinzigtal
Stadt Wehlen
Wörth am Rhein
Bismark (Altmark)
Reuterstadt Stavenhagen
Selters (Westerwald)
Kurort Oberwiesenthal
Neumarkt-Sankt Veit
Ostheim vor der Rhön
Greven (Westf.)
Vohburg an der Donau
Lauda-Königshofen
Niedernhausen, Taunus
Calbe (Saale)
Gronau (Leine)
Jessen (Elster)
Vilshofen an der Donau
Pfaffenhofen an der Ilm
Steinfeld (Oldenburg)
Sandersdorf-Brehna
Sankt Goarshausen
Königstein (Sächsische Schweiz)
Ostseeheilbad Graal-Müritz
Willingen (Upland)
Fürth (Odenwald)
Idar-Oberstein
Werben (Elbe)
Werther (Westfalen)
Köthen (Anhalt)
Rielasingen-Worblingen
Sulz am Neckar
Landau in der Pfalz
Offenbach am Main
Gartz (Oder)
Geislingen b. Balingen
Strasburg (Uckermark)
Monsheim, Rheinhessen
Vogtsburg im Kaiserstuhl
Gundelfingen an der Donau
Sankt Ingbert
Tambach-Dietharz
Altdorf bei Nürnberg
Lübben (Spreewald)
Klingenberg am Main
Oestrich-Winkel
Lauterbach (Hessen)
Brandenburg an der Havel
Neustadt an der Donau
Achim (Weser)
Steinheim an der Murr
Horn-Bad Meinberg
Neumarkt in der Oberpfalz
Floh-Seligenthal
Garching bei München
Hamm (Sieg)
Schieder-Schwalenberg
Groß-Gerau
Naumburg (Hessen)
Coswig (Anhalt)
Rottenburg am Neckar
Buchen (Odenwald)
Schloß Holte-Stukenbrock
Uebigau-Wahrenbrück
Schwarzenberg im Erzgebirge
Freiburg im Breisgau
Stockstadt am Rhein
Höchstädt an der Donau
Frankenberg (Eder)
Fürstenwalde (Spree)
Bernstadt auf dem Eigen
Herzberg (Elster)
Homberg (Efze)
Leer (Ostfriesland)
Hessisch Lichtenau
Neuenhagen bei Berlin
Baden-Baden
Lutherstadt Eisleben
Breisach am Rhein
Lenzen (Elbe)
Kandel, Pfalz
Winsen (Luhe)
Rottenburg an der Laaber
Weißenthurm, Rhein
Buchholz in der Nordheide
Dissen am Teutoburger Wald
Erlenbach am Main
Heringen (Werra)
Halle (Westfalen)
Eningen unter Achalm
Villingen-Schwenningen
Limburg an der Lahn
Moosburg an der Isar
Gneisenaustadt Schildau
Regis-Breitingen
Laucha an der Unstrut
Ransbach-Baumbach
Mörfelden-Walldorf
Vaihingen an der Enz
Storkow (Mark)
Homberg (Ohm)
Aken (Elbe)
Neustadt (Hessen)
Kohren-Sahlis
Cappeln (Oldenburg)
Blankenburg (Harz)
Singen (Hohentwiel)
Hirschhorn (Neckar)
Annweiler am Trifels
Ostseebad Kühlungsborn
Freiberg am Neckar
Zarrentin am Schaalsee
Hude (Oldenburg)
Schönebeck (Elbe)
Brand-Erbisdorf
Ludwigshafen am Rhein
Rehburg-Loccum
Auerbach in der Oberpfalz
Kempten (Allgäu)
Mülheim-Kärlich
Mühldorf am Inn
Märkisch Buchholz
Wyk auf Föhr
Sulzbach / Saar
Haina (Kloster)
Neustadt in Sachsen
Bitterfeld-Wolfen
Neustadt an der Waldnaab
Frankfurt (Oder)
Feldkirchen-Westerham
Erbach (Odenwald)
Weiden i.d.OPf.
Raguhn-Jeßnitz
Töging am Inn
Höhr-Grenzhausen
Sulzbach-Rosenberg
Wolframs-Eschenbach
Markt Bibart
Haag in Oberbayern
Goethestadt Bad Lauchstädt
Lübbenau (Spreewald)
Neustadt an der Orla
Sankt Wendel
Mülheim an der Ruhr
Rothenburg ob der Tauber
Brotterode-Trusetal
Schwäbisch Hall
Neunkirchen (Saar)
Weil der Stadt
Ellwangen (Jagst)
Eschenbach in der Oberpfalz
Forst (Lausitz)
Groß-Umstadt
Vetschau (Spreewald)
Landsberg am Lech
Prien am Chiemsee
Edingen-Neckarhausen
Neustadt an der Weinstraße
Schwarzenbach am Wald
Ehingen (Donau)
Frankenthal (Pfalz)
Allendorf (Lumda)
Neu-Anspach
Stadt Südliches Anhalt
Osternienburger Land
Samtgemeinde Hage
Samtgemeinde Brookmerland
Zeulenroda-Triebes
Zahna-Elster
Lutherstadt Wittenberg

Falls du Bedarf hast, kann ich dir auch ausführlichere Listen zukommen lassen. Einfach über der Forum-Mail melden. Du kannst natürlich auch selber mit dem Skript Versuche durchführen.

Wer damit ein wenig rumspielt, bitte erstmal das Limit runtersetzen und die BBox deutlich kleiner fassen. Für die BBox um ganz Deutschland lief das Skript ca. 150 Sekunden. Zum Ausprobieren reicht ja ein kleinerer Ausschnitt.

Edbert (EvanE)

Danke Edbert, die Liste werde ich bei Gelegenheit mal mit meiner PLZ-Liste abgleichen.
Den aus meiner Sicht wichtigsten Hinweis hast Du aber in einem kleinen Einschub versteckt: das Wort “Bad”. Zum Glück gibt es scheinbar nicht allzu viele “Bad”-Orte an, vor, bei oder in Irgendwas (Bad Homburg vor der Höhe, Bad Soden am Taunus und eine Handvoll weitere), wo also die erweiterte Identitätsprüfung notwendig werden könnte. Eine Lösung könnte sein, die Definition eines Worts so abzuwandeln, daß auch “Bad xyz” als ein Wort zählt.
Evtl. muß ich meinem Programm auch noch beibringen, Abkürzungen zu verstehen (Beulen a.d. Rinn, Einen a.d. Waffel usw.). Ansonsten gilt aber: Orte, die mein Programm nicht erkennt, bleiben einfach außen vor - da muß dann der Mensch schauen, was zu tun ist. Diese Fehlerklasse wird ja auch im housenumbervalidator angezeigt.

btw: 55583 “Bad Münster am Stein-Ebernbu”?

Ich hatte zwar auf quantitativ mehr Feedback gehofft, aber da ich zumindest auch keinen Widerspruch vernehme und bisherige Tests der Funktion osm-task-subfix-addr-postcode-city-confusion an “handverlesenen” Objekten ermutigend verliefen, werde ich die oben erläuterte Korrektur bald in den Probebetrieb mit einbeziehen. Damit ist dann möglicherweise bereits der Endausbau der automatischen Adresskorrekturen erreicht - ob ich mich an zusammengeklebte “Straße Hausnummer” herantraue, weiß ich noch nicht. Daß diese Aufgabe nicht ganz trivial ist, wurde ja bereits verschiedentlich erwähnt.

Auch wenn ich mir die Adresse-Informationen bzgl. Datenqualität genauer ansehe, kann ich nicht bei allen mitdiskutieren (solange es in die richtige Richtung läuft :slight_smile: ).

Derzeit 15 Werte von addr:postcode in der Form 5 Zeichen und ein Blank (und ggf. eine beliebige Zeichenkette)

SQL-Code : like '_____ %' 

davon sind 10 Postleitzahlen mit einem angehängten Blank. In addr:city existiert derzeit kein solches Muster, dafür gibt es einige Beispiele, die mit einer Hausnummer befüllt sind. Alle Fehlerfälle, die mir derzeit bekannt sind, würden mit den obenstehenden Beschreibungen entweder korrekt korrigiert oder nicht angepackt.

Damit ein +1 für eine Implementierung von meiner Seite.

MfG Georg V.

Doch, ich bestehe darauf :wink: Es ist insbesondere sehr hilfreich, wenn jemand sich die betroffenen Daten mit anderen Methoden ansieht als ich, und so mögliche Probleme aufdeckt - oder eben keine.

PLZ-Werte mit “nur” überschüssigem Leerraum werden im Rahmen der Korrektur ebenfalls gekürzt. Das steht zwar in den Details der obigen Beschreibung, aber nicht in der Einleitung, und ist eher ein Nebeneffekt der komplexeren Korrekturen; daher noch einmal der Hinweis. Es gibt zwar wahrlich schlimmere Fehler (Leerraum zu ignorieren sollte man einem Auswerter noch zutrauen) - aber wenn ich die Leerzeichen nicht entferne, tut es faktisch jemand anders (Fehlermeldung im housenumbervalidator).

Die neu hinzugekommenen Korrekturen sehen dann z.B. so aus:

osm-mechedit-fix-addr run Tue Feb 05 19:58:31 2013
created changeset #14925388, http://www.openstreetmap.org/browse/changeset/14925388
editing node #2135948949, http://www.openstreetmap.org/browse/node/2135948949
        addr:postcode tag modified: "13127 " -> "13127"
editing node #2139624781, http://www.openstreetmap.org/browse/node/2139624781
        addr:postcode tag modified: "25469 " -> "25469"
editing node #2140561477, http://www.openstreetmap.org/browse/node/2140561477
        addr:postcode tag modified: "10119 Berlin" -> "10119"
        addr:city tag modified: "nil" -> "Berlin"
        warning: addr:street tag "Steinstraße 13" of node #2140561477 still looks suspicious
editing node #2141007216, http://www.openstreetmap.org/browse/node/2141007216
        addr:postcode tag modified: "22089 " -> "22089"
...
editing node #2141598591, http://www.openstreetmap.org/browse/node/2141598591
        addr:postcode tag modified: "38350 Helmstedt" -> "38350"
        addr:city tag modified: "nil" -> "Helmstedt"
        warning: addr:street tag "von-Guericke-Straße 7" of node #2141598591 still looks suspicious

(“nil” ist ein Artefakt bei der Erstellung des Logs und heißt: vorher kein Wert vorhanden)

Bad Münster am Stein-Ebernburg laut Nominatim:
“Verwaltungsgrenze Bad Münster am Stein-Ebernburg, Bad Kreuznach, Rheinland-Pfalz, Deutschland”

Bad Homburg vor der Höhe Abkürzung nach meiner Erinnerung Bad Homburg v.d.H.

Hier noch die Liste der 116 Städte, die mit "Bad " beginnen.


Bad Abbach
Bad Aibling
Bad Arolsen
Bad Belzig
Bad Bentheim
Bad Bergzabern
Bad Berka
Bad Berleburg
Bad Berneck
Bad Bevensen
Bad Bibra
Bad Blankenburg
Bad Bodenteich
Bad Brambach
Bad Bramstedt
Bad Breisig
Bad Brückenau
Bad Buchau
Bad Camberg
Bad Colberg-Heldburg
Bad Doberan
Bad Driburg
Bad Dürkheim
Bad Dürrenberg
Bad Dürrheim
Bad Eilsen
Bad Elster
Bad Ems
Bad Endbach
Bad Endorf
Bad Essen
Bad Fallingbostel
Bad Feilnbach
Bad Frankenhausen/Kyffhäuser
Bad Freienwalde (Oder)
Bad Friedrichshall
Bad Gandersheim
Bad Gottleuba-Berggießhübel
Bad Griesbach
Bad Grund
Bad Harzburg
Bad Herrenalb
Bad Hersfeld
Bad Hindelang
Bad Homburg vor der Höhe
Bad Honnef
Bad Hönningen
Bad Iburg
Bad Kissingen
Bad Kohlgrub
Bad Königshofen
Bad Köstritz
Bad Kötzting
Bad Kreuznach
Bad Krozingen
Bad Laasphe
Bad Langensalza
Bad Lausick
Bad Lauterberg im Harz
Bad Liebenwerda
Bad Liebenzell
Bad Lippspringe
Bad Lobenstein
Bad Malente-Gremsmühlen
Bad Marienberg
Bad Mergentheim
Bad Münder
Bad Münster am Stein-Ebernburg
Bad Münstereifel
Bad Muskau
Bad Nauheim
Bad Nenndorf
Bad Neuenahr-Ahrweiler
Bad Neustadt an der Saale
Bad Oeynhausen
Bad Oldesloe
Bad Orb
Bad Peterstal-Griesbach
Bad Pyrmont
Bad Rappenau
Bad Reichenhall
Bad Rodach
Bad Sachsa
Bad Säckingen
Bad Salzdetfurth
Bad Salzschlirf
Bad Salzuflen
Bad Saulgau
Bad Schandau
Bad Schmiedeberg
Bad Schönborn
Bad Schussenried
Bad Schwalbach
Bad Schwartau
Bad Segeberg
Bad Sobernheim
Bad Soden am Taunus
Bad Soden-Salmünster
Bad Sooden
Bad Staffelstein
Bad Steben
Bad Sulza
Bad Sülze
Bad Teinach
Bad Tennstedt
Bad Urach
Bad Vilbel
Bad Waldsee
Bad Wildbad
Bad Wildungen
Bad Wilsnack
Bad Windsheim
Bad Wörishofen
Bad Wünnenberg
Bad Wurzach
Bad Zwischenahn

‘Anfällig’ für Abkürzungen dürfte neben deinen zwei Beispielen folgende Orte sein:

  • Bad Frankenhausen/Kyffhäuser
  • Bad Freienwalde (Oder)
  • Bad Lauterberg im Harz
  • Bad Neustadt an der Saale

Edbert (EvanE)

Ich bin mittlerweile dahinter gekommen. Bei dieser Relation war das von mir ausgewertete note-Tag fehlerhaft. Nominatim wertet die admin-Grenze aus, deren name-Tag korrekt ist (die aber keine für mich verwendbare Information zur PLZ enthält).

Daneben gibt es eine Reihe von Relationen, wo ehemals auswertbare note-Tags (note=“xxxxx Ortsname”) durch note=“xxxxx post_code” ersetzt wurden; überwiegend in Fernost und stets durch denselben Benutzer. Dort wird mein Programm die in diesem Faden beschriebenen Korrekturen nicht durchführen können.
www.openstreetmap.org/browse/relation/1087073
www.openstreetmap.org/browse/relation/1087077 ist inzwischen korrigiert, mein Datenauszug ist veraltet
www.openstreetmap.org/browse/relation/1096779
www.openstreetmap.org/browse/relation/1096785
www.openstreetmap.org/browse/relation/1096786
www.openstreetmap.org/browse/relation/1096809
www.openstreetmap.org/browse/relation/1096811
www.openstreetmap.org/browse/relation/1106855
www.openstreetmap.org/browse/relation/1113172
www.openstreetmap.org/browse/relation/1283586
www.openstreetmap.org/browse/relation/1327258
www.openstreetmap.org/browse/relation/1327267
www.openstreetmap.org/browse/relation/1329077
www.openstreetmap.org/browse/relation/1329080
www.openstreetmap.org/browse/relation/1329082
www.openstreetmap.org/browse/relation/1329083
www.openstreetmap.org/browse/relation/1329085
www.openstreetmap.org/browse/relation/1329086
www.openstreetmap.org/browse/relation/1329089
www.openstreetmap.org/browse/relation/1329091
www.openstreetmap.org/browse/relation/1357514
www.openstreetmap.org/browse/relation/1357521
www.openstreetmap.org/browse/relation/1357522
www.openstreetmap.org/browse/relation/1421434
www.openstreetmap.org/browse/relation/2302726
www.openstreetmap.org/browse/relation/2466233
www.openstreetmap.org/browse/relation/2639207
www.openstreetmap.org/browse/relation/2639208

In den PLZ-Relationen:

 '(61348 "Bad Homburg v.d. Höhe")
 '(61350 "Bad Homburg v.d. Höhe")
 '(61352 "Bad Homburg v.d. Höhe")

Man sollte doch immer vorher nachsehen, bevor man so etwas schreibt.
Auf der Wikipedia-Seite steht die Abkürzung direkt am Anfang. :frowning:

Edbret (EvanE)

Demnach ist sie aber - ohne Leerzeichen - in OSM auch falsch.

Nanu, umgetauft? :wink:

Saalfeld/Saale machte zwar noch eine Anpassung des Stringvergleichs notwendig, aber seitdem läuft die neue Funktion sehr zufriedenstellend und ist bisher noch mit jedem Ortsnamen fertiggeworden. Weitere Änderungen (je ein Exemplar von mehreren bis vielen):

editing node #2144051910, http://www.openstreetmap.org/browse/node/2144051910
	addr:postcode tag modified: "48149 " -> "48149"
editing node #2143353577, http://www.openstreetmap.org/browse/node/2143353577
	addr:postcode tag modified: "07318 Saalfeld" -> "07318"
	addr:city tag modified: "nil" -> "Saalfeld"
editing way #25001680, http://www.openstreetmap.org/browse/way/25001680
	addr:postcode tag modified: "13595 " -> "13595"
editing way #31246510, http://www.openstreetmap.org/browse/way/31246510
	addr:postcode tag modified: "12679 Berlin" -> "12679"
	addr:city tag modified: "nil" -> "Berlin"
editing way #204245346, http://www.openstreetmap.org/browse/way/204245346
	addr:postcode tag modified: "49201 " -> "49201"
editing way #204130846, http://www.openstreetmap.org/browse/way/204130846
	addr:street tag modified: "Meissner Str." -> "Meissner Straße"
	addr:postcode tag modified: "01445 Radebeul" -> "01445"
	addr:city tag modified: "nil" -> "Radebeul"
editing way #204231371, http://www.openstreetmap.org/browse/way/204231371
	addr:street tag modified: "Eifelstr. " -> "Eifelstraße"
	addr:postcode tag modified: "53119 " -> "53119"
editing node #287501062, http://www.openstreetmap.org/browse/node/287501062
	addr:postcode tag modified: "Hatten" -> "26209"
	addr:city tag modified: "26209" -> "Hatten"
editing node #2147151496, http://www.openstreetmap.org/browse/node/2147151496
	addr:postcode tag modified: "84028 Landshut" -> "84028"
	addr:city tag modified: "nil" -> "Landshut"
editing node #2147899622, http://www.openstreetmap.org/browse/node/2147899622
	addr:postcode tag modified: "22041 " -> "22041"

Nein, nur zu schnell getippt.
Meistens sehe ich solche Fehler und korrigiere sie vor dem Abschicken.
Aber irgendwann rutsch dann doch einer durch.

Schön zu sehen, dass solche Dreher jemanden auffallen.
Edbert (EvanE)

Eine Ergänzung werde ich wohl noch einbauen, nämlich für den Fall, daß sowohl PLZ und Ort durcheinandergewürfelt werden als auch ein “D[ -]” vor der Postleitzahl steht. Stein des Anstoßes ist

way #205324243's addr:postcode tag looks funny: "D-41066 Mönchengladbach"
but I can't do anything about it

Edit: ist eingebaut und scheint zu funktionieren.