Nachdem ich mich fast zwei Tage lang mit dem Traffic Layer beschäftigt habe, möchte ich meine Erkenntnisse dazu zusammenfassen.
Die Seite von
Google benutzt mit an Sicherheit grenzender Wahrscheinlichkeit nicht das "offizielle"
API. Muß sie auch nicht - schließlich gehört beides Google. Ersichtlich wird das am etwas abgewandelten
GUI. Die Karten werden zum Beispiel sanft gezoomt (wenn das der Benutzer-PC und seine Internetanbindung zulassen) und können mit einem leichten Schwung verschoben werden.
Mit dem standardmäßigen Traffic Layer des
API's ist es meines Wissens nach leider nicht möglich, eine Verkehrsprognose wie auf der Seite von Google zu erstellen. Wobei meine Tests allerdings ergaben, daß es sich dabei um keine wirkliche Prognose nach dem Motto "Jetzt ist Stau - wie wird es voraussichtlich in einer Stunde aussehen?" handelt, sondern eher um von Google erfaßte statistische Werte, die eine Frage wie "Wie sieht die Stausituation am Autobahnkreuz XYZ freitags 16.30 Uhr aus?" beantworten könnten. Über den Wert einer derartigen Aussage kann man natürlich geteilter Meinung sein. Eine nette Spielerrei ist sie allemal.
Bei Google bin ich auf ein Beispiel bezüglich benutzerdefinierter Layer gestoßen - den sogenannten
Overlay-Kartentypen.
Dort findet sich der interessante Satz:
Zitat:
Solche Kartentypen können transparente Ebenen besitzen, auf denen interessante Orte gekennzeichnet sind oder dem Nutzer zusätzliche Daten angezeigt werden. Die Verkehrsschicht von Google ist ein Beispiel für einen solchen Kartentyp.
Im nachfolgenden Absatz geht es um Bild-Kartentypen, gefolgt von einem Beispiel:
Zitat:
Mit dem folgenden Code wird ein grundlegender ImageMapType implementiert, der die Verkehrskacheln von Google verwendet. Beachten Sie, dass der Kartentyp in das overlayMapTypes-Array der Karte eingefügt wird:
Code:
var trafficOptions = {
getTileUrl: function(coord, zoom) {
return "http://mt3.google.com/mapstt?" +
"zoom=" + zoom + "&x=" + coord.x + "&y=" + coord.y + "&client=google";
},
tileSize: new google.maps.Size(256, 256),
isPng: true
};
var trafficMapType = new google.maps.ImageMapType(trafficOptions);
var map;
function initialize() {
map = new google.maps.Map(document.getElementById("map_canvas"));
map.setCenter(new google.maps.LatLng(37.76, -122.45));
map.setZoom(12);
map.setMapTypeId('satellite');
map.overlayMapTypes.insertAt(0, trafficMapType);
}
Das mit dem Framework nachzubauen, ist kein Problem - nur funktioniert dieses Beispiel leider nicht (mehr), da sich die Server-Adressen und die zu übergebenden Parameter geändert haben.
Nun ist es allerdings kein allzugroßes Problem, die aktuellen
URL's der Bild-Kacheln zu ermitteln.
Damit habe ich das Demoprogramm geändert und kann so - neben dem Traffic Layer über das
API - auch die Verkehrssituation über einen zusätzlichen Layer anzeigen lassen:
Ein Vergleich des Standard Layers mit dem zusätzlichen zeigt einen interessanten Unterschied: Hier wird - wie auf der Google Seite - auch die Verkehrssituation in Frankreich angezeigt:
Beim Standard Traffic Layer werden die Informationen in der Satelliten-Ansicht ausgeblendet:
Im Gegensatz dazu ist die Darstellung im zusätzlichen Layer wesentlich besser steuerbar und entspricht der Ansicht auf der Google Seite:
Die "Verkehrsprognose" funktioniert so natürlich auch, da der Zeitpunkt für die Verkehrskarte als Parameter innerhalb der
URL übergeben wird. Im Anhang befindet sich eine kleine compilierte Demo.
Noch ein kleiner Hinweis zur Aktualität der Verkehrsdaten:
Die Google Server liefern den Wert
Cache-Control: private, max-age=60. Dennoch aktualisieren TWebBrowser und das Maps
API die Bilder nicht zwingend, obwohl es angefordert wurde. Deshalb empfiehlt es sich, ab und zu die Zoomstufe zu verändern, die Karte zu verschieben oder die Ansicht zu wechseln, um den IE dazu zu veranlassen, seinen Cache aufzuräumen.