AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Google Maps über COM (Component Object Model)
Thema durchsuchen
Ansicht
Themen-Optionen

Google Maps über COM (Component Object Model)

Ein Thema von Thom · begonnen am 23. Dez 2010 · letzter Beitrag vom 22. Mai 2022
Antwort Antwort
Thom

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

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

  Alt 7. Jan 2011, 14:07
@DelphiFan2008,

vielen Dank! Da macht die Arbeit doch gleich viel mehr Spaß!

In den letzten Tagen sind noch weitere Demos entstanden und das Framework wurde weiterentwickelt.

Beispiel 7
Nutzung des Routenplaners und Anzeige des berechneten Weges

demo_7.jpg

Compilierte Exe:
Angehängte Dateien
Dateityp: zip Directions.zip (292,8 KB, 579x aufgerufen)
Thomas Nitzschke
  Mit Zitat antworten Zitat
Thom

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

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

  Alt 7. Jan 2011, 14:37
Beispiel 8
Animation eines Markers und Ermittlung des Höhenprofils entlang eines Pfades

In dieser Demo wurde Ayers Rock gewählt, da sich an diesem Beispiel das ermittelte Höhenprofil gut nachvollziehen läßt.
Um einen Pfad zu erstellen, muß einfach auf zwei Punkte innerhalb der Karte geklickt werden - empfehlenswert natürlich jeweils ein mal auf entgegengesetze Punkte des Felsens.
Bei jedem dieser beiden Klicks wird ein verschiebbarer Marker erstellt. Wurde der zweite Marker gesetzt, wird zwischen den beiden ein Pfad erzeugt (Polyline) und vom Google-Server das Höhenprofil entlang des Pfades abgefragt.
Die Antwort erfolgt wie immer asynchron und wird in der entsprechenden Delphi-Methode ausgewertet. Die Höhendaten werden dabei in einer Stringliste gespeichert. Das würde natürlich genauso gut über ein Array mit Double-Werten gehen.
Grafisch wird das Höhenprofil in einer PaintBox dargestellt.

Über den Schieberegler läßt sich ein dritter Marker zwischen dem Anfang- und dem Endpunkt des Pfades verschieben.

demo_8.jpg

Compilierte Exe:
Angehängte Dateien
Dateityp: zip MarkerAnimation.zip (293,9 KB, 207x aufgerufen)
Thomas Nitzschke

Geändert von Thom ( 9. Jan 2011 um 14:33 Uhr)
  Mit Zitat antworten Zitat
Thom

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

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

  Alt 9. Jan 2011, 14:31
Beispiel 9
Interaktion zwischen zwei Karten innerhalb verschiedenen Browser-Komponenten

Innerhalb einer Browser-Komponente können problemlos mehrere Karten untergebracht werden, die sowohl das selbe Google Maps API als auch die selben JavaScript-Objekte nutzen.
Was ist aber, wenn die Karten in verschiedenen TWebBrowser-Komponenten untergebracht werden sollen? Dann sind nämlich einige Regeln zu beachten, damit alles wie erwartet funktioniert und es zu keinen JavaScript-Fehlern kommt (auch COM-Fehler werden teilweise als JavaScript-Fehler gemeldet, da es sich hierbei um COM-Zugriffe auf die Script-Engine des Browsers handelt).

Wurde bis jetzt immer mit einem Skript-Objekt gearbeitet, muß jetzt für jede verwendete Browser-Komponente ein eigenes erstellt werden:
Delphi-Quellcode:
  Script1:=TScript.Create(WebBrowser1);
  Script2:=TScript.Create(WebBrowser2);
Bei der Erstellung von Objekten muß außerdem immer das Skript-(COM-)Objekt angegeben werden. Bei allen über das Google Maps API erstellten Objekten ist dies automatisch der Fall:
Delphi-Quellcode:
  Map1:=Script1.Google.Maps.Map(...);
  Map2:=Script2.Google.Maps.Map(...);
Werden aber andere Strukturen, wie zum Beispiel Arrays, einfache Objekte oder davon abgeleitet Klassen - wie zum Beispiel TMapOptions - direkt erstellt, muß in ihrem Konstruktor der Skriptkontext angeben werden, in dem die Erstellung erfolgen soll:
Delphi-Quellcode:
  //MapOpts wird in WebBrowser1 erstellt:
  Script1:=TScript.Create(WebBrowser1);
  MapOpts:=TMapOptions.Create(Script1);
In den meisten Fällen wird sicherlich mit einer Browser-Komponente gearbeitet. Dann kann der optionale Skript-Parameter im Konstruktor des zu erstellenden Objektes weggelassen werden und vom Framework wird automatisch ein globales Skript-Objekt verwendet (Variable Script in der Unit JScriptObjects).

Ein Beispiel:
Die Karte 2 soll das selbe Zentrum wie Karte 1 haben, wobei sich beide Karten in unterschiedlichen Browser-Komponenten befinden.
Delphi-Quellcode:
  Map2.Center:=Map1.Center;
  //-> JavaScript-Fehlermeldung
Diese Zuweisung führt zu einem JavaScript-Fehler, da es sich bei den Koordinaten um ein (T)LatLng-Objekt handelt, das nicht einfach von WebBrowser1 an WebBrowser2 übergeben werden kann. Genauer gesagt: Wie in Delphi wird nicht das gesamte Objekt übergeben, sondern nur ein Zeiger (eine Referenz) auf dieses Objekt. Das funktioniert natürlich nicht, da die beiden COM-Server (Browser-Komponenten) nicht ohne weiteres aufeinander zugreifen können.

Als Lösung bietet sich die Erstellung eines neuen Objektes im Kontext von WebBrowser2 an mit anschließender Übertragung der Eigenschaften. Das würde in Delphi etwa einem Assign entsprechen. Im Falle der Übertragung eines LatLng-Objektes könnte das so ablaufen:
Delphi-Quellcode:
  Map2.Center:=Script2.Google.Maps.LatLng(Map1.Center.Lat,Map1.Center.Lng);
  //...
demo_9.jpg

Compilierte Exe:
Angehängte Dateien
Dateityp: zip MultiMaps.zip (278,3 KB, 204x aufgerufen)
Thomas Nitzschke

Geändert von Thom ( 9. Jan 2011 um 14:35 Uhr)
  Mit Zitat antworten Zitat
alibaba

Registriert seit: 18. Okt 2009
3 Beiträge
 
#4

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

  Alt 11. Mai 2012, 19:44
Hallo.

Erst mal großes Lob und Danke für das Framework,
beschäftige mich erst ein paar Tage damit aber läuft toll !

Habe hier Delphi 6 auf XP mit IE 8, wobei aber anscheinend der IE8 die
Krücke ist, delphichromiumembedded läuft auch mit Delphi 6 wie ne 1.

Hat jemand einen Tip für mich wie ich das Framework mit delphichromiumembedded zum laufen
bekommen könnte der Geschwindigkeitsunterschied würde mich interessieren ?

lg
Albert
  Mit Zitat antworten Zitat
Thom

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

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

  Alt 11. Mai 2012, 20:26
Hallo Albert,

vielen Dank für das Lob!

Inwiefern gibt es Probleme mit dem Internet Explorer ActiveX?
Auf meinem Entwicklungsrechner arbeite ich ohne Probleme mit XP und dem IE8. Auch auf einem Netbook läuft Google Maps mit akzeptabler Geschwindigkeit. Allerdings habe ich auch feststellen müssen, daß mit jeder neuen Version das API etwas zäher wird - das liegt einfach auch am ständig zunehmenden Funktionsumfang. Außerdem sitzen die Jungs/Mädchen von Google wahrscheinlich an schnelleren Kisten... Und JavaScript bleibt nun mal JavaScript.

Um auf Deine Frage zu antworten: Das Framework arbeitet ausschließlich mit dem IE. Sollen andere Browser unterstützt werden, ist der Zugriff über COM nicht geeignet und Du müßtest andere Komponenten benutzen. Die wichtigsten mir bekannten sind im ersten Beitrag aufgelistet. TECMap unterstützt Chromium Embedded. Auf Anfrage schickt Dir der Entwickler auch gern eine Demo-Komponente zu. Damit könntest Du dann einen Vergleich zwischen den Browsern machen.

Möchtest Du einen Geschwindigkeitsvergleich beim IE zwischen der von allen Komponentenentwicklern genutzen Exec-Methode zur Ausführung von JavaScript und dem direkten Zugriff über COM, so ist die von diesem Framework verwendete Methode etwa doppelt so schnell. Das liegt daran, daß das Parsen und Ausführen des JavaScript-Codes entfällt.
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (12. Mai 2012 um 10:42 Uhr)
  Mit Zitat antworten Zitat
fduenas

Registriert seit: 9. Mär 2011
5 Beiträge
 
#6

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

  Alt 19. Mai 2012, 18:40
Thomas:
Are planning some day to port your component to be uses to intraweb or annother web solution for delphi?
  Mit Zitat antworten Zitat
Thom

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

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

  Alt 19. Mai 2012, 20:05
Hi fduenas!

IntraWeb: Probably not. The documentation of IntraWeb is unfortunately very bad. And buy source code for the development of a freeware component is currently too expensive to me.

Other web solutions: At which do you think?

Currently I am working on version 3 of the framework. Then I will proceed with the development of a solution without Internet Explorer or another browser components. So may be a cross-platform application would be possible.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
DELPHI | (google maps) This thread Refback 11. Nov 2011 09:07
Twebbrowser HTML tag to UniHTMLFrame1 - uniGUI Discussion Forums This thread Refback 4. Nov 2011 06:52
DoraDev1975: google maps This thread Refback 23. Sep 2011 08:18
delphi osm - Google Search Post #0 Refback 19. Sep 2011 09:02
DoraDev1975: ?ิ????? 2011 This thread Refback 11. Sep 2011 16:39
DoraDev1975 This thread Refback 30. Aug 2011 10:13
Untitled document This thread Refback 25. Jun 2011 19:57
Interact with Google Maps in a TWebBrowser from Delphi | Ramblings This thread Refback 26. Jan 2011 05:12
google maps mit delphi link - Google Search This thread Refback 24. Jan 2011 14:24
google maps mit delphi - Google Search This thread Refback 24. Jan 2011 14:20
Untitled document This thread Refback 19. Jan 2011 21:49

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz