Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Google Maps API (https://www.delphipraxis.net/153974-google-maps-api.html)

MiniMax 23. Aug 2010 15:40

Google Maps API
 
Hallo Zusammen,
ich weiß das dieses Thema Tausendfach besprochen worden ist, aber ich komme da nicht weiter. Die html Dokumente funktionieren nicht und haben zuviele futures :P

Ich möchte eigentlich nur die Map in 2d und 3d Satteliten bild anzeigenlassen, und mit hilfe von Markern Koordinaten auslesen. Also ich setze mit der maus ein Marker und von dem möchte ich dann die Koordinaten haben --- nun meine Frage:


Hat jemand a) eine funktionierende Html datei (key habe ich) und b) einen Code wie ich diese funktionen realisieren kann?

Danke im Voraus

Grolle 23. Aug 2010 16:19

AW: Google Maps API
 
Hallo,

was hast du denn bisher gemacht? Hast du dir die Beispiele hier mal angeschaut bzw. das Tutorial schon gemacht? Für die v3 braucht man übrigens auch keinen Key mehr.

Viele Grüße ...

MiniMax 23. Aug 2010 16:35

AW: Google Maps API
 
ja aber wie bekomme ich dass in Dlephi? Habe immer nur bsp gesehen mit code ??

franktron 23. Aug 2010 16:38

AW: Google Maps API
 
Zitat:

Zitat von MiniMax (Beitrag 1044396)
ja aber wie bekomme ich dass in Dlephi? Habe immer nur bsp gesehen mit code ??

Warum fragst du Google nicht mal da gabs letztens sogar im DelphiFeed ein Demo einfach nach Google Map Api Delphi suchen und man findet massig.

Grolle 23. Aug 2010 16:39

AW: Google Maps API
 
Hallo,

in Delphi bekommst du das z. B. mit dem TWebbrowser. Tutorial gibt es hier ...

Viele Grüße ...

Edit: Äh roter Kasten ?!

MiniMax 24. Aug 2010 15:51

AW: Google Maps API
 
hey cool danke nun aber noch ne frage: Wie setzte ich mit der maus nen Marker und wie lese ich die koordinaten des Markers dann aus?

Grolle 24. Aug 2010 16:12

AW: Google Maps API
 
Hast du dir das Api überhaupt mal angesehen?: Accessing Arguments in UI Events

MiniMax 24. Aug 2010 16:28

AW: Google Maps API
 
ja das habe ich aber wie bekomme ich die werte in delphi? die müssen ja in eine variable geschrieben werden? Nur wie?

MiniMax 24. Aug 2010 18:44

AW: Google Maps API
 
so nen großeß problem: Habe jetzt versucht den code in delphi 09 zu benutzten aber er zeigt nichts an im Webbrowser??

Kann mir jemand sagen was der fehler ist?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls, ExtCtrls, XPMan, ComCtrls,MSHTML;

type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    CheckBoxTraffic: TCheckBox;
    WebBrowser1: TWebBrowser;
    procedure FormCreate(Sender: TObject);
    procedure CheckBoxTrafficClick(Sender: TObject);
  private
    { Private-Deklarationen }
     HTMLWindow2: IHTMLWindow2;

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses
ActiveX;


{$R *.dfm}


