openstreetmap mit tt_address Daten und Kategorien

Ziel ist es eine Karte mit Daten aus tt_address zu generieren, bei der die einzelnen Datensätze kategorisiert sind, entsprechend unterschiedliche Icons bekommen und die Kategorien ein- bzw. ausgeblendet werden können.

Zunächst installiert man über den Erweiterungsmanager die Extensions OpenStreetMap ods_osm und OpenStreetMap for tt_address ods_osm_tt_address.

Im Erweiterungsmanager nimmt man dann folgende Konfigurationen für ods_osm vor:
Autocomplete longitude and latitude: On every address change
Use service to find coordinates: http://nominatim.openstreetmap.org/
Default country: DE

Gesetzt, dass es bereits Adressdaten (Straße, Hausnummer, PLZ, Ort) gibt, müssen zunächst die Geokoordinaten für diese Adressen ermittelt werden. Die Extension bringt, etwas versteckt, diese Funktion mit und zwar unter dem Module „Funktionen“.

Im Sysordner mit den Adressen legt man nun für jede Kategorie einen Datensatz vom Typ OpenStreetMap / Marker an


und vergibt einen Namen und eine Grafik.

Im Kategoriedatensatz gibt es beim Reiter „Zugriff“ die Möglichkeit, diesen Marker mit der entsprechenden Kategorie zu verbinden.

Ist das geschehen ist, legt man den Inhaltsdatensatz „Openstreetmap“ an. Folgende Einstellungen kann man machen:

Markierungen anzeigen: hier wählt man „Seite“ und zwar die mit den Adressdaten.
Programm: Leaflet.
Hat man diese Einstellung getroffen, verändert sich die Anzeige und es erscheint oben, unterhalb von „Markierungen anzeigen“:
Markierungen bündeln: jaaaa, ist sehr cool – die berühmten Cluster.
Breite: z.B. 100%
Höhe: z.B. 560px
Hauptebene: Mapnik
Popups anzeigen: Click
Ebenenumschalter anzeigen: Geöffnet

Einiges davon kann man auch über den Konstantenmanager setzen; diese Angaben überschreiben die Einträge in der Flexform.

Fehlt noch die Konfiguration dessen, was in der Bubble angezeigt werden soll – standardmäßig ist das nur der Name. Hier das TS dafür:

temp.daten {
    table = sys_category
    select {
        pidInList = 12 # pid des Sysordners mit den Adressen und Kategorien     
        selectFields = sys_category.*
        join = sys_category_record_mm ON sys_category_record_mm.uid_local = sys_category.uid
        where.data = field:uid
        where.intval = 1
        where.wrap = sys_category_record_mm.uid_foreign=|      
    }      
    renderObj = TEXT
    renderObj {
    field = title
    wrap = |
   }
}
tt_aplugin.tx_odsosm_pi1.popup {
    tt_address {
        10 = TEXT
        10.field = name
        10.wrap = | <br>
        20 = TEXT
        20.field = address
        20.wrap = | <br>
        30 = TEXT
        30.field = zip
        30.wrap = | & nbsp;
        40 = TEXT
        40.field = city
        40.wrap = | <br><br>
        50 = TEXT
        50.field = email
        50.typolink.parameter.field = email
        50.wrap = E - Mail: & nbsp; | <br>
        50.required = 1
        60 = TEXT
        60.field = phone
        60.wrap = Telefon: & nbsp; | <br>
        60.required = 1
        70 = TEXT
        70.value = mehr Infos
        70.typolink.parameter.field = www
        70.fieldRequired = www
        70.wrap = |<br />
        80 < temp.daten
    }
}

Die Angabe bei 70 ist so zu verstehen, dass es Detailseiten der Adressdaten gibt, die als Unterseiten angelegt sind. Hier werden in diesem Beispiel also nicht die Webseiten der Personen verlinkt. 80 dient dazu, die Kategorie anzuzeigen. Ist ja nur ein Beispiel.

Im Prinzip ist das die nötige und funktionierende Konfiguration. Falls die Daten nicht wie gewünscht angezeigt werden, hilft evtl. folgendes:
– Überprüfen, ob die Geokoordinaten korrekt berechnet wurden. Wenn das nicht der Fall ist und die Felder leer geblieben sind, muss man die Adresse korrigieren und / oder den Datensatz zunächst ausblenden.
– Wenn die hinterlegten Grafiken nicht angezeigt werden und die Auswahl der Kategorien nicht wie gewünscht rechts oben erscheint, so kann das verschiedene Ursachen haben. Bei meinen Tests hat es irgendwann funktioniert – in der Zwischenzeit habe ich einige Einstellungen im Plugindatensatz geändert, gespeichert, wieder geändert, wieder gespeichert, Cache gelöscht, Adressdatensätze versteckt, wieder eingeblendet usw.
– Beim Abspeichern eines Datensatzes erscheint diese Fehlermeldung:

1: These fields of record 14 in table "tt_address" have not been saved correctly: longitude, latitude! The values might have changed due to type casting of the database.

Die Felder Latitude und Longitude aber dennoch mit Geodaten gefüllt. Grund für die Fehlermeldung ist, dass tt_address im TCA eine andere Definition für dieses Feld verwendet als ods_osm. Spielt aber für das Funktionieren keine Rolle.

Übrigens, die Auswahl http://nominatim.openstreetmap.org bei „Use service to find coordinates“ ist der Tatsache geschuldet, dass geonames.org Zugangsdaten verlangt und außerdem in der kostenlosen Version lediglich die PLZ Geodaten ermittelt.

Dank an Robert Heel für die Extension und wertvolle Hinweise, ebenso an Jan Bartels für den Tipp bezüglich der Anzeige der Kategorien in der Bubble. In diesem Zusammenhang ist auch dieser Beitrag interessant.