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.