const
HTMLStr: String =
'<html> '+
'<head> '+
'<meta name="viewport" content="initial-scale=1.0, user-scalable=yes" /> '+
'<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> '+
'<script type="text/javascript"> '+
''+
''+
' var geocoder; '+
' var map; '+
' var trafficLayer;'+
' var bikeLayer;'+
''+
''+
' function initialize() { '+
'   geocoder = new google.maps.Geocoder();'+
'   var latlng = new google.maps.LatLng(40.714776,-74.019213); '+
'   var myOptions = { '+
'     zoom: 13, '+
'     center: latlng, '+
'     mapTypeId: google.maps.MapTypeId.ROADMAP '+
'   }; '+
'   map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); '+
'   trafficLayer = new google.maps.TrafficLayer();'+
'   bikeLayer = new google.maps.BicyclingLayer();'+
' } '+
''+
''+
' function codeAddress(address) { '+
'   if (geocoder) {'+
'     geocoder.geocode( { address: address}, function(results, status) { '+
'       if (status == google.maps.GeocoderStatus.OK) {'+
'         map.setCenter(results[0].geometry.location);'+
'         var marker = new google.maps.Marker({'+
'             map: map,'+
'             position: results[0].geometry.location'+
'         });'+
'       } else {'+
'         alert("Geocode was not successful for the following reason: " + status);'+
'       }'+
'     });'+
'   }'+
' }'+
''+
''+
' function GotoLatLng(Lat, Lang) { '+
'  var latlng = new google.maps.LatLng(Lat,Lang);'+
'  map.setCenter(latlng);'+
'  var marker = new google.maps.Marker({'+
'     position: latlng, '+
'     map: map,'+
'     title:Lat+","+Lang'+
' });'+
' }'+
''+
''+
' function TrafficOn()  { trafficLayer.setMap(map); }'+
''+
' function TrafficOff() { trafficLayer.setMap(null); }'+
''+''+
' function BicyclingOn() { bikeLayer.setMap(map); }'+
''+
' function BicyclingOff(){ bikeLayer.setMap(null);}'+
''+
' function StreetViewOn() { map.set("streetViewControl", true); }'+
''+
' function StreetViewOff() { map.set("streetViewControl", false); }'+
''+
''+'</script> '+
'</head> '+
'<body onload="initialize()"> '+
' <div id="map_canvas" style="width:100%; height:100%"></div> '+
'</body> '+
'</html> ';



procedure TForm1.CheckBoxTrafficClick(Sender: TObject);
begin
    if CheckBoxTraffic.Checked then
     HTMLWindow2.execScript('TrafficOn()', 'JavaScript')
    else
     HTMLWindow2.execScript('TrafficOff()', 'JavaScript');
 end;

procedure Tform1.FormCreate(Sender: TObject);
var
  aStream    : TMemoryStream;
begin
   WebBrowser1.Navigate('about:blank');
    if Assigned(WebBrowser1.Document) then
    begin
      aStream := TMemoryStream.Create;
      try
         aStream.WriteBuffer(Pointer(HTMLStr)^, Length(HTMLStr));
         //aStream.Write(HTMLStr[1], Length(HTMLStr));
         aStream.Seek(0, soFromBeginning);
         (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(aStream));
      finally
         aStream.Free;
      end;
      HTMLWindow2 := (WebBrowser1.Document as IHTMLDocument2).parentWindow;
    end;
end;


end.

Grolle 25. Aug 2010 08:35

AW: Google Maps API
 
Hi,

bei mir läufts. Du musst allerdings bei D2009 auch
Delphi-Quellcode:
const
HTMLStr: AnsiString = ...
verwenden.

Viele Grüße ...

MiniMax 25. Aug 2010 10:13

AW: Google Maps API
 
danke ihr seit die besten!!!

MiniMax 25. Aug 2010 16:54

AW: Google Maps API
 
so habe jetztfast alles hinbekommen -- dank euch :thumb:
nun noch ne frage: Wie kann ich einen Marker per klick setzen und dann dieKoordinatenauslesen?

habe den code zwar gefunden, weiß aber net wie ich "location" an delphi übergebe?
Ich bitte nochma um Hilfe

Danke im vorraus

minimax

----------------

Code:
var map;
function initialize() {
  var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
  var myOptions = {
    zoom: 4,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
 
  google.maps.event.addListener(map, 'click', function(event) {
    placeMarker(event.latLng);
  });
}
 
function placeMarker(location) {
  var clickedLocation = new google.maps.LatLng(location);
  var marker = new google.maps.Marker({
      position: location,
      map: map
  });

  map.setCenter(location);
}

Grolle 25. Aug 2010 18:18

AW: Google Maps API
 
Hallo,

habe ich selber noch nie gebraucht, aber schau mal hier ...

Viele Grüße ...

MiniMax 25. Aug 2010 18:45

AW: Google Maps API
 
das bringt mich net weiter :?

Formuliere ich die frage mal anders: Wie kann ich einen Wert aus dem Javascript erhalten?

Grolle 25. Aug 2010 19:10

AW: Google Maps API
 
Hallo,

du musst execScript verwenden, um mit dem TWebBrowser eine JS Funktion auszuführen. Diese kann aber nix an Delphi zurückgeben. Lies dir dazu mal den Absatz auf der oben verlinkten Seite (Getting the Return Value) genauer durch.

Viele Grüße ...

MiniMax 26. Aug 2010 20:05

AW: Google Maps API
 
das war ein guter tipp, aber ich hänge schon wieder:

Es kommt einfach kein wert raus (es soll die gecklickte koordinaten ausgegeben werden):

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls, ExtCtrls, XPMan, ComCtrls,MSHTML;

type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    CheckBoxTraffic: TCheckBox;
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure CheckBoxTrafficClick(Sender: TObject);
    procedure WebBrowser1UpdatePageStatus(ASender: TObject;
      const pDisp: IDispatch; var nPage, fDone: OleVariant);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
     HTMLWindow2: IHTMLWindow2;

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses
ActiveX;


{$R *.dfm}


const
HTMLStr : ansiString =
'<html> '+
'<head> '+
'<input type="hidden" id="result" value="" />'+
'<meta name="viewport" content="initial-scale=1.0, user-scalable=yes" /> '+
'<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> '+
'<script type="text/javascript"> '+
''+
''+
' var geocoder; '+
' var map; '+
' var trafficLayer;'+
' var bikeLayer;'+
''+
''+




' function initialize() { '+
'   geocoder = new google.maps.Geocoder();'+
'   var latlng = new google.maps.LatLng(40.714776,-74.019213); '+
'   var myOptions = { '+
'     zoom: 13, '+
'     center: latlng, '+
'mapTypeControl: true,'+
'   mapTypeControlOptions: {  '+
'     style: google.maps.MapTypeControlStyle.DROPDOWN_MENU '+
'   },'+
'   navigationControl: true,'+
'   navigationControlOptions: { '+
'     style: google.maps.NavigationControlStyle.ZOOM_PAN'+
'   },'+

'     mapTypeId: google.maps.MapTypeId.ROADMAP '+
'   }; '+

'   map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); '+
'   trafficLayer = new google.maps.TrafficLayer();'+
'   bikeLayer = new google.maps.BicyclingLayer();'+
' google.maps.event.addListener(map, "click", function(event) {'+
'   placeMarker(event.latLng);'+
' });'+

' } '+
''+
''+

'function placeMarker(location) { '+
' var clickedLocation = new google.maps.LatLng(location);'+
' var marker = new google.maps.Marker({ '+
'     position: location,'+
'     map: map'+
' });'+
''+
' map.setCenter(location);'+
'document.getElementById("result").value = location;'+
'}'+

''+
''+
' function codeAddress(address) { '+
'   if (geocoder) {'+
'     geocoder.geocode( { address: address}, function(results, status) { '+
'       if (status == google.maps.GeocoderStatus.OK) {'+
'         map.setCenter(results[0].geometry.location);'+
'         var marker = new google.maps.Marker({'+
'             map: map,'+
'             position: results[0].geometry.location'+
'         });'+
'       } else {'+
'         alert("Geocode was not successful for the following reason: " + status);'+
'       }'+
'     });'+
'   }'+
' }'+
''+
''+
' function GotoLatLng(Lat, Lang) { '+
'  var latlng = new google.maps.LatLng(Lat,Lang);'+
'  map.setCenter(latlng);'+
'  var marker = new google.maps.Marker({'+
'     position: latlng, '+
'     map: map,'+
'     title:Lat+","+Lang'+
' });'+
' }'+
''+
''+
' function TrafficOn()  { trafficLayer.setMap(map); }'+
''+
' function TrafficOff() { trafficLayer.setMap(null); }'+
''+''+
' function BicyclingOn() { bikeLayer.setMap(map); }'+
''+
' function BicyclingOff(){ bikeLayer.setMap(null);}'+
''+
' function StreetViewOn() { map.set("streetViewControl", true); }'+
''+
' function StreetViewOff() { map.set("streetViewControl", false); }'+
''+
''+'</script> '+
'</head> '+
'<body onload="initialize()"> '+
' <div id="map_canvas" style="width:100%; height:100%"></div> '+
'</body> '+
'</html> ';


function GetElementIdValue(WebBrowser: TWebBrowser;
  TagName, TagId, TagAttrib: string):string;
var
  Document: IHTMLDocument2;
  Body: IHTMLElement2;
  Tags: IHTMLElementCollection;
  Tag: IHTMLElement;
  I: Integer;
begin
  Result:='';
  if not Supports(WebBrowser.Document, IHTMLDocument2, Document) then
    raise Exception.Create('Invalid HTML document');
  if not Supports(Document.body, IHTMLElement2, Body) then
    raise Exception.Create('Can''t find <body> element');
  Tags := Body.getElementsByTagName(UpperCase(TagName));
  for I := 0 to Pred(Tags.length) do begin
    Tag:=Tags.item(I, EmptyParam) as IHTMLElement;
    if Tag.id=TagId then Result := Tag.getAttribute(TagAttrib, 0);
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage(GetElementIdValue(WebBrowser1, 'input', 'result', 'value'));
end;

procedure TForm1.CheckBoxTrafficClick(Sender: TObject);
begin
    if CheckBoxTraffic.Checked then
     HTMLWindow2.execScript('TrafficOn()', 'JavaScript')
    else
     HTMLWindow2.execScript('TrafficOff()', 'JavaScript');
 end;

procedure Tform1.FormCreate(Sender: TObject);
var
  aStream    : TMemoryStream;
begin
   WebBrowser1.Navigate('about:blank');
    if Assigned(WebBrowser1.Document) then
    begin
      aStream := TMemoryStream.Create;
      try
         aStream.WriteBuffer(Pointer(HTMLStr)^, Length(HTMLStr));
         //aStream.Write(HTMLStr[1], Length(HTMLStr));
         aStream.Seek(0, soFromBeginning);
         (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(aStream));
      finally
         aStream.Free;
      end;
      HTMLWindow2 := (WebBrowser1.Document as IHTMLDocument2).parentWindow;
      //HTMLWindow2.execScript('mode()', 'JavaScript')
    end;


end;


procedure TForm1.WebBrowser1UpdatePageStatus(ASender: TObject;
  const pDisp: IDispatch; var nPage, fDone: OleVariant);
begin
Showmessage(GetElementIdValue(WebBrowser1, 'input', 'result', 'value'));
end;

end.

MiniMax 27. Aug 2010 19:49

AW: Google Maps API
 
fehler gefunden und behoben
sorry für eure bemühungen :-D

Grolle 28. Aug 2010 07:44

AW: Google Maps API
 
Hi,

Zitat:

Zitat von MiniMax (Beitrag 1045603)
fehler gefunden

wo war er denn?

Viele Grüße ...

MiniMax 28. Aug 2010 08:55

AW: Google Maps API
 
ich habe den input der auf hidden steht in den head tag gesetzt und dort kann er nur im visible zustand ausgelesen werden. Nunhabe ich ihn in den body tag gesetzt und evoilla es geht auch im hidden zustand!

Nur nun ne Frage :oops:
Kann man Irgendwie erreichen, wenn ich auf die map klicke, dass dann delphi aktiviert wird (onclick)?

MiniMax 29. Aug 2010 09:39

AW: Google Maps API
 
Keiner ne Idee?

Grolle 29. Aug 2010 11:43

AW: Google Maps API
 
Hi,

kannst du nicht einfach auf WebBrowser1UpdatePageStatus reagieren? Wenn die Variable, die zurrückkommt einen Wert !='' hat deine Delphi-Aktion ausführen?

Viele Grüße ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.

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