Umkreissuche
Einleitung
Mit der Umkreissuche können Datensätze nach ihrer geografischen Position im Bezug auf eine vorgegebene Adresse und Radius gefiltert werden. Mit dem Filter wird bestimmt, ob sich der entsprechende Datensatz innerhalb des vorgegebenen Radius befindet bzw. ob der geografische Abstand zwischen dem Punkt der Filtereingabe und dem des Datensatzes unterhalb eines gegebenen Schwellwertes ist. Bezugspunkt („Mittelpunkt“) des „Filterkreises“ ist die im Filter eingegebene Adresse. Der sphärische Abstand zwischen den zwei Punkten wird mit der Haversine-Formel ermittelt.
Die Berechnung der Entfernung der Datensätze zur eingegebenen Adresse erfolgt auf der Grundlage des Längen- und Breitengrades. Diese beiden Werte müssen jeweils für die im MetaModel gespeicherte Adresse als auch für die eingegebene Adresse vorliegen.
Für die im MetaModel gespeicherten Adressen muss jeweils ein Attribut für den Längengrad (longitude) und den Breitengrad (latitude) z.B. als „geo_lat“ und „geo_long“ mit dem Typ „Dezimal“ oder „Text“ angelegt werden.
Die Auflösung der eingegebenen Adresse in Längen- und Breitengrad erfolgt direkt beim Absenden der Filteranfrage im Frontend über einen „Lookup“ - für diesen stehen die Services von Google-Maps oder OpenStreetMap zur Verfügung.
Es folgt eine Kurzanleitung zur Konfiguration der Umkreissuche.
Filter installieren
Mit dem Contao Manager oder auf Konsole das Paket „metamodels/filter_perimetersearch“ installieren. Nach der Installation sollte es eine weitere Filterregel „Umkreissuche“ geben.
Attribute anlegen
Für den Längengrad (longitude) und den Breitengrad (latitude) ist jeweils ein Attribut vom Typ „Dezimal“ oder „Text“ anzulegen z.B. als „geo_lat“ und „geo_long“. Die Attribute werden nur für die Filterung benötigt und müssen für die Frontendausgabe nicht eingerichtet werden.
Nach dem Anlegen der beiden Attribute können diese mit Werten befüllt werden z.B. mit geo_lat: 52.517365 und geo_long: 13.353159 für die Adresse des Schloss Bellevue in Berlin (Spreeweg 1, 10557 Berlin, Deutschland).
Filter anlegen
Unter Filtersets wird ein neues Filterset z.B. mit der Bezeichnung „Umkreissuche“ angelegt und anschließend eine Filterregel vom Typ „Umkreissuche“ mit den folgenden Einstellungen:
Typ: Umkreissuche
Datenmodus: Multimodus (z. Z. nur Multimodus verfügbar)
Attribute für Breite und Länge: entsprechende Attribute auswählen
Label: Bezeichnung für die Eingabe der Adresse („Mittelpunkt“) - z.B. „Adresse“
Bereichslabel: Bezeichnung für die Angabe der Größe des Radius - z.B. „Radius in km“
Bereichsmodus: Auswahl, ob freies Eingabefeld oder feste Werte (Auswahlmodus) - bei einer Liste von festen Werten kann der Standartwert vorgegeben werden
Ländermodus: Vorgabe ob und wenn ja welches Land der Adresse für die Lookup- Suche hinzugefügt werden soll (z.B. Voreinstellung mit „Deutschland“)
LookUp Service: Auswahl ob Google-Map, OpenStreetMap oder direkte Koordinaten - es können auch mehrere Services angelegt werden; diese werden nacheinander abgearbeitet
Filter im Frontend einrichten
Im Frontend sollte eine zu filternde MetaModel-Liste mit aktiviertem Filterset (z.B. „Umkreissuche“) vorhanden sein.
Im MetaModel-Frontendfilter wir das entsprechende MetaModel sowie das Filterset „Umkreissuche“ aktiviert. Ebenso erfolgt eine Aktivierung bei den Attributen des Filters Umkreissuche.
Die Einstellung „Bei Änderung aktualisieren“ sollte nicht angewählt werden, da ansonsten das Formular schon startet, wenn erst ein Wert von Adresse/Radius geändert wurde.
In der Frontend-Ausgabe sollte nun ein Filter mit zwei Eingabemöglichkeiten zu sehen sein, mit denen die Liste gefiltert werden kann.
Hinweise
Für die Filterung muss die Adresse möglichst genau eingegeben werden. Aktuell wird nicht abgefangen, ob es zu einer Adresseingabe mehrere „Fundorte“ bei dem LookUp-Service gibt.
Wird bei der Datenübergabe im Frontendfilter neben der Adresse auch die konkreten Koordinaten übergeben - z. B. mit einer GPS-Bestimmung per JavaScript - sollte bei den LookUp-Services die Auswahl Koordinaten an erster Stelle stehen.
Die Auflösung einer Adresse zu Längen- und Breitengerad bei der Eingabe im Backend ist auch über den LookUp-Service realisierbar - siehe Vortrag zur CK23
In einem weiteren Ausbau der Erweiterung werden die Bezeichnungen Mehrsprachig werden.
Fehler und Hinweise bitte bei Github einpflegen - auch Finanzierungen weiterer Funktionen bzw. der Weiterentwicklung sind willkommen.
Geo-Entfernung
Die Umkreissuche ermittelt die Datensätze, die sich innerhalb eines Umkreises befindet. Möchte man zudem noch wissen,
wie weit die Datenpunkte von der Bezugsadresse entfernt sind, muss man zusätzlich das Attribut „Geo-Entfernung“
installieren. Dieses „virtuelle Attribut“ ist lediglich dafür zuständig, bei einer Filterung per Umkreissuche die
entsprechende Entfernung zu berechnen und den Datensätzen zu übergeben. Der Standardwert des Attributes ist -1
. Die
Ausgabe ist in km.
Attribute anlegen
Die Einstellungen des Attributes sind analog denen der Filterregel - zu beachten ist das Feld „GET-Parameter für Adresse“ dessen Wert identisch mit dem Wert „URL-Parameter“ der Filterregel Umkreissuche sein muss.
GET-Parameter für Adresse: URL-Parameter der Filterregel Umkreissuche
Datenmodus: Multimodus (z. Z. nur Multimodus verfügbar)
Attribute für Breite und Länge: entsprechende Attribute auswählen
Ländervorgabe: Vorgabe ob und wenn ja welches Land der Adresse für die Lookup- Suche hinzugefügt werden soll (z.B. Voreinstellung mit „Deutschland“)
LookUp Services: Auswahl ob Google-Map, OpenStreetMap oder direkte Koordinaten - es können auch mehrere Services angelegt werden; diese werden nacheinander abgearbeitet
Hinweise
Sollen die Ergebnisse in der MM-Liste nach einer Umkreissuche nach der Geo-Entfernung sortiert werden, muss man bei der Option „Sortieren nach“ das Attribut der Geo-Entfernung auswählen sowie Aufsteigend (ASC).
Möchte man die Liste als Standard nach einem anderen Attribut wie Name o. ä. sortiert haben nur bei der Umkreissuche umschalten, muss man das entsprechend konfigurieren. Zunächst muss eine Aktivierung der Checkbox „Überschreiben der Sortierung erlauben“ erfolgen. Damit kann die Sortierung dynamisch angepasst bzw. gewechselt werden.
Dafür kann man z. B. im Template der MM-Liste eine automatische Umleitung einrichten - ob
die Umkreissuche aktiv ist, ermittelt man z. B. über filterParams
mit dem URL-Parameter adresse
1<?php
2if(\array_key_exists('adresse', $this->filterParams) {
3 // Umleitung Sortierung Geo-Abstand (mit Parameter)...
4} else {
5 // Umleitung Sortierung Standardsortierung (ohne Parameter)...
6}
Mehr zu den Sortierungsparametern hier.