Einzelnen Beitrag anzeigen

Thom

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

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

  Alt 7. Jun 2011, 12: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