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 10. Mär 2012, 09:51
Hallo Peter,

kein Problem! Marker können über das Options-Objekt verschiebbar gemacht werden
Delphi-Quellcode:
var
  Opts: TMarkerOptions;
begin
  with Script do
  begin
    Opts:=TMarkerOptions.Create;
    Opts.Draggable:=true;
    Opts.Animation:=Google.Maps.Animation.Bounce; //<- Animation am Ende des Drag-Vorganges
    Marker:=New(Google.Maps.Marker(Opts));
    Marker.OnStartDrag:=OnStartDrag; //<- Event-Handler, der den Beginn der Verschiebung meldet
    Marker.OnDrag:=OnDrag; //<- Event-Handler während der Verschiebung
    Marker.OnDragEnd:=OnDragEnd; //<- Event-Handler, der das Ende der Verschiebung signalisiert
    [...]
  end;
end;
oder direkt über das Marker-Objekt:
Delphi-Quellcode:
  Marker.SetDraggable(true)
  [...];
OK - da kam meine Antwort zu spät...
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
DelphiFan2008

Registriert seit: 4. Dez 2008
84 Beiträge
 
Delphi XE2 Starter
 
#2

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

  Alt 10. Mär 2012, 13:58
Hallo Thom,

habe meine "Karte" mit einer Skalierung versehen. Momantan bestimme ich die Entfernung mit einer externen Funktion nach der Methode Orthodrome. GPSGetDistance( ) mit folgendem Quelltext.
Delphi-Quellcode:
procedure TForm1.MapZoomAndSized(Sender: TObject);
var
     t : TLatLngBounds;
     x,y : Integer;
     fLat1,fLng1,
     fLat2,fLng2 : Double;
begin
  t := Map.GetBounds;

  fLat1 := t.GetNorthEast.Lat;
  fLng1 := t.GetNorthEast.Lng;
  fLat2 := t.GetSouthWest.Lat;
  fLng2 := t.GetSouthWest.Lng;

  x := Round( GPSGetDistance( 0.0,0.0,fLng1,fLng2 ) );
  y := Round( GPSGetDistance( fLat1,fLat2,0.0,0.0 ) );

  RUx.RightVal := x; // Steuerelement Ruler/Skala in x-Richtung
  RUy.RightVal := y; // Steuerelement Ruler/Skala in y-Richtung
end;
Verknüpft ist MapZoomAndSized() mit Map.OnZoomChanged und Map.OnBoundsChanged

Kann ich die Entfernung (Kartenausschnitt-Breite/Höhe) auch über GoogleMap direkt bestimmen?

Gruß DelphiFan2008
Miniaturansicht angehängter Grafiken
maprulers.jpg  
  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 10. Mär 2012, 21:00
Hallo DelphiFan2008,

die Lineale sehen ja super aus!

Ja, die Breite und Höhe der angezeigten Karte läßt sich auch mit Hilfe des Google Maps API's berechnen. Dazu muß lediglich die Geometrie-Bibliothek eingebunden werden:
Delphi-Quellcode:
  LoadAPI(InitMap,[libGeometry]);
  //oder
  LoadAPIAsync(InitMap,[libGeometry]);
Die Berechnung selbst erfolgt dann über die Funktion ComputeDistanceBetween des Spherical-Objektes:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Width, Height: Double;
  NorthWest: {$IFDEF USE_INTERFACES}ILatLng{$ELSE}TLatLng{$ENDIF};
begin
  with Script do
  begin
    with Maps[0].Bounds do
    begin
      NorthWest:=New(Google.Maps.LatLng(NorthEast.Lat,SouthWest.Lng));
      Width:=Google.Maps.Geometry.Spherical.ComputeDistanceBetween(NorthWest,NorthEast);
      Height:=Google.Maps.Geometry.Spherical.ComputeDistanceBetween(NorthWest,SouthWest);
    end;
  end;
  ShowMessage(Format('Width: %f km, Height: %f km',[Width/1000,Height/1000]));
end;
Code:
NW---------NE
|          |
|          |
|          |
|          |
|          |
SW---------*

NW - NorthWest
NE - NorthEast
SW - SouthWest
Bei dieser Gelegenheit möchte ich einmal einen kleinen Ausblick auf die kommende Version des Frameworks geben:
Eine wichtige Erweiterung - neben vielen anderen Neuerungen - wird die Verwendung von Interfaces sein (siehe obiges Beispiel), so daß eine compilerunterstützte, automatische Freigabe nicht mehr benötigter Objekte zur Verfügung stehen wird. Bisher sollte (mußte aber nicht) das Objekt NorthWest im eigenen Quelltext freigegeben werden. Das wird nach der Umstellung auf Interfaces nicht mehr notwendig sein.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
ReM

Registriert seit: 19. Mär 2012
3 Beiträge
 
#4

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

  Alt 27. Mär 2012, 20:50
I hope you understand english...
I have two groups of markers (red and blue). First group visible permanent. How can I change markers in second group? Remove all, change chosen, change all.
Miniaturansicht angehängter Grafiken
map.png  
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.876 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 27. Mär 2012, 21:00
Use different layers for the groups/background.
Markus Kinzler
  Mit Zitat antworten Zitat
Thom

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

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

  Alt 27. Mär 2012, 22:04
Hi ReM,

use a list for the second group:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  [...]
  private
    FGroup2: TList;
  [...]
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FGroup2:=TList.Create;
end;

procedure TForm1.CreateMarkersFromGroup2;
var
  n: Integer;
  Marker: TMarker;
begin
  with Script do
  begin
    for n:=0 to ... do
    begin
      Marker:=New(Google.Maps.Marker(...));
      FGroup2.Add(Marker);
    end;
  end;
end;

procedure TForm1.HideGroup2;
var
  n: Integer;
begin
  for n:=0 to FGroup2.Count-1 do
    TMarker(FGroup2[n]).SetMap(nil);
end;
Another possibility is to store the markers individually:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  [...]
  private
    FMarker1,
    FMarker2,
    FMarker3,
    ...: TMarker;
  [...]
  end;

procedure TForm1.HideMarker1;
begin
  FMarker1.SetMap(nil);
end;

@mkinzler:

Diese Lösung würde mich interessieren. Soweit mir bekannt ist, rendert Google Maps alle Marker in einen gemeinsamen Layer (DIV-Element) (außer bei KML-Dateien, wobei dann aber keine "echten" Marker erstellt werden).
Wie steuerst Du die Zuordnung eines Markers zu einem bestimmten Layer bzw. "Background"?
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (27. Mär 2012 um 22:07 Uhr)
  Mit Zitat antworten Zitat
ReM

Registriert seit: 19. Mär 2012
3 Beiträge
 
#7

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

  Alt 28. Mär 2012, 16:25
Thanks, Thom.

I get error E2251 Ambiguous overloaded call to 'SetMap'
on line
TMarker(FGroup2[n]).SetMap(nil);

Delphi 2009.
  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: ?&#3636;????? 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 00:41 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