Einzelnen Beitrag anzeigen

manfred_h

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

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

  Alt 4. Jul 2013, 14:59
Hallo Thom

seit einiger Zeit setzt ich Deine super Komponente in einer freien Software ein.
Habe aber leider Probleme eine Geocode Funktion zu erstellen.

Das Problem ist das die Rückmeldung von Tfrm_map.GeocoderCallback erst kommt wenn
if DM.gpsdata_validate(var_lelat, var_lelng)=true then dies schon aufgerufen wurde.
Was ich nicht weiss ist wie warte ich bei diesem Aufruf
Geocoder.Geocode(TGeocoderRequest.Create(Address.Text),GeocoderCallback); auf Antwort und mache erst dann weiter.

Habe auch schon eine ganze weile im Forum nach einer Möglichkeit gesucht...

Bin Dankbar für Tipps oder wonach ich im Forum suchen könnte.

Shalom
Manfred

Delphi-Quellcode:
procedure Tfrm_test.btn_geocodeClick(Sender: TObject);
begin
  if POS_LAT.Field.Text = 'then
  begin
    frm_map.Address.Text:= CITY.Field.DisplayText +', '+ STR.Field.DisplayText;
    frm_map.btn_GeocodeClick(Sender);
  end
  else
  case MessageDlg('Would you like to update the GPS-Data?', mtConfirmation, [mbYes, mbNo], 0)
  of
    mrYes:
    begin
      frm_map.Address.Text:= CITY.Field.DisplayText +', '+ STR.Field.DisplayText;
      frm_map.btn_GeocodeClick(Sender);
    end;
    mrNo:
    begin
      abort;
    end;
  end;
  if DM.gpsdata_validate(var_lelat, var_lelng)=true then
  begin
    DM_hotel.hotel.Edit;
    POS_LAT.Field.Text := var_lelat;
    POS_LNG.Field.Text := var_lelng;
    DM_hotel.hotel.Post;
  end;
end;
Delphi-Quellcode:
procedure Tfrm_map.btn_GeocodeClick(Sender: TObject);
begin
  Geocoder.Geocode(TGeocoderRequest.Create(Address.Text),GeocoderCallback);
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
      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));
      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;
    //
    end else ShowMessage('Geocode was not successful for the following reason: '+Status);
  end;
end;
  Mit Zitat antworten Zitat