我正在使用Delphi10.1柏林和SQL1.5.5,我可以成功地显示地图并根据GMLib数据集的数据填充标记。但是,当查询的结果集变得很大时,删除标记可能会相当慢。我认为这在很大程度上是由于LatLng的GeoCoding地址开销造成的。
我想要在输入时GeoCode这些地址,并存储坐标,使其更容易/更快地显示标记。我在我的DataModule中写了一个函数,每当地址改变时(在Post之前),我就对它进行GeoCode。但是例程‘挂起’,因为我不相信映射会被完全初始化(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;提前感谢您的任何建议。
发布于 2017-05-19 06:12:37
问题是,当您调用mGeoCoder.Geocode方法时,可能还没有加载HTML文件。
尝试在AfterPageLoaded事件中使用mGeoCoder组件
procedure AfterPageLoaded(Sender: TObject; First: Boolean);
begin
if First then
begin
TGMMap(Sender).DoMap;
// use here
end;
end;https://stackoverflow.com/questions/44056151
复制相似问题