Delphi-PRAXiS
Seite 8 von 55   « Erste     678 91018     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Google Maps über COM (Component Object Model) (https://www.delphipraxis.net/157004-google-maps-ueber-com-component-object-model.html)

BBoy 3. Jun 2011 21:13

AW: Google Maps über COM (Component Object Model)
 
ok, dann schaue ich mal nach einer günstigeren oder kostenlosen karte.

Aber wegen Text auf der Map darstellen weis ich nicht wie mir das Events demo weiterhelfen soll.
Wie gesagt, am besten wäre es wenn die markernamen nicht nur angezeigt werden wenn man mit den Mauszeiger darüber geht sondern wenn er immer angezeigt wird. Oder eben wenn man wenigstens ein Textelement an die Marker platzieren könnte.

Thom 3. Jun 2011 22:52

AW: Google Maps über COM (Component Object Model)
 
Dann ist es am günstigsten, jeden Marker mit einem DIV-Element zu versehen, damit die Markierung samt Karte verschoben werden kann.

BBoy 4. Jun 2011 14:50

AW: Google Maps über COM (Component Object Model)
 
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?

BBoy 5. Jun 2011 19:08

AW: Google Maps über COM (Component Object Model)
 
Wie kann ich denn eigentlich erstellte Marker oder PolyObjekte wieder löschen von der Karte?

Thom 7. Jun 2011 11:54

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

Zitat von BBoy (Beitrag 1104580)
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;
Zitat:

Zitat von BBoy (Beitrag 1104580)
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.

Zitat:

Zitat von BBoy (Beitrag 1104725)
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.

BBoy 9. Jun 2011 16:56

AW: Google Maps über COM (Component Object Model)
 
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 :(

Thom 9. Jun 2011 18:24

AW: Google Maps über COM (Component Object Model)
 
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. :glaskugel:

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... :thumb:

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 8-)
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.

BBoy 9. Jun 2011 19:06

AW: Google Maps über COM (Component Object Model)
 
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?

Thom 9. Jun 2011 20:01

AW: Google Maps über COM (Component Object Model)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von BBoy (Beitrag 1105547)
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. :idea:
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.

Zitat:

Zitat von BBoy (Beitrag 1105547)
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.
Zitat:

Zitat von BBoy (Beitrag 1105547)
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.
Zitat:

Zitat von BBoy (Beitrag 1105547)
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. :wink:

BBoy 9. Jun 2011 20:41

AW: Google Maps über COM (Component Object Model)
 
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??


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39 Uhr.
Seite 8 von 55   « Erste     678 91018     Letzte »    

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