AW: Google Maps über COM (Component Object Model)
Hi Thom.
Thank you very much for your work. :thumb: Tell me how to add waypoint in the DirectionsRequest(TDirectionsRequest)? Thanks! |
AW: Google Maps über COM (Component Object Model)
@BBoy:
Gib mit bitte etwas Zeit: Ich werde versuchen, eine Lösung zu posten. @movnet: Thank you! :-D This is with version 1.1 of the framework unfortunately not possible. If you give me your email address via PM I will send you an updated version and an example. |
AW: Google Maps über COM (Component Object Model)
Hey Thomas
Hätte nochmal ne Frage zum Overlay. Hab das so geändert wie dus geschrieben hattest, dann funktioniert es auch, aber sobald ich die NE oder SW Bounds änder geht es nicht mehr. Würde gern folgendes haben:
Delphi-Quellcode:
Wäre super wenn du mir helfen kannst.
Center:=Google.Maps.LatLng(55.00,6.00); //Kartenmittelpunkt
.... NEBound:=Google.Maps.LatLng(55.00,6.00); //nord-östliche Overlayecke SWBound:=Google.Maps.LatLng(53.00,9.00); //süd-westliche Overlayecke Bounds:=Google.Maps.LatLngBounds(SWBound,NEBound); //Overlaybegrenzung SrcImage:='C:\1.jpg'; USGSOverlay.Create(Bounds,SrcImage,Map); Danke Christoph |
AW: Google Maps über COM (Component Object Model)
Hallo Christoph,
Wow: Google Maps reagiert ja da recht bösartig... :lol: Das liegt aber daran, daß Du das Overlay-Bild auf der nördlichen Halbkugel unterbringen willst und dort muß der Breitengrad der nord-östlichen Ecke größer sein, als der der süd-westlichen. Sonst hat das Rechteck quasi eine "negative" Höhe und damit scheinen die Entwickler des API's nicht zu rechnen... Also mußt Du nur die Zahlen vertauschen:
Delphi-Quellcode:
Damit sollte es funktionieren.
NEBound:=Google.Maps.LatLng(55.00,9.00); //nord-östliche Overlayecke
SWBound:=Google.Maps.LatLng(53.00,6.00); //süd-westliche Overlayecke Viele Grüße Thomas |
AW: Google Maps über COM (Component Object Model)
Hey Thomas
Stimmt natürlich da hab ich net dran gedacht! Danke! Kann man das Overlay auch irgendwie halb transparent machen? So dass man die halb durchsehen kann? Ist png da wieder die einzige lösung? Christoph |
AW: Google Maps über COM (Component Object Model)
Hallo Thom,
Die GoogleMaps-Benutzung von Delphi aus ist das beste, das ich bisher hierzu gefunden habe. Ich habe aber auf meinen Computern aber auch das Goggle-Earth-Plugin installiert. Von jedem Webbrowser mit GoogleMaps kann man nun auf den 3D-View Earth umschalten. Wie kann man mit der hier vorgestellten Delphi-Lösung diese Schaltfläche mit Earth anzeigen lassen, um in den 3D-Mode umzuschalten? mit freundlichen Grüssen Peter |
AW: Google Maps über COM (Component Object Model)
Hallo Christoph,
soweit mir bekannt ist, unterstützt das Google Maps API die Transparenz bzw. Opazität nur bei kompletten Layern, die von (T)ImageMapType abgeleitet wurden, aber nicht bei Overlays. Aber mit einem tiefen Griff in die Trickkiste geht es doch:
Delphi-Quellcode:
Hallo Peter,
procedure USGSOverlay.OnAdd;
begin [...] ImageNode.Style.Width:='100%'; ImageNode.Style.Height:='100%'; ImageNode.Style.Filter:='Alpha(opacity=50)'; //<- Opazität in % [...] end; vielen Dank für das Lob! :-D Hmmm... Google Earth... Ich hatte das Plugin einmal auf meinem Rechner installiert - dann aber wieder auf Grund des penetranten und aggressiven Updaters wieder deaktiviert. Deshalb habe ich das Google Earth API bisher auch noch nicht getestet. Eine Ein- bzw. Anbindung an das Framework wäre technisch sicherlich machbar (siehe Diskussion zur Realisierung eines OpenLayer-Frameworks einige Seiten weiter vorn). Aber: Durch die Experimente mit den verschiedenen JavaScript-API's weiß ich jetzt ungefähr, was meiner Meinung nach zu einem derartigen Player/Viewer gehört und habe auch etliche Stellen gefunden, mit denen ich nicht so glücklich bin (zum Beispiel verliert OpenLayers den Focus, wenn der Cursor den Bereich verläßt oder auch nur über ein integriertes Steuerelement bewegt wird; Google Maps ist dagegen wesentlich träger als OpenLayers). Deshalb habe ich aufgehört, JavaScript-API's einfach nur nachzubauen und arbeite seit einiger Zeit an einer nativen Delphi-Lösung. Damit wird die Abhängigkeit von einem Browser-ActiveX beendet (ein wichtiger Schritt in Richtung plattformübergreifende Nutzung) und durch den Übergang von einer Skript- (JavaScript) zu einer compilierten Sprache die Darstellung um den Faktor 5 bis 10 beschleunigt. Und so ganz nebenbei werden dann auch Tricks wie der mit der Transparenz von Bildern (siehe oben) überflüssig. |
AW: Google Maps über COM (Component Object Model)
Hey Thom
Super Vielen Dank! Christoph |
AW: Google Maps über COM (Component Object Model)
Gern geschehen! :thumb:
|
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 2)
So - nach längerer Zeit aus aktuellem Anlaß wieder einmal eine kleine Demo zum Thema Events:
Anhang 34483 Rodrigo hat nämlich auf Anfrage ein neues Tutorial unter dem Titel Using the Google Maps API V3 from Delphi – Part III Getting the latitude and longitude of a mouse click erstellt, das ich auch einmal unter Verwendung des Frameworks umgesetzt habe. Damit komme ich wieder vollkommen ohne JavaScript- und HTML-Code aus, kann JavaScript-Ereignisse auf Delphi-Methoden umleiten und Werte direkt übergeben/übernehmen. Dadurch reduziert sich der Umfang des Quellcodes im Vergleich zu Rodrigos Variante um fast die Hälfte:
Delphi-Quellcode:
Zusätzlich habe ich seine Demo um die Auswertung und Anzeige der aktuellen Cursorposition auf der Karte (Map.OnMouseMove) erweitert.
procedure TForm1.FormShow(Sender: TObject);
var Map: TMap; begin [...] Map:=Google.Maps.Map(Document.GetElementById('div_map'),Options); //Karten-Objekt anlegen Map.OnClick:=MapClick; //Ereignishandler Map.OnMouseMove:=MapMouseMove; //-"- end; procedure TForm1.MapClick(Sender: TObject; MouseEvent: TMouseEvent); var Options: TMarkerOptions; begin with FScript do begin Options:=TMarkerOptions.Create; //Options-Objekt für den Marker anlegen with Options do begin Position:=MouseEvent.LatLng; //Markerposition Map:=Maps[0]; //Karte, auf der der Marker angezeigt werden soll Title:=MouseEvent.LatLng.ToUrlValue; //Hinweis, wenn Maus über dem Marker Icon:=Format('http://www.google.com/mapfiles/kml/paddle/%d-lv.png', [Markers.Count mod 10+1]); //Icon mit einer Nummer zwischen 1 und 10 end; Google.Maps.Marker(Options); //Marker-Objekt anlegen end; with ListView1.Items.Add do //Marker-Position in die Liste eintragen begin Caption:=FloatToStr(MouseEvent.LatLng.Lng); SubItems.Add(FloatToStr(MouseEvent.LatLng.Lat)); MakeVisible(false); end; end; procedure TForm1.MapMouseMove(Sender: TObject; MouseEvent: TMouseEvent); begin Latitude.Text:=FloatToStr(MouseEvent.LatLng.Lat); Longitude.Text:=FloatToStr(MouseEvent.LatLng.Lng); end; Der komplette Quellcode befindet sich im Anhang: |
AW: Google Maps über COM (Component Object Model)
Hey Thom
Hätte noch ne kleine Frage zu den Overlays ;-) Ist es möglich ein Overlay wieder zu löschen oder zu verschieben? Hab darüber leider nichts gefunden :-( Schöne Grüße Christoph |
AW: Google Maps über COM (Component Object Model)
Hallo Christoph,
Ja, das geht - wenn auch wieder nur über die Trickkiste. :lol: Leider bietet (T)OverlayView keine Methode oder Eigenschaft, um die Größe oder Position des Overlays zu beeinflussen. Schaut man sich allerdings TUSGSOverlay aus der Demo SimpleOverlay an, kann man feststellen, daß in der Methode OnAdd ein DIV-Container erstellt wird, der das Overlay-Bild aufnimmt und dessen Größe und Position in der Methode Draw an die gewünschten Koordinaten angepaßt wird. Die erste Möglichkeit besteht also darin, den DIV-Container einfach auf der Karte an die gewünschte Stelle zu verschieben. Bei der zweiten Möglichkeit wird das Overlay mit
Delphi-Quellcode:
von der Karte entfernt, worauf die Methode OnRemove aufgerufen wird. Anschließend wird das Overlay einfach wieder der Karte zugeordnet
Overlay.SetMap(TMap(nil));
//...
Delphi-Quellcode:
, worauf wieder OnAdd und Draw durchlaufen werden und damit die Möglichkeit besteht, das Overlay an einer anderen Stelle zu positionieren.
Overlay.SetMap(Map);
//... |
AW: Google Maps über COM (Component Object Model)
Hey Thom
Super deine Trickkiste!!!! Habs aber irgendwie nicht hinbekommen. :-(
Delphi-Quellcode:
geht gar nicht weil er das nicht kennt
Overlay.SetMap(Map);
Delphi-Quellcode:
bringt folgenden error:
Overlay.SetMap(Map);
[Error] Unit1.pas(366): This form of method call only allowed for class methods Könntest du vielleicht nen kurzes beispiel schreiben auch mit dem DIV-Container? Nur wenns nicht zuviel aufwand ist ;-) Vielen Dank Christoph |
AW: Google Maps über COM (Component Object Model)
Ich staune auch immer wieder, was da alles drin ist... :lol:
Noch ein kleiner Tip: Wenn Du das Overlay öfters aus- und wieder einblendest, wäre es eventuell sinnvoll, das Abräumen der Delphi-Wrapper für die DIV-Elemente von der Destroy- in die OnRemove-Methode zu verlegen:
Delphi-Quellcode:
Machst Du das nicht, produzierst Du zwar dank der Aufräum-Automatik des Frameworks keine Speicherlecks - dafür packst Du Dir aber den Hauptspeicher unnötig voll.
destructor TUSGSOverlay.Destroy;
begin //FDivNode.Free; <- hier und //FImageNode.Free; <- hier weg inherited; end; procedure TUSGSOverlay.OnRemove; begin Variant(DivNode.ParentNode).RemoveChild(DivNode.Disp); FDivNode.Free; //<- und dafür hier FImageNode.Free; //<- und hier hin end; OK. Veränderte Demo SimpleOverlay:
Delphi-Quellcode:
TForm1 = class(TForm)
//... private FMap: TMap; //<- neu FOverlay: TOverlayView; //<- neu //... public //... property Map: TMap read FMap write FMap; //<- neu property Overlay: TOverlayView read FOverlay write FOverlay; //<- neu end; procedure TForm1.FormShow(Sender: TObject); var //Map: TMap; <- hier entfernen //... begin //... Overlay:=TUSGSOverlay.Create(Bounds,SrcImage,Map); //<-Overlay in Variable speichern end; procedure TForm1.Button1Click(...) begin Overlay.SetMap(TMap(nil)); //<- Overlay von der Karte entfernen -> OnRemove wird aufgerufen Overlay.SetMap(Map); //<- Overlay wieder einblenden -> OnAdd und Draw werden aufgerufen end; |
AW: Google Maps über COM (Component Object Model)
Hey Thom
Vielen dank aber es gibt immernoch Fehler aber ich suche morgen nochmal :-) Christoph |
AW: Google Maps über COM (Component Object Model)
Wenn's morgen nicht klappt: Ich kann auch noch mal meine veränderte Demo SimpleOverlay posten, wenn es Dir hilft. An der hatte ich das Ein- und Ausblenden des Overlays gerade getestet.
|
AW: Google Maps über COM (Component Object Model)
Das wär super, hab wahrscheinlich irgendwas vergessen ;-)
Danke Christoph |
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 2)
Ok. Da ist sie.
Ist nicht schön: Einfach nur ein Button über die Karte geklebt - demonstriert aber das Aus- und Einblenden eines Overlays...:lol: Anhang 34504 Ich habe die Demo doch noch etwas "schöner" gemacht: Jetzt ist der Button zum Aus- und Einblenden des Overlays an der richtigen Stelle und über zwei Schieberegler können sogar Opazität und horizontale Verschiebung der Overlays beeinflußt werden. 8-) |
AW: Google Maps über COM (Component Object Model)
Hey Thom
Jetzt gehts! Super! Christoph |
AW: Google Maps über COM (Component Object Model)
Prima - meistens hilf es wirklich, mal eine Nacht über ein Problem zu schlafen...
|
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen,
da ja seitens Google jetzt auch die Verkehrsinformationen für Deutschland zur verfügung stehen, stellt sich für mich jetzt die Frage, ob es mit dem Framework auch möglich ist, den Layer einzublenden der es ermöglicht den Verkehr nach Tag und Uhrzeit vorauszusagen? Viele Grüße duff |
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 3)
Ich habe mir die Seite von Google gerade mal angeschaut.
Der aktuelle Verkehr wird in einem TrafficLayer angezeigt. Um diesen anzuzeigen, ist nur eine einzige Zeile im Quelltext nötig:
Delphi-Quellcode:
Dabei wird ein TrafficLayer-Objekt erstellt (TTrafficLayer für Delphi und ein entsprechendes TrafficLayer-Objekt in JavaScript) und anschließend der Karte zugewiesen, auf dem die Anzeige erfolgen soll.
//...
Google.Maps.TrafficLayer.SetMap(Map); Das Ergebnis sieht dann folgendermaßen aus: Anhang 34724 So weit - so gut. Die Verkehrsprognose scheint im selben Layer dargestellt zu werden. Nun habe ich die Vermutung, daß das Abrufen dieser Daten nicht über dokumentierte API-Funktionen geschieht (das wäre nicht das erste Mal) - zumindest habe ich (bisher) nichts dazu gefunden. Da hilft nur, die genutzen JavaScripte zu untersuchen, denn alles das, was mit JavaScript möglich ist, läßt sich auch im Framework umsetzen. Ich werde mir das einmal anschauen - wird aber eine kleine Weile dauern. |
AW: Google Maps über COM (Component Object Model)
Hallo Thom,
danke für die Info. Aber wie bekomme ich den Layer wieder von der Karte?
Delphi-Quellcode:
hat nicht das gewünschte Ergebniss :?
//...
Google.Maps.TrafficLayer.SetMap(Nil); Viele Grüße |
AW: Google Maps über COM (Component Object Model)
Ja - das ist klar: Mit dieser Zeile legst Du ein neues Layer-Objekt an und zeigst dieses nicht an.
Das ist ein Nebenprodukt des Frameworks, daß man (fast) wie mit JavaScript programmieren kann: Ein Objekt einfach anlegen und anschließend nicht mehr daran denken... :lol: Besser ist natürlich der Delphi-Stil:
Delphi-Quellcode:
type
TForm1 = (...) private FTrafficLayer: TTrafficLayer; procedure HideTrafficLayer; [...] end; procedure TForm1.Show(...); begin [...] with TScript.Create(WebBrowser1) do begin [...] FTrafficLayer:=Google.Maps.TrafficLayer; //Layer anlegen und merken FTrafficLayer.SetMap(Map); //Layer anzeigen end; end; procedure TForm1.HideTrafficLayer; begin FTrafficLayer.SetMap(nil); //Layer ausblenden end; |
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 5)
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:
Zitat:
Code:
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.
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); } 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: Anhang 34735 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: Anhang 34736 Beim Standard Traffic Layer werden die Informationen in der Satelliten-Ansicht ausgeblendet: Anhang 34737 Im Gegensatz dazu ist die Darstellung im zusätzlichen Layer wesentlich besser steuerbar und entspricht der Ansicht auf der Google Seite: Anhang 34738 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. |
AW: Google Maps über COM (Component Object Model)
|
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo duff,
vielen Dank für Deinen Hinweis! Google's Wettervorhersage scheint - genau wie die Stauanzeige - nicht über das dokumentierte API zu laufen. Trotzdem bekommt man das auch mit dem Framework hin. Bindet man die Wettersymbole als zusätzlichen Layer ein, stört allerdings die Beschriftung der eigentlichen Karte ganz enorm, da damit die Darstellung schnell unübersichtlich wird: Anhang 34951 Werden spezielle Karten verwendet, bei denen die Beschriftung reduziert ist, wird sogar die Wolkenverteilung sichtbar: Anhang 34952 Im Anhang befindet sich eine kompilierte Demo, die die Wetterkarte etwa so zeigt, wie auf der Maps-Seite von Google. |
Darstellung von Wetterdaten
Liste der Anhänge anzeigen (Anzahl: 5)
In diesem Beitrag möchte ich eine Demo vorstellen, die es ermöglicht, Wetterinformationen, die über das - nicht dokumentierte - Google Weather API abgerufen werden können, mit Hilfe des Frameworks darzustellen.
Anhang 34973 Diese Demo ist allerdings - im Gegensatz zu allen bisherigen - nur mit unicode-fähigen Delphi-Versionen (also ab 2009) kompilierbar. Besitzer älterer IDE's müßten die Anpassungen selbst vornehmen. Das hat nichts mit dem Framework zu tun, sondern mit den zu verarbeitenden Wetterdaten. Google Weather API ist eigentlich eine vollkommen übertriebene Bezeichnung: Es handelt sich lediglich um eine URL, über die mit Hilfe zweier Parameter eine XML Datei abgerufen werden kann:
Code:
http://www.google.com/ig/api?weather=[LOCATION]&hl=[LANGUAGE]
Code:
liefert eine XML-Datei mit folgender Struktur:
http://www.google.com/ig/api?weather=Berlin&hl=de
Code:
Diese Datei enthält - neben den aktuellen Daten - sogar eine Vorhersage für die nächsten drei Tage.
<?xml version="1.0"?>
<xml_api_reply version="1"> <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0"> <forecast_information> <city data="Berlin, Berlin"/> <postal_code data="Berlin"/> <latitude_e6 data=""/> <longitude_e6 data=""/> <forecast_date data="2011-08-24"/> <current_date_time data="2011-08-24 09:50:00 +0000"/> <unit_system data="SI"/> </forecast_information> <current_conditions> <condition data="Klar"/> <temp_f data="73"/> <temp_c data="23"/> <humidity data="Luftfeuchtigkeit: 78*%"/> <icon data="/ig/images/weather/sunny.gif"/> <wind_condition data="Wind: W mit 11 km/h"/> </current_conditions> <forecast_conditions> <day_of_week data="Mi."/> <low data="21"/> <high data="30"/> <icon data="/ig/images/weather/mostly_sunny.gif"/> <condition data="Teils sonnig"/> </forecast_conditions> <forecast_conditions> <day_of_week data="Do."/> <low data="23"/> <high data="29"/> <icon data="/ig/images/weather/chance_of_storm.gif"/> <condition data="Vereinzelt stürmisch"/> </forecast_conditions> <forecast_conditions> <day_of_week data="Fr."/> <low data="19"/> <high data="32"/> <icon data="/ig/images/weather/sunny.gif"/> <condition data="Klar"/> </forecast_conditions> <forecast_conditions> <day_of_week data="Sa."/> <low data="14"/> <high data="21"/> <icon data="/ig/images/weather/chance_of_rain.gif"/> <condition data="Vereinzelt Regen"/> </forecast_conditions> </weather> </xml_api_reply> Im Abschnitt xml_api_reply\weather\xxx_conditions\icon ist in der Regel sogar der Link zu einem Icon angegeben, so daß sich die Anzeige dieses Bildes als Marker anbietet. Leider enthalten die Abschnitte xml_api_reply\weather\forecast_information\latitud e_e6 und xml_api_reply\weather\forecast_information\longitu de_e6 keine Angaben, so daß die Koordinaten für den Marker erst über eine Geocoding-Abfrage ermittelt werden müssen. Die programmtechnische Umsetzung ist relativ einfach: Die XML-Datei wird mit Hilfe eine TIdHTTP-Komponente abgefragt und über eine TXMLDocument-Komponente geparst. Der Gebrauch des Geocoders und das Hinzufügen von Markern wurde schon in früheren Demos gezeigt. Dabei ist lediglich zu beachten, daß die Eigenschaft CharSet des Request-Objektes auf UTF-8 zu setzten ist
Delphi-Quellcode:
, damit der Google-Server die XML-Datei auch wirklich in der gewünschten Sprache liefert.
IdHTTP1.Request.CharSet:='UTF-8';
//... Damit ist es zum Beispiel möglich, das Wetter für Frankfurt am Main in hebräischer Anhang 34974 für München in russischer Anhang 34975 oder für Graz in thailändischer Sprache anzeigen zu lassen: Anhang 34976 Interessant ist das Sonnensymbol links unten in Frankreich: Hier wurde als Sprache japanisch (ja) gewählt. Wahrscheinlich sieht die Sonne in Japan anders aus, als im Rest der Welt... :lol: Im Quelltext der Demo wird noch ein weiterer Weg beschrieben: Bei einem Klick mit der linken Maustaste auf die Karte wird (falls vorhanden) die Wetterinformation für diesen Punkt abgefragt und angezeigt. Der zugehörige Ort wird über Reverse Geocoding ermittelt. |
AW: Google Maps über COM (Component Object Model)
KLASSE :thumb:
|
AW: Google Maps über COM (Component Object Model)
Echt tolles Projekt. Planst du auch die Unterstützung von Bing Maps? Bing Maps WPF Control
Viele Grüße, Florian |
AW: Google Maps über COM (Component Object Model)
Florian und duff,
vielen Dank! :-D Eine Bing-Unterstützung wird es ebenso geben wie die Nutzung von OpenStreetMap-Karten. Allerdings nicht im Rahmen dieses Projektes, da das immer vom Internet Explorer abhängig ist und durch dessen JavaScript-Engine nicht gerade mit Warp-Geschwindigkeit arbeitet. Deshalb habe ich schon seit einigen Wochen parallel dazu einen Karten-Viewer in Arbeit, der nativ in Delphi geschrieben ist und neben der Karten-Anzeige noch etwas mehr zu bieten hat - so zum Beispiel die Anzeige von Giga- und Terrapixel-Bildern. Schon jetzt ist diese Komponente um den Faktor 5 bis 10 schneller als der Zugriff über JavaScript-API's. Durch die Abkopplung vom IE-ActiveX und dem neuen Compiler von XE2 ist eine plattformübergreifende Nutzung geplant. |
AW: Google Maps über COM (Component Object Model)
Klingt sehr interessant! Freu mich schon, mehr davon zu hören.
|
AW: Google Maps über COM (Component Object Model)
Wow,
das hört sich wirklich sehr interessant an. Freue mich schon den Karten-Viewer in Aktion zu sehen. Wirklich toll und bitte weiter so :wink: |
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 3)
Vielen Dank!
In diesem Zusammenhang einige weitere Neuigkeiten: Seit einigen Tagen (24. August 2011) gibt es die Version 3.6 des API's von Google Maps. Seit diesem Zeitpunkt werden standardmäßig anklickbare Punkte (Point Of Interest - POI) auf den Karten angezeigt: Anhang 35051 Das ist aber nicht in jedem Fall erwünscht. Um diese Punkte wieder von der Karte verschwinden zu lassen, nutzt man am besten das TMapTypeStyles-Objekt. Dieses befindet sich in Version 1.1 des Frameworks in der Unit gmOverlays. Die Nutzung ist recht einfach:
Delphi-Quellcode:
Und schon sind die POI's nicht mehr zu sehen:
type
TMapOptionsAccess = class(TMapOptions); procedure TForm1.FormShow(Sender: TObject); var Options: TMapOptions; Styles: TMapTypeStyles; begin [...] //Script-Objekt anlegen und Seite vorbereiten Styles:=TMapTypeStyles.Create; with Styles.AddStyle do begin FeatureType:='poi'; ElementType:='labels'; AddStyler.Visibility:='off'; end; Options:=TMapOptions.Create; //Options-Objekt anlegen with Options do begin [...] //Initialisierung end; TMapOptionsAccess(Options).SetProp('styles',Styles.Disp,true); //<- Style zusätzlich in den Optionen übergeben [...] //Karte anlegen end; Anhang 35052 Diese Vorgehensweise ist nur eine Zwischenlösung. Damit möchte ich die Version 1.4 des Frameworks ankündigen (Version 1.2 gab es als Download zu einer Toolbox-Ausgabe und 1.3 habe ich nur per Email verschickt). Darin stehen - neben Bugfixes - einige große Neuerungen an: Vollständige Unterstützung des Google Maps API's bis zur aktuellen Version einschließlich der Nutzung von Bibliotheken:
Desweiteren wird Delphi XE2 unterstützt. Demo zum Ausblenden von POI's mit Frameworkversion 1.1: |
AW: Google Maps über COM (Component Object Model)
Du meinst Delphi XE2 :zwinker:
|
AW: Google Maps über COM (Component Object Model)
Danke DeddyH, Du hast natürlich vollkommen Recht. :oops:
Ich habe gerade in den News, gelesen, daß TMS software auf den Delphi-Tagen in Köln drei neue Produkte vorstellen will - unter anderem eine Google Maps Komponente für Delphi. Eine Anfrage bezüglich des Preises wurde wie folgt beantwortet: Zitat:
*für nichtkommerzielle Anwendungen |
AW: Google Maps über COM (Component Object Model)
@Thom,
wäre auch schade wenn sich was an der Situation/Randbedingung deines Frameworks etwas ändern würde. Ich warte momentan auf den Key für den Download von Delphi XE2 Starter. Bin gespannt ob sich das Framwork nahtlos in die Umgebung einbinden läßt. Die fruchtbare Diskussion im Forum und deine Programmierkünste werden das Nötige dazu beitragen ... :lol: Gruß DelphiFan2008 |
AW: Google Maps über COM (Component Object Model)
Ist in der angekündigten Version 1.4 eigentlich auch schon die verwendung von Openstreetmaps vorgesehen?
Das wäre ja auch noch ein entscheidender Vorteil gegenüber der TMS Komponente. |
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DelphiFan2008,
die Nutzung von Version 1.1 unter XE2 (32 Bit) sollte funktionieren - Du mußt Dir nur eine aktuelle jedi.inc besorgen, die den XE2-Compiler erkennt oder selbst Hand anlegen. Ich bin dabei, die Compilererkennung selbst zu schreiben, um die Abhängigkeit von Jedi wegzubekommen. Das Projekt soll natürlich auch in Zukunft unter den selben Bedingungen zu Verfügung stehen. Allerdings würde ich mich freuen, wenn es mehr ehrliche Programmierer gäbe, die bei kommerziellen Gebrauch des Frameworks (das betrifft zum Beispiel schon eine innerbetriebliche Nutzung) auch zu einer finanziellen Unterstützung des Projektes bereit wären. 8-) Für die neue Version sitze ich zum Beispiel schon seit knapp drei Wochen in Vollzeit am Computer. Schwerpunkt ist dabei neben den angekündigten Features auch eine XML-Hilfe, die - dank integriertem Documentation Insight bei XE2 - auch in der IDE nutzbar ist. In diesem Zusammenhang auch noch einmal ein großes Dankeschön nach Australien an AndreFM und nach Shanghai an Paul von DevJET, die mir schon vor einem halben Jahr eine Lizenz von Documentation Insight gespendet hatten. So sieht das dann ungefähr aus: Anhang 35110 Für die Käufer der XE2 Starter Edition gibt es allerdings eine bittere Pille: Dort ist laut Feature-Matrix Documentation Insight leider nicht enthalten. Alles andere bekommen wir gemeinsam hin! :-D Hallo duff, OSM funktioniert schon seit Version 1.3 des Frameworks. Hast Du diese schon (ich habe jetzt gerade keine Zeit, meine Email-Liste durchzugehen)? Ich könnte Dir auch den Quelltext zur Einbindung dieser Karten zukommen lassen, falls Du Interesse hast. |
AW: Google Maps über COM (Component Object Model)
Hallo Thom,
wo bekomme ich am einfachsten die aktuelle Version von jedi.inc für XE2? Gruß DelphiFan2008 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz