Was fehlt ist abgleich mit den PLZ Polygonen und den admin boundarys. Fänd ich ja schon nett wenn das was im addr:city steht auch zu admin_level=8 oder =6 passt. Ich habe gerade mal etwas mit Overpass rumgespielt:
[timeout:20][bbox:{{bbox}}]; area[postal_code="32130"][boundary="postal_code"]->.ar; node(area.ar)[~"^addr:(street|housenumber|place)$"~"."]->.n; way(area.ar)[~"^addr:(street|housenumber|place)$"~"."]->.w; rel(area.ar)[~"^addr:(street|housenumber|place)$"~"."]->.r; ( node.n["addr:postcode"!="32130"]; node.n["addr:city"!="Enger"]; way.w["addr:postcode"!="32130"];>; way.w["addr:city"!="Enger"];>; rel.r["addr:postcode"!="32130"];>; rel.r["addr:city"!="Enger"];>; ); out; http://overpass-turbo.eu/s/8sv
Das sollte alle Adressen ausspucken die im PLZ-Bereich von Enger liegen und bei denen die PLZ und/oder die Stadt fehlt oder falsch ist. Es liefert einige Treffer, aber das da Gebäude oder Gebiete auf der Stadtgrenze stehen. Schade das man nicht auf Attribute von einzelnen Elementen zugreifen kann, sonst hätte man da gut ein for each über mehrere PLZ-Gebiete machen können in dem man die PLZ und Stadt aus den Attributen der Area extrahiert, aber Overpass kann das scheinbar (noch) nicht. Oder ich bin gerade nicht fähig das in der Doku zu finden. :D Vor der Abfrage muss das Gebiet in der Karte sichtbar sein wegen dem bbox. Wie gut das bei Großstädten funktioniert habe ich nicht getestet, kann aber gut sein, dass das zu viel für den Server ist, da als erstes erstmal alle Adressen gesucht werden.