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.

img_attribute_01

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

img_filter_01

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.

img_fe-filter_01

In der Frontend-Ausgabe sollte nun ein Filter mit zwei Eingabemöglichkeiten zu sehen sein, mit denen die Liste gefiltert werden kann.

img_fe-filter_02

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.