Land, Adresse, Region, Ort, PLZ, lng, lat, das sind die Daten die ich Brauche.
habe im Netz mal Infos gesehen, dass man die Openstreetmap-Daten in MySQL-Datenbank einlesen kann.
habe auch gelesen, dass es MySQL dafür nicht so optimal eigent. Bin aber leider auf MySQL angewiesen.
Frage 1: ist das überhaupt möglich?
Frage 2: wenn ja, wie groß wird die DB?
Frage 3: gibts es irgendwo schon Howto’s?
Ja, selbstverständlich ist so etwas möglich. Normalerweise ist MySQL äußerst ungeeignet, weil es nicht für Geodaten optimiert ist. Da es dir aber nur um eine Adressvervollständigung ohne Koordinaten und spatiale Relationen geht, ist das völlig egal. Du müsstest also nur die Adressdaten aus OSM importieren und dann ganz normale Datenbankabfragen realisieren.
Das Problem: Adressen sind in OSM noch äußerst lückenhaft erfasst. Einige Gebiete sind vollständig erfasst, andere nur teilweise oder gar nicht. Das Ergebnis wird in seiner Qualität also von Ort zu Ort schwanken.
Antwort 2:
Je nach Region ein paar GB. Du hast ja nur die Adressen ohne sonstige Attribute.
Dann kannst du ja auch lat und lon als reine Strings/Zahlen speichern. Da brauchst du keine räumliche Erweiterung für.
Grobes Howto (bitte die einzelnen Komponenten selbst googeln):
Einen Geofabrik-Extrakt der betreffenden Region als .pbf runterladen.
mit osmfilter alles außer die addr:*-Tags wegwerfen
mit osmconvert daraus ein XML machen
mit den Tools deiner Wahl dieses XML in deine mySQL-Datenbank einlesen.
Punkt 1: Viele Objekte dürften als Weg bzw. Fläche vorliegen. Dort müsstest du die Koordinaten erst bestimmen! Ein eleganter Weg fällt mir momentan aber auch nicht ein, wie man das komplett auf Punkte vereinheitlichen könnte.
Punkt 2: Du möchtest also keine Hausnummern, sondern nur Straßennamen. Die werden aber nicht über addr:-Tags angegeben, sondern über name= an den entsprechenden highway=*. Dort fehlen dir dann aber die restlichen Adressdaten. Du müsstest also erst alle Adressen bestimmen, die Hausnummern entfernen, dann ein unique drauf ausführen, damit du jede Straße/PLZ/Ort-Kombination nur ein Mal hast (aber Achtung, die Daten sind nicht immer vollständig, du müsstest ggf. also noch Grenzen und place-Nodes berücksichtigen und darüber die Adresse vervollständigen). Anschließend müsstest du die nächstliegende Straße mit diesem Namen extrahieren und auf einen Punkt reduzieren.
Fazit: Es wäre vielleicht gar nicht schlecht, solch einen Adress-Extrakt anzubieten. Wäre das nicht was für die Geofabrik?
Straßennamen stehen doch (meist?) in addr:street drinnen. Es müsste also eigentlich klappen. Außer für Straßen, an denen keine Adressen erfasst sind…
Alternativ kann man selbst einen nominatim aufsetzen, ist aber sehr viel Aufwand und nur mit postgres zu bewerkstelligen. Und Overkill, wenn man nur Autocomplete haben will.
Es geht ja wohl darum, die Position der Straßen – und nicht die der Häuser – zu bekommen. Und dafür helfen einem die Positionen der Adressen nicht allzu viel.
Du hast also einen highway=residential mit name=Hauptstraße und hundert Nodes mit addr:street=Hauptstraße und den anderen addr:-Tags. Du möchtest aber nur den highway=residential mit den gemeinsamen addr:-Tags.