Geokodierung/Reverse Geocoding mit Karten nach Orten
am 26.10.2015 - 11:59 Uhr in
Hallo,
seit ein paar Tagen versuche ich mich an einer Problematik, die schon öfter angerissen wurde aber scheinbar noch nicht gelöst werden konnte. Aber erstmal von vorn.
Das Ziel: Erstellung einer Webseite, auf der Objekte der Bildenden Kunst mit ihren Standorten erfasst werden sollen. Außerdem sollen sie ihren Orten mit Verwaltungsbezirken/Stadtteilen zugeordnet werden können.
Beispiel: Pflasterbrunnen - 48.77668019716759, 9.175507745446794 - Stuttgart - Stuttgart-Mitte
Soweit kein Problem. Die Erfassung des Standorts erfolgt wie Geofield mit OpenLayers (2.x, Kartenmaterial von OSM), da Google bekanntlich irgendwann Geld haben möchte.
Problem 1: Nun stellt sich die Frage nach der möglichst automatischen Erkennung des Ortes und Stadtkreises. Hier habe ich mich an der rückwärtigen Geokodierung versucht, wie bspw. hier beschrieben, jedoch leider ohne Erfolg. Rules bringt die Fehlermeldung
Integrity check for the imported configuration failed. Error message: The data type of the configured argument does not match the parameter's value requirement..
. Sie besagt, dass der per reverse ermittelte Wert "adresse" nicht in das Feld "field_adresse" übertragen wird.
Leider gibt es für das Addressfield kein Map-Widget.
Problem 2: Pro Ort sollte eine Karte angezeigt werden. Daher dachte ich, dass es möglich wäre, per Location Taxomize den Ort (mit Subebene Stadtteil) in ein Vokabular zu übernehmen. Location hatte zumindest unter Drupal 6 in Verbindung mit GMap eine automatische Hierarchie der Orte pro Land angelegt. Das bekam ich unter D7 bislang nicht zum laufen.
Daher meine Fragen zu den o.g. Problemen:
- Wie ist es möglich, anhand von gewählten Koordinaten (auf OSM-Basis) den Ort und Stadtteil automatisch zu erkennen und bspw. in ein Vokabular zu übertragen?
- Wie ist es möglich, per Views (Kontextfilter) eine Karte mit OpenLayers bezogen auf die Beiträge pro Ort zu erstellen?
Über eure Hilfe wäre ich dankbar :)
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo,eine solche
am 26.10.2015 - 12:45 Uhr
Hallo,
eine solche Anforderung allein in Drupal umzusetzen halte ich für schwierig und alles andere als performant.
Zur 1. Frage:
Es gibt in Deutschland fast 30'000 Postleitzahlen, welche Du erst als nodes importieren müstest um
z.B: alle Orte in einer Region zu suchen und anzuzeigen.
Ich würde dazu die Orte(von OSM) aus Performance Gründen in einen SOLR indexieren.
Zu Deiner 2. Frage:
Da Orte mit PLZ eingetragen werden, brauchst Du ja einfach per View die PLZ Abfragen um alle Beiträge dieses Ortes zu bekommen.
Ich weise nochmal darauf hin, dass Ortsnamen nicht eindeutig sind, weshalb Du über die PLZ gehen musst.
Möchtest Du auch Orte in einem Umkreis dann geh über Lat/Long und Distance.
MfG
Robert
PS: Ich meine für DE, denn In der Schweiz gibt es nur ca. 6000 Orte, das könnte man noch so mit Drupal allein machen
Hallo,danke für deine
am 26.10.2015 - 13:18 Uhr
Hallo,
danke für deine schnelle Antwort. Wegen dem Aspekt:
Es gibt in Deutschland fast 30'000 Postleitzahlen, welche Du erst als nodes importieren müstest um
z.B: alle Orte in einer Region zu suchen und anzuzeigen.
Ich würde dazu die Orte(von OSM) aus Performance Gründen in einen SOLR indexieren.
möchte ich nicht vorab alle Orte indizieren. Soweit ich bisher weiß, wird sich die Anzahl der Städte auch in Grenzen halten. Daher meine Idee, das über reverse Geocoding zu realisieren. Ein Massenimport aller Orte mit Postleitzahlen halte ich auch im Hinblick auf den Zweck der Seite für ungünstig.
Da Orte mit PLZ eingetragen werden, brauchst Du ja einfach per View die PLZ Abfragen um alle Beiträge dieses Ortes zu bekommen.
Ich weise nochmal darauf hin, dass Ortsnamen nicht eindeutig sind, weshalb Du über die PLZ gehen musst.
Möchtest Du auch Orte in einem Umkreis dann geh über Lat/Long und Distance.
Ich gebe dir Recht, das Ortsnamen nicht eindeutig sind. Eine Abfrage über die Postleitzahlen wäre jedoch deutlich komplexer, da diese zwar das Admin-Level 9 bzw. 10 (Bezitk bzw. Stadtteil) darstellen, jedoch müssten sie dann verkettet werden.
Die zweite Frage bezieht sich eher auf den Kontextfilter im Layer (View), da ich das bislang nicht realisieren konnte.
Grüße
Hi, woher bekommst Du dann
am 26.10.2015 - 13:44 Uhr
Hi,
woher bekommst Du dann die Bezirke/Stadtteile, die ein Benutzer auswählen soll
wenn er einen Ort einträgt?
Das Ziel: Erstellung einer Webseite, auf der Objekte der Bildenden Kunst mit ihren Standorten erfasst werden sollen. Außerdem sollen sie ihren Orten mit Verwaltungsbezirken/Stadtteilen zugeordnet werden können.
Die musst Du vorher ja irgendwoher bekommen, damit Sie der User auswählen kann.
Auch die Bezirke sind nicht unbedingt eindeutig, daher muss auch PLZ und Ortsname angezeigt werden.
Du möchtest wenn der User eine Stadt eingibt, alle Bezirke/Stadtteilen dieser Stadt dem User zurAuswahl geben.
Grundsätzlich hört sich das für mich nach einer Facetted Search an.
Du benötigst dafür auch alle Stadtteile/Bezirke der Städte in einer DB.
Wenn die Anzahl der Städte sich sowieso in Grenzen hält, musst Du ja auch nur die importieren, welche Du verwaltet haben möchtest
und kannst es somit ohne SOLR machen.
Grüsse
Robert
Hyp1 schriebHi,woher
am 26.10.2015 - 14:34 Uhr
Hi,
woher bekommst Du dann die Bezirke/Stadtteile, die ein Benutzer auswählen soll
wenn er einen Ort einträgt?
Hallo nochmal,
Bislang ist der Standort als geofield mit dem OL(OSM)-Map-Widget angelegt. Der User wählt sozusagen die Koordinaten direkt per Klick in der Karte.
Aus dieser Eingabe wollte ich per (reverse) geocoding die Stadt und den Stadtteil auslesen lassen.
Hi,beim Klick auf die Karte
am 26.10.2015 - 15:38 Uhr
Hi,
beim Klick auf die Karte bekommst Du einen spezifischen Punkt (einen Datensatz mit lat/long plz, name).
Wenn der User hier genau klickt ist er ja schon im richtigen Bezirk/Stadtteil, gibt OSM da nicht auch diesen gleich mit?
Falls nicht musst Du die Stadtteile/Bezirke ja irgendwo auflösen.
Technisch:
Du möchtest aus diesen spezifischen Punt (Bezirk,Stadtteil) mehrere weitere Punkte(Bezirke) zum auswählen, das sind mehrere Punkte aufgelöst durch einen gegebenen Punkt.
D.H. Du benötigst auch 2 Interaktionen und 2 Queries.
User klickt auf Map-> query/hole Stadt -> query/hole Bezirke -> User wählt Bezirk
Möglichkeiten:
1. Entweder Du machst eine Umkreissuche auf den ersten Klick und holst alle Bezirke/Stadteile in der Nähe(ggf. Umkreis von 50km).
2. Du indexierst die Stadtteile/Bezirke nach PLZ der Stadt und machst dort den Query.
3. Oder du kannst aus OSM anhand einer Stadt per JS die Bezirke/Stadtteile bekommen
MfG
PS:
Zu beachten, dass Du beim speichern der Stadtteile/Bezirke nicht nur den Namen des Bezirks speichern darfst, sondern auch min. die PLZ, da auch bezirke nicht unique sind.
Hatte gehofft, dass es auch
am 26.10.2015 - 19:55 Uhr
Hatte gehofft, dass es auch einfacher geht. Die Orte sollen ja nur mit gespeichert werden, um nach Ihnen Filtern zu können und deren zugehörige Beiträge auf einer Karte auszugeben.