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