Der GoogleMaps-Geocoder ist auch nicht mehr das was er mal war!

Ein Update zu meinem Artikel von neulich: „The Events Calendar“ mit OpenStreetMaps statt Google Maps.

Es hat quasi alles geklappt mit der im Artikel beschriebenen OpenStreetMap. Nur lagen manche Marker und Adressen extrem daneben, z.B. mitten in den USA, westlich von Sardinien im Meer oder auch in Zentralafrika. Dabei liegen die Orte eindeutig im schönen Rheinhessen. Was stimmt hier also nicht?

Das Problem trat sowohl auf der im ersten Artikel beschriebenen Events-Calendar-Seite als auch bei einer anderen WebSite auf, die die Adressen einfach aus einer selbst erstellten Dartenbank holt. Egal was man tut…es ist immer irgendwas nicht ok.

Offensichtlich ist es so, daß der Geocoder von Google Maps (also der Service, der aus einr Adresse Koordinaten macht) in letzter Zeit unzuverlässig geworden ist. Etwa seit Mai 2018, als dort zwingend Kreditkartendaten und strengere Regeln für die Benutzung eingeführt wurden (wieder ein Grund mehr, auf OpenStreetMaps umzustellen).

Deshalb habe ich folgende Lösung programmiert:

  • Ein neues Custom Field erstellt, und „latlng“ genannt.

Dazu muß man rechts oben im WP-Admin auf Optionen gehen und „Benutzerdefinierte Felder“ anwählen. Beim ersten Mal muß man „neues Feld“ auswählen und ihm den Namen „latlng“ geben. Beim nächsten Mal existiert latlng dann schon, das muß man dann in der Liste auswählen.

Links oben den Ort suchen. In der dann erscheindenden Karte die richtige Adresse lokalisieren, dann mit der rechten Maustaste dahin klicken und „Adresse anzeigen“ wählen. Jetzt erscheinen links die Koordinaten. Toll, gell?

  • Die Koordinaten komplett kopieren (etwa „49.7427,8.2378“), mitsamt dem Komma, und in das Feld latlng eintragen. Seite / Beitrag dann speichern.

Adresse stimmt jetzt, jetzt nur noch die Anzeige von Adresse auf Koordinaten umstellen, wenn dieses Feld gefüllt ist.

  • Die in der functions.php vorhandene Funktion, die den [leaflet-map]-Shortcode erzeugt, etwas erweitern.

Ich gehe mal davon aus, daß die Adresse bekannt ist, etwa in der Art oder so ähnlich:

$address .= $strasse." ".$hausnummer.", ".$plz." ".$ort;

dann wäre die Version mit funktionierendem Geocoder z.B. folgende:

$sc  = "[leaflet-map address='".$address."' tileurl='https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png' zoom=14]";
$sc .= ' [leaflet-marker address="'.$address.', DE" '.$icon.']';
$sc .= $address.'[/leaflet-marker]';

muß jetzt geändert werden zu

$latlng = get_post_meta($post->ID, 'latlng');
if ($latlng) {
$latlng = explode(",", $latlng[0]);
$sc = '[leaflet-map lat='.$latlng[0].' lng='.$latlng[1].' tileurl="https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png" zoom=14]';
$sc .= ' [leaflet-marker lat="'.$latlng[0].'" lng="'.$latlng[1].'" '.$icon.']';
$sc .= esc_html($address);
$sc .= '[/leaflet-marker]';
}
else {
$sc = "[leaflet-map address='".$address."' tileurl='https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png' zoom=14]";
$sc .= ' [leaflet-marker address="'.$address.', DE" '.$icon.']';
$sc .= $address.'[/leaflet-marker]';
}

Jetzt stimmts 🙂

6 comments

      1. Hallo,
        ich habe mich durch die Beiträge gekämpft und es mit Ihrer Anleitung geschafft, die OSM Map einzubinden. Allerdings musste ich im Code etwas ändern. Bei mir funktioniert die unten stehende Variante. Also das ist meine gesamte map.php.

        Ich freue mich, das es Menschen gibt, die Ihre Lösungen präsentieren, so das nicht Programmierer wie ich die Möglichkeit haben, das selbst zu schaffen, daher schon mal ein Dickes Danke für diesen Blog.

        Ich würde aber sehr gerne den Link Google Map Karte öffnen ersetzen, oder wenigstens unter der OpenStreet Map, einen Link zum anzeigen der „großen“ Karte haben.

        Gibt es diesbezüglich schon ein Tutorial, ich habe leider nichts dazu gefunden.

        1. Gerne. Ich schreibe halt manchmal was zu den Irrungen und Wirrungen, dich ich als selbständiger WordPress-Guru so erlebe.
          Tutorial gibt es noch keins (von mir), aber einen Link für GoogleMaps könnte man doch sicher erzeugen, in dem man die Lat- und Long-Variablen so zusammenpuzzelt, daß ein Link entsteht, den Google mag. Vielleicht noch den Zoomfaktor dazu.
          Wenn du nicht klarkommst kann ich mich morgen mal damit befassen 🙂

          1. Ich habs so gelöst das ich die adress.php in mein child theme kopiert habe und dort die

            This location’s abbreviated region. Full region name in the element title.
            if ( tribe_get_region( $venue_id ) ) : ?>
            <abbr class="tribe-region tribe-events-abbr" title="“>

            in

            if ( tribe_get_region( $venue_id ) ) : ?>
            <abbr class="tribe-region tribe-events-abbr" title="“>
            <?php
            $latlng = tribe_get_region( $venue_id );
            if ($latlng != '') {
            $latlng = explode(",", $latlng);
            }
            echo 'Link zur Karte öffnen‚;
            ?>

            geändert habe, jetzt zeigt es genau da, wo der Google Karten Link war, den Link zur OSM Map an.
            Allerdings muss man beachten, das ich die GPS Daten in das Feld State/Province kopiert habe und nicht in das Meta wie in Deiner Anleitung.
            So kann ich die GPS Daten über ein Formular über einen Leaflet Marker eintragen und das ganze Event dann als CSV importieren ohne viel Aufwand zu haben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert