首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在非可视组件上使用GMLib进行地理编码

在非可视组件上使用GMLib进行地理编码
EN

Stack Overflow用户
提问于 2017-05-19 03:17:09
回答 1查看 553关注 0票数 0

我正在使用Delphi10.1柏林和SQL1.5.5,我可以成功地显示地图并根据GMLib数据集的数据填充标记。但是,当查询的结果集变得很大时,删除标记可能会相当慢。我认为这在很大程度上是由于LatLng的GeoCoding地址开销造成的。

我想要在输入时GeoCode这些地址,并存储坐标,使其更容易/更快地显示标记。我在我的DataModule中写了一个函数,每当地址改变时(在Post之前),我就对它进行GeoCode。但是例程‘挂起’,因为我不相信映射会被完全初始化(TGMMap.DoMap)

下面是我的函数:

代码语言:javascript
复制
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;

提前感谢您的任何建议。

EN

回答 1

Stack Overflow用户

发布于 2017-05-19 06:12:37

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

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

代码语言:javascript
复制
procedure AfterPageLoaded(Sender: TObject; First: Boolean);
begin
  if First then
  begin
    TGMMap(Sender).DoMap;

    // use here
  end;
end;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44056151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档