Nutzung von Google Maps in Symfony mit Hilfe von Gmapper
Wie bereits vorab geschrieben, habe ich in meinem Abschluß u. a. auch mit der Darstellung von GPS-Koordinaten zu tun. Angedacht war dabei, dies mit Hilfe der Google Maps API zu erledigen. Auch wenn diese Idee inzwischen aufgrund der hohen Lizenzgebühren verworfen wurde (dazu weiter unten mehr), führte ich in diesem Zusammenhang schon Test durch, wie sich die API am besten in unser bestehendes Framework einbinden lässt.
So nutzen wir bei uns in der Firma Symfony für die interne Wartung, in der auch die zu entwickelnde GPS-Anwendung integriert werden sollte. Ein Punkt der auch schon für Google Maps sprach, war derjenige, dass es bereits eine PHP-Klasse zu vereinfachten Anwendung der Funktionen gab: Gmapper. Durch die Hilfe von Gmapper bleibt die Grundanwendung letztlich relativ sauber und vieles ist besser anpassbar. Auch soll Gmapper zusätzliche Funktionen enthalten.
Aber gut, kommen wir zur Integration in Symfony, welche sich dann ein wenig kompliziert darstellt. So ist es in Symfony so, dass man ein Grundlayout hat, welches dann durch eine entsprechende View ergänzt wird. Im Regelfall passt man also dann nur die View an, was aber hier nicht ausreichen sollte. So muss für Google Maps zunächst eine zusätzliche Javascript-Datei eingebunden werden, die einen API-Key benötigt (erhält man bei Google) und direkt von einem Google-Server geladen wird.
Dazu reicht im Symfony theoretisch auch eine Zeile:
$this->getResponse()->addJavaScript( Datei );
Auch in Gmapper gibt es nach der Deklaration des Objekts mit Hilfe des API-Keys eine Funktion, die den benötigten Javascript Code erzeugt:
$apikey = sfConfig::get('app_google_apikey');
$gmap = new gmap($apikey);
$gmap->headjs();
Wenn alles toll wäre, müsste also folgendes reichen:
$this->getResponse()->addJavaScript( $gmap->headjs() );
Leider aber wird in der Gmapper-Klasse immer direkt alles per Echo ausgegeben, was ich nicht gerade für so günstig halte. Letztlich habe ich mich daher an dieser Stelle dazu entschieden, die Gmapper ein wenig an meine Bedürfnisse anzupassen. So sieht meine headjs-Funktion nun so aus:
function headjs($key = "")
{
if (!$key) {
$key = $this->key;
}
if ($key) {
return "http://maps.google.com/maps?file=api&v=2&key=$key";
} else {
return false;
}
}
Gmapper gibt also jetzt nur noch die URL an die Anwendung zurück, die dann in Symfony eingebunden wird. Ich halte es so für die beste Variante, auch wenn es sicherlich auch anders gegangen wäre.
So hätte man die URL theoretisch auch direkt in die view.yml des Symfony-Moduls schreiben können, allerdings hätte man dabei einen fest gecodeten API-Key dort einsetzen müssen, wodurch man bei einer möglichen Änderung des Key diesen zweimal hätte ändern müssen. Wie oben zu sehen, habe ich aber den Key auch direkt in die app.yml ausgelagert und über entsprechende Funktionen abgefragt, so dass dies schon dieser Lösung entgegen stehen würde.
Nun auch noch mal zu meinem Kommentar oben, dass meine Lösung nun doch nicht auf Google Maps basieren wird. Der Grund ist relativ simpel, denn Google möchte für Anwendungen im Intranet, die nicht öffentlich zugänglich sind, Lizenzgebühren für die Nutzung von Google Maps. Die Kosten starten dabei bei 10.000 Euro/Jahr, was schlichtweg zu teuer sein dürfte.
Im Moment bin ich aber noch bei der Analyse von Alternativen, wo sich im Moment auch Map24 als Favorit hervorgetan hat. Ich erwarte hier nur noch einen Rückruf, der mich dann darüber aufklären wird, wie die Lizenzgebühren bei Google einzuordnen sind, denn auch bei Map24 ist die API für interne Anwendungen nicht kostenlos. Ich werde über die Alternativen zu Google Maps auch noch ausführlich berichten, sobald ich da alle Informationen zusammen habe.
Ähnliche Beiträge
Filed under: Entwicklung
Trackback: Trackback-Url

Tote Hose aber nen 3er Pagerank