Einzelnen Beitrag anzeigen

Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#105

AW: Google Maps über COM (Component Object Model)

  Alt 21. Jul 2011, 18:49
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:
trafficlayer1.jpg

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:
trafficlayer2.jpg

Beim Standard Traffic Layer werden die Informationen in der Satelliten-Ansicht ausgeblendet:
trafficlayer3.jpg

Im Gegensatz dazu ist die Darstellung im zusätzlichen Layer wesentlich besser steuerbar und entspricht der Ansicht auf der Google Seite:
trafficlayer4.jpg

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.
Angehängte Dateien
Dateityp: zip TrafficLayer1.zip (858,7 KB, 127x aufgerufen)
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat