Ja, ich hatte nichts gefunden, wie ich das in JOSM bei einem OsmPrimitive schnell und einfach abfragen kann, aber ich bin für jeden Hinweis dankbar. Das erste Ziel ist jetzt erst einmal die 90% low hanging fruits zu erwischen und dabei möglichst wenig false positives generieren, durch die es von den meisten gleich wieder ignoriert oder deaktiviert werden würde. Bei Adressen, die so nahe beieinander sind und nicht explizit unterschiedliche cities angegeben haben, gehe ich davon aus, dass das fishy und zu 99% falsch ist - sogar wenn die Angabe von city unterschiedlich ist, ist es eher suspekt und könnte ein Tippfehler, unterschiedliche Schreibweise, oder eine Verwechslung bei zusammengewachsenen Ortschaften sein, aber es scheint diese Fälle durchaus zu geben: Rustenfeldgasse 26, 1100 Wien ist gerade einmal 3 Häuser von Rustenfeldgasse 26, 2333 Leopoldsdorf entfernt.
Ich habe den Punkt mit der Entfernung jetzt feiner gegliedert, aber dazu möchte ich noch etwas zur allgemeinen Logik vorausschicken: die simpelste korrekte Adresse enthält nur housenumber und street/place - ich möchte allerdings auch Duplikate erkennen unabhängig davon, wie viele zusätzliche optionale Adress-Attribute jeweils noch angegeben sind. Im ersten Schritt wird also ein Schlüssel aus den Werten street, place, housenumber, unit und flats erzeugt, der Groß-/Kleinschreibung und Abstände/Bindestriche in Straßennamen ignoriert, also “Mozart-Gasse”, “Mozart Gasse” und “Mozartgasse” werden gleich angesehen. Kommt es dann zu einem Match, werden folgende Entscheidungen getroffen:
-
wenn beide ein addr:city angegeben haben und dieses ident ist, gibt es falls auch noch der Postcode gleich oder nicht vorhanden ist (momentan der einzige Fall, wo ich Postcode überhaupt betrachte) eine Warnung, bei unterschiedlichem Postcode zumindest noch eine Info (muss in JOSM unter “unwichtige Warnungen” aktiviert werden). Distanz spielt da überhaupt keine Rolle, es wird alles geprüft, was in der aktuellen Datenebene ist.
-
wenn sich city dagegen unterscheidet, aber die Adressen sehr nahe (200m) beieinander liegen kommt dennoch eine Info - ich bin mir beim Grenzwert und der Warnstufe nicht ganz sicher. Wenn man es auf “Warnung” erhöht, wäre wohl ein eigener Text dafür sinnvoll, nachdem der Unterschied ja explizit angegeben ist.
-
wenn zumindest bei einer Adresse kein addr:city angegeben ist, gibt es eine Warnung, wenn sie sehr nahe beieinander liegen, ansonsten nur eine Info (sollte wohl auch noch eine PLZ-Überprüfung bekommen)
Zu den Objekten, die ignoriert werden, habe ich jetzt noch leisure, emergency, craft, entrance und auch name hinzugefügt. Letzteres ohne weiteren spezifischeren Tags deutet zwar darauf hin, dass diese fehlen, aber zum einen gibt es nicht unbedingt immer etwas passendes und v.a. ist das ein anderes Problem und hat nichts mit den Adressen zu tun.
Was zu den 10% der “Früchte” zählt, die mich aktuell nicht interessieren, sind Adressen, die ausschließlich associatedStreet ohne addr:street/place verwenden. Die werden nicht als Duplikat erkannt, wenn man welche ohne associatedStreet anlegt, wobei in den Gegenden wo diese Relationen verwendet wurden, die ich mir angesehen habe, sowieso beides angegeben wurde.
Aktuelle Version zum Testen: https://github.com/Luzandro/josm-address-validator/raw/master/josm-custom.jar