0

我正在使用 Delphi 10.1 Berlin 和 GMLib 1.5.5 我可以成功地显示地图并根据 SQL 数据集的数据填充标记。但是当我的查询的结果集变大时,删除标记可能会相当慢。我认为这在很大程度上是由于地理编码地址到 LatLng 的开销。
我想在输入时对这些地址进行地理编码并存储坐标,以便更容易/更快地显示标记。我在我的 DataModule 中编写了一个函数,以便在地址更改时(在发布之前)对地址进行地理编码。但是例程“挂起”,因为我不相信地图会完全初始化(TGMMap.DoMap)

这是我的功能:

procedure GeoCodeAddress(var coords: TLatLng; Address: String);
Var  mMap : TGMMap;
     mBrowser : TWebBrowser;
     mGeoCoder : TGMGeoCode;
begin
     mBrowser := TWebBrowser.Create(Nil);
     mBrowser.Silent := True;
     mMap := TGMMap.Create(Nil);
     mMap.APIKey := GMapsAPIKey;
     mMap.AfterPageLoaded := AfterPageLoaded;
     mMap.WebBrowser := mBrowser;
     mMap.Active := True;
     //mMap.DoMap;
     mGeoCoder := TGMGeoCode.Create(Nil);
     mGeoCoder.Map := mMap;
     mGeoCoder.Geocode(Address);
     if mGeoCoder.GeoStatus = gsOK Then
       Begin
        Coords.Lat := mGeoCoder.GeoResult[0].Geometry.Location.Lat;
        Coords.Lng := mGeoCoder.GeoResult[0].Geometry.Location.Lng;
       End;
     mGeoCoder.Free;
     mMap.Free;
     mBrowser.Free;
end;

procedure AfterPageLoaded(Sender: TObject; First: Boolean);
begin
  if First then
      TGMMap(Sender).DoMap;
end;

在此先感谢您的任何建议。

4

1 回答 1

0

问题是当您调用 mGeoCoder.Geocode 方法时,可能尚未加载 HTML 文件。

尝试在 AfterPageLoaded 事件中使用 mGeoCoder 组件

procedure AfterPageLoaded(Sender: TObject; First: Boolean);
begin
  if First then
  begin
    TGMMap(Sender).DoMap;

    // use here
  end;
end;
于 2017-05-18T22:12:36.883 回答