Einzelnen Beitrag anzeigen

manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#212

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

  Alt 13. Apr 2012, 08:43
Hallo Thom

Bin Momentan deine wirklich sehr guten Beispiele am anschauen und ein wenig am testen.
Für meine Anwendung müsste ich aus mehreren Datensätzen <100 die GPS Lat Lng auslesen ( sind z.T. schon vorhanden ) und diese auf der Karte darstellen.

Momentan erhalte ich immer die Fehlermeldung: OverQueryLimit
Es ist mir nicht ganz klar wie ich dies beeinflussen kann.

Momentan verwende ich folgenden Code um die Daten darzustellen:
Delphi-Quellcode:
procedure Tfrm_map.btn_Batch_GeocodeClick(Sender: TObject);
begin
  while not DM_map.Map.eof do
  begin
    Geocoder.Geocode(TGeocoderRequest.Create(Address.Text),GeocoderCallback);
  end;
end;
Delphi-Quellcode:
procedure Tfrm_map.GeocoderCallback(Sender: TObject; Results: TGeocoderResultArray; Status: String);
var
  MarkerOptions: TMarkerOptions;
begin
  with Script do
  begin
    if Status=Google.Maps.GeocoderStatus.OK then
    begin
      var_lelat:= FloatToStr(Results[0].Geometry.Location.lat);
      var_lelng:= FloatToStr(Results[0].Geometry.Location.lng);
    // only for debug
      POS_LAT.Text := var_lelat;
      POS_LNG.Text := var_lelng;
    //
      Maps[0].SetCenter(Results[0].Geometry.Location);
      MarkerOptions:=TMarkerOptions.Create;
      with MarkerOptions do
      begin
        Map:=Self.Map;
        Position:=Results[0].Geometry.Location;
      end;
      New(Google.Maps.Marker(MarkerOptions));
    end else ShowMessage('Geocode was not successful for the following reason: '+Status);
  end;
end;
Um die GPS Daten zu erhalten verwende ich dies:
Delphi-Quellcode:
procedure Tfrm_map.btn_Encode_batchClick(Sender: TObject);
var
  LatLng: TLatLng;
  Lat, Lng: String;
  Request: TGeocoderRequest;
begin
  while not DM_map.Map.eof do
  begin
    with Script do
    begin
      Lat:=DM_map.Map.FieldByName('POS_LAT').AsString;
      Lng:=DM_map.Map.FieldByName('POS_LNG').AsString;
      LatLng:=Google.Maps.LatLng(StrToFloatDef(Lat,0,'.'),
                                 StrToFloatDef(Lng,0,'.'));
      Request:=TGeocoderRequest.Create;
      Request.Location:=LatLng;
      Geocoders[0].Geocode(Request,Encode_GeocoderCallback);
    end;
  end;
end;
Delphi-Quellcode:
procedure Tfrm_map.Encode_GeocoderCallback(Sender: TObject; Results: TGeocoderResultArray; Status: String);
var
  MarkerOptions: TMarkerOptions;
begin
  with Script do
  begin
    if Status=Google.Maps.GeocoderStatus.OK then
    begin
      Maps[0].SetCenter(Results[0].Geometry.Location);
      MarkerOptions:=TMarkerOptions.Create;
      with MarkerOptions do
      begin
        Map:=Self.Map;
        Position:=Results[0].Geometry.Location;
      end;
      New(Google.Maps.Marker(MarkerOptions));
    end else ShowMessage('Geocode was not successful for the following reason: '+Status);
  end;
end;
Danke auf jeden Fall das Du diese Komponente zur Verfügung stellst.
Manfred
  Mit Zitat antworten Zitat