我正在使用 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;
在此先感谢您的任何建议。