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
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#1

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

  Alt 4. Jun 2011, 14:50
Ist es nicht einfach möglich ein label element an der marker position mit deiner api zu erstellen?

Und wie kann man z.B. Openstreetmap anstatt Google maps nutzen?

Geändert von BBoy ( 4. Jun 2011 um 14:56 Uhr)
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#2

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

  Alt 5. Jun 2011, 19:08
Wie kann ich denn eigentlich erstellte Marker oder PolyObjekte wieder löschen von der Karte?
  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 7. Jun 2011, 11:54
Ist es nicht einfach möglich ein label element an der marker position mit deiner api zu erstellen?
Jain. Erst einmal eine kurze Erklärung zum Veständins: "Mein" API ist kein eigenständiges API, sondern lediglich ein Wrapper für das Google Maps API. Grundsätzlich kann es also weder mehr noch weniger als das JavaScript-API von Google. "Grundlegend" deshalb, weil einerseits aus Zeitgründen noch nicht alle Funktionen und Objekte des JavaScript-API's umgesetzt wurden (das betrifft vor allen Dingen den Teil von Street View), ich aber andererseits etliche Delphi-"Komfortfunktionen" hinzugefügt habe.

Zusätzliche Beschriftungen werden vom Google Maps API nicht explizit unterstützt. JavaScript-Programmierer nutzen für Labels meistens DIV-Container, die im Browser hinzugefügt und - bei Bedarf - mit Markern verknüpft werden. Ein Beispiel dazu habe ich in diesem Blog gefunden. Dadurch werden diese bei der Verschiebung der Karte mehr oder weniger verzögerungsfrei mitgeführt. Das ist aber ein konzeptionelles Problem, welches leider auch der Delphi-Wrapper nicht beseitigen kann.

Die gute Nachricht ist, daß die benötigten DIV-Container vom Framework angelegt werden können:
Delphi-Quellcode:
//...
var
  Container: TDivNode;
begin
  Container:=Script.Document.CreateDivNode;
  with Container.Style do
  begin
    Position:='absolute';
    Bottom:='50px';
    Left:='10px';
    Height:='10px';
    WhiteSpace:='nowrap';
    FontSize:='10px';
    FontFamily:='Arial, sans serif';
    //...
  end;
  //...
end;
Und wie kann man z.B. Openstreetmap anstatt Google maps nutzen?
Eine Verständnisfrage: Meinst Du die Anzeige von Karten aus dem OSM-Projekt im Google Maps Player oder die Darstellung dieser Karten völlig ohne Google Maps API - also zum Beispiel im OpenLayers Player?
Es funktioniert nämlich beides: Der Google Player ist in der Lage, (nahezu) beliebige Karten darstellen. Dazu kann das Objekt ImageMapType verwendet werden.
Für die Nutzung von OpenLayers muß dessen API in Delphi Wrapper umgesetzt werden. Das ist technisch machbar - darüber wurde schon in früheren Beiträgen diskutiert. Ein erster Test verlief recht gut.

Wie kann ich denn eigentlich erstellte Marker oder PolyObjekte wieder löschen von der Karte?
Einfach der Map-Eigenschaft den Wert nil zuweisen:
Delphi-Quellcode:
  Marker.Map:=nil;
  Polygon.Map:=nil;
Damit werden diese Objekte von der Karte entfernt. Die zugehörigen JavaScript-Objekte werden dann vom Browser selbst irgendwann freigegeben und die Delphi-Wrapper-Objekte durch den Programmcode oder bei Beendigung der Anwendung.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#4

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

  Alt 9. Jun 2011, 16:56
Danke für die ausführliche Antwort.
Die Sache mit dem löschen funktioniert 1a

Ich würde eigentlich gerne die onlinemap von Openstreetmap nutzen. Ist das aufwendig zu realisieren? Oder wäre es einfacher die offlinemap zu verwenden?

Und als Label auf der Karte meinte ich eher einfach Text darstellen, egal wie. Möchte einfach nur die Marker nummerieren. Weis aber nicht wie

Geändert von BBoy ( 9. Jun 2011 um 17:33 Uhr)
  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 9. Jun 2011, 18:24
Jetzt hast Du leider immer noch nicht geschrieben, welchen Player Du zur Darstellung der OSM-Karten verwenden willst: Google Maps (damit meine ich nicht die Karten selbst, sondern das Ding, das die Karten anzeigt und für das der Wrapper geschrieben wurde) oder OpenLayers.

Das geht - wie schon geschrieben - mit beidem, ist aber ein Unterschied bei der Programmierung:
  • Mit Google Maps und dem Framework ist es jetzt schon möglich, (fertig gerenderte) Karten aus dem OSM-Projekt anzuzeigen. Da bedeutet aber trotzdem bei kommerziellen Projekten Lizenzkosten an Google, da ja desses API zur Anwendung kommt - auch wenn es fremde Karten sind. Das würde ich zumindest vermuten - ich bin aber kein Rechtsanwalt. Eine Anfrage bei Google würde da Klarheit bringen.
  • Die Wrapper für OpenLayers existieren nur im Ansatz - es würde deshalb eine ganze Weile dauern, dessen API in Delphi nachzubilden. Diese Variante hätte allerdings den Vorteil, ohne Lizenzkosten auszukommen - außer eventuell einer Spende an das OSM-Projekt...

Zur Frage online/offline:
Es kommt darauf an, ob Du nur einen Bereich oder die komplette Karte offline verwenden willst. Davon hängt nämlich die Kapazität Deiner Festplatte ab: In Zoomstufe 15 besteht eine Karte zum Beispiel aus (2^15*256)^2=70.368.744.177.664 Pixeln und ist damit ein Terrapixel-Bild
Eine andere Möglichkeit besteht darin, nur die geometrischen Kartendaten lokal zu speichern und daraus selbst eine Karte zu rendern. Dafür gibt's fertige Lösungen - zum Beispiel Maperitive.

Insofern ist natürlich eine Onlinevariante, die sich einfach die fertigen Kartenteile von den entsprechenden Servern holt, leichter zu realisieren.

Für Marker können auch eigene Bilder verwendet werden und damit auch solche, die zum Beispiel einen Buchstaben oder eine Zahl enthalten. Dafür empfehle ich den Artikel Delphi und Google Maps (Teil 3) in der Toolbox 3/2011, in dem es genau um dieses Thema geht.
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom ( 9. Jun 2011 um 19:08 Uhr)
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#6

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

  Alt 9. Jun 2011, 19:06
Wegen dem Player verstehe ich nicht wirklich was du meinst. Ich nutze einfach deine Api, denke das es dann der google Player ist oder?
Genau genommen geht es mir immer nur um einen kleinen Kartenausschnitt den ich benötige. Vielleicht eine Kleinstadt groß. Aber ich benötige halt immer wieder andere Kartenteile von anderen Orten. Das ganze benötige ich auch nur weil google maps leider nicht kleine wege anzeigt, die mir aber wichtig sind.
Die Garmin Topo 2010 Karten habe ich mir mal gekauft da diese echt die besten sind. da ist jeder kleine Weg drauf und ist voll routingfähig. Da sind lauter .img dateien dabei und eine basemap. Kann man das irgendwie verwenden?
Hast du da ein Idee ob und wie in etwas man so was realisieren könnte?

Wegen den Markern, ich verwende schon eigene Marker die ich mit Google.Maps.MarkerImage einbinde. Diese sollen jedoch dynamisch nummeriert werden. Ich bringe die in eine Reihenfolge und in dieser sollen die dann per buttonklick nummeriert (oder sonst wie benannt) werden. Da es sich auch um mehere verschiedene Marker handelt ist eine feste Nummerierung keine option.
Was gibt es da noch für Möglichkeiten?

Geändert von BBoy ( 9. Jun 2011 um 19:13 Uhr)
  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 9. Jun 2011, 20:01
Wegen dem Player verstehe ich nicht wirklich was du meinst. Ich nutze einfach deine Api, denke das es dann der google Player ist oder?
Ja. Jetzt habe ich das verstanden.
Zur Erklärung: Die Karten sind die eine Seite - die andere das Programm, das die Karten anzeigt. Ich nenne diese einfach allgemein "Player" - in Analogie zu Multimediaplayern wie zum Beispiel Windows Media Player oder DivX Player. Ob es dafür bei Geo-Daten eine einheitliche Bezeichnung gibt, weiß ich nicht. Ich lasse mich da aber gern belehren...
Für Google Maps gibt es offiziell das JavaScript-API (zu dem ich den Wrapper geschrieben habe), das dazu dient, die Karten von Google innerhalb eines Browsers darzustellen und das API für Flash.
Insofern sind die Begriffe API und Player Synonyme für die selbe Sache.

Genau genommen geht es mir immer nur um einen kleinen Kartenausschnitt den ich benötige. Vielleicht eine Kleinstadt groß. Aber ich benötige halt immer wieder andere Kartenteile von anderen Orten. Das ganze benötige ich auch nur weil google maps leider nicht kleine wege anzeigt, die mir aber wichtig sind.
Die Garmin Topo 2010 Karten habe ich mir mal gekauft da diese echt die besten sind. da ist jeder kleine Weg drauf und ist voll routingfähig. Da sind lauter .img dateien dabei und eine basemap. Kann man das irgendwie verwenden?
Die Garmin Karten würde ich aus lizenzrechtlichen Gründen nicht verwenden (hatte ich schon einmal geschrieben).
Allerdings besitzen OSM-Karten teilweise eine bessere Qualität (Genauigkeit, Details) als Google-Karten. Das müßtest Du mal für den Bereich, der Dich interessiert, visuell überprüfen.
Hast du da ein Idee ob und wie in etwas man so was realisieren könnte?
Die Anzeige von OSM-Karten mit dem Google Maps API funktioniert. Im Anhang befindet sich eine Demo, die eigentlich nicht zur Veröffentlichung bestimmt war (deshalb auch nur als compilierte EXE) und mir dazu diente, einige Designstudien vorzunehmen. Aber sie zeigt auch, daß die Verwendung von OSM-Karten kein Problem ist.
Wegen den Markern, ich verwende schon eigene Marker die ich mit Google.Maps.MarkerImage einbinde. Diese sollen jedoch dynamisch nummeriert werden. Ich bringe die in eine Reihenfolge und in dieser sollen die dann per buttonklick nummeriert (oder sonst wie benannt) werden. Da es sich auch um mehere verschiedene Marker handelt ist eine feste Nummerierung keine option.
Was gibt es da noch für Möglichkeiten?
Ja - Toolbox lesen und zugehörige Beispiele ansehen.
Angehängte Dateien
Dateityp: zip OSMandGoogleMaps.zip (996,0 KB, 165x aufgerufen)
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom ( 9. Jun 2011 um 20:21 Uhr)
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#8

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

  Alt 9. Jun 2011, 20:41
Danke für die ausführliche Antwort.
Werde mir die Demos der Toolbox mal ansehen, kaufen werde ich mir die Zeitung aber deswegen nicht

Habe mir die angehängte exe mal angesehen. Diese "Mapnik" Map wäre für mich schon ok (zumindest besser als die google map). Wenn ich jetzt noch wüsste wie ich die in mein Programm bekomme mit deiner Api wäre ich glücklich Hast du da eine Idee??
  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 20:24 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