Parametrisierbare Googlemap (gelöst)
Ich habe ein eigenes Modul mit einer Tabelle Unternehmen tl_companies . Diesen Unternehmen sind Mitglieder aus tl_members zugeordnet: also 1:n Beziehung. Die Adresse des Stamsitzes des Unternehmens ist in tl_companies angegeben.
Jetzt würde ich gerne dlh_googlemaps nutzen, um bei der Anzeige eines Unternehmens eine Karte anzuzeigen, wo der Stammsitz des Unternehmens ist. Ich will nicht alle Unternehmen sondern genau dieses eine anzeigen.
Natürlich könnte ich jetzt für 800 Unternehmen jeweils eine eigene Google-Map anlegen. Und jedes Mal, wenn ein Unternehmen dazukommt wieder eine Map.
Das muss sich aber automatisieren oder parametrisieren lassen.
Wie kann man dynamisch aus der Adresse des Unternehmens mit dlh_googlemaps zum Zeitpunkt des Aufrufs eine Map erstellen? Dafür muss eine dlh_googlemaps genügen und die muss halt über Parameter die jeweilige Adresse mitbekommen.
Ich programmiere selbst, habe aber zur Zeit dafür keinerlei Idee. Wer hat eine Idee oder weiß sogar, wie es geht?
Gruß, Janis
neue Datensätze regelmäßig geokodieren
Zitat:
Zitat von
christian
Moin, kein Problem: Leg eine Map mit der passenden Größe, Zoomfaktor etc an und binde sie in die Seite ein, die die Datensätze zeigt. Im Template Deines Datensatzes lässt Du einen JS-Block ausgeben, der das Kartenzentrum verschiebt und einen Marker setzt.
Bespiel siehe im Modulverzeichnis.
Grüße,
Christian
Hat bestens funktioniert! Habe dazugelernt. Javascript kann man ja wirklich überall einbauen. Werde es direkt in mein selbst geschriebenes Modul einbauen.
Zwei Fragen noch:
1. Frickelt Google häufig an der Schnittstelle (API) oder bleiben die so weit es geht abwärtskompatibel. Habe halt keine Lust, dass in Contao mal Maps und wenige Wochen später wieder Fehler angezeigt werden.
2. Geocodierung
Ich will 600 Adressen in einer Tabelle geocodieren und dann laufend, wenn neue Adressen dazukommen. Kannst Du aus dem Stehgreif den nötigen Befehl für Googlemaps ApiV3 zaubern?
PHP-Code:
<?PHP
// Wie ich die Adresse per SQL aus der Tabelle bekomme weiß ich.
$strasse = "Bahnhofstr. 40";
$plz = "51674";
$ort = "Wiehl";
$adresse = "$plz $Ort, $strasse";
$laengengrad = googleabfrage($adresse); // Wie lautet die ...
$breitengrad = googleabfrage($adresse); // ... korrekte Abfrage ???
// Wie ich die Geokoordinaten per SQL wieder in die Tabelle bekomme weiß ich.
?>
Ich denke, ich muss das Rad nicht neu erfinden - Du weißt wie es geht. (?)
Und ich würde es, wenn es irgendwie geht gerne mit PHP erledigen, da ich das kann.
Gruß
Janis
Geokodierung ... nah am Ziel
Den Vorschlag (eins höher) habe ich aufgegriffen und auch versucht, auf die Core-Klasse Request umzubiegen - die Methoden habe ich in Funktionen umgewandelt, weil ich nicht so fit bin in OOP:
PHP-Code:
<?PHP
// x.php
$addr = 'Bahnhofstr. 40, 51674 Wiehl';
$latLng = getFirstLocationsGeo($addr);
var_dump($latLng); // (1)
function getLocations($query)
{
$req = new Request();
return $req->send('http://maps.google.com/maps/geo?q='.urlencode($query).'&output=json'); // ? $req->response : ''; // (3)
}
function getFirstLocationsGeo($query) {
$json = getLocations($query);
var_dump($json); // (2) nur zum Testen.
$loc = json_decode($json, true);
if(count($loc) > 0) {
return $loc['Placemark'][0]['Point']['coordinates'];
}
return false;
}
?>
Ich binde den php-code per {{file::x.php}} über ein Inhaltselement html ein.
Leider kommt das gewünschte Ergebnis nämlich die Geokoordinaten bei (1) nicht heraus. Keine Fehlermeldungen.
Bei (1) kommt heraus: bool(false)
bei (2): NULL
Gebe ich den http-Aufruf (3) direkt als URL ein erhalte ich eine wunderschöne Auflistung des Ergebnisses. Zum Ausprobieren:
Code:
http://maps.google.com/maps/geo?q=Bahnhofstr.+40%2C+51674+Wiehl&output=json
Es kann nur ein winziger Fehler sein ... nur welcher?
Janis