我使用Delphi 10.1 Berlin和GMLib 1.5.5我可以成功显示地图并根据SQL数据集中的数据填充标记。但是当我的查询结果集变大时,丢弃标记可能会相当慢。我认为很多这是由于GeoCoding地址进入LatLng的开销 我想在输入时对这些地址进行GeoCode并存储坐标,以便更容易/更快地显示标记。我在DataModule中写了一个函数,在GeoCode地址发生变化时(Post Post)。但例行公事“挂起”了。因为我不相信地图会被完全初始化(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;
提前感谢任何建议。
答案 0 :(得分:0)
问题是当你调用mGeoCoder.Geocode方法时,可能还没有加载HTML文件。
尝试在AfterPageLoaded事件中使用mGeoCoder组件
procedure AfterPageLoaded(Sender: TObject; First: Boolean);
begin
if First then
begin
TGMMap(Sender).DoMap;
// use here
end;
end;