【问题标题】:How to Display and Interact with Open Street Maps in a Delphi VCL application如何在 Delphi VCL 应用程序中显示开放街道地图并与之交互
【发布时间】:2020-04-18 13:06:38
【问题描述】:

这是一个相当广泛的问题,但我会尝试将其缩小到基本要素。 我正在为一个学校项目开发一个 Delphi 应用程序,我想在我的程序中添加一张地图以提供定位功能。我正在使用 RAD 工作室 10.3

由于这是一个学校项目,如果可能的话,我不想在上面花钱,我也不想使用谷歌地图,因为您需要创建一个结算帐户(我知道您仍然会收到一些免费请求)。

要求:

  • 用户可以查看动态地图并放置图钉(不需要是永久的)
  • 正向和反向地理编码。
  • 在 VCL 程序中使用

根据我的研究,我理解这一点: 我可以使用 Leaflet (https://leafletjs.com/index.html) 与 Open Streets Maps 进行交互 我将不得不从我的 Delphi 应用程序发送请求到某个地方(传单?)以获取地图和地理编码数据

  • 我使用什么组件在我的 vcl 表单上显示地图
  • 如何通过 Leaflet 与 Open Street Maps 进行交互?

(如果我能够理解如何与传单之类的东西进行交互并且我可以访问他们的文档,那么以下这些问题可能是多余的)

  • 如何通过 pin 请求坐标和街道地址?
  • 如何显示带有 GPS 坐标的图钉的地图?

提前谢谢你。

【问题讨论】:

  • Leaflet 是一个 JavaScript 库。如果你想使用它,你必须在你的应用程序中嵌入一个浏览器(你可以使用TWebBrowser)。
  • @Olivier 好的,这是有道理的。我不知道javascript,但我愿意学习。您能否解释或参考我如何使用 Java 脚本在我的程序和传单之间进行通信?
  • @CL。谢谢这些是一些有用的资源
  • 你的程序不能直接和JS通信。然而,Delphi 程序可以访问 HTML 页面并做很多事情;有关示例,请参见 herethere
  • @Olivier 感谢您为我指明了正确的方向,我正在取得进展

标签: delphi leaflet maps openstreetmap


【解决方案1】:

我很久以前就使用 Bing 地图。为了加载要显示的地图,我使用了 Indy Project 中的“TIdHTTP”。我认为它与 Leaflet 的工作方式相同。

这是我的代码:

const
  // Place here the key retrieved from the site Bing Maps Account Center
  Key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  Server = 'http://dev.virtualearth.net/REST/v1/';
  URLPicFormat = Server + 'Imagery/Map/%s/%s,%s/%d?ms=%d,%d&pp=%s,%s;6&key='
    + Key;
var
  Address, Map, LatStr, LongStr, TypeView: String;
  Response: TFileStream;
begin
  {...}
  // Don't forget to add the JPEG unit
  Map     := WindowsTempDir + 'Map.jpeg';

  // Format the URL for the picture to load
  Address := Format(URLPicFormat, [TypeView, LatStr, LongStr,
    TB_Zoom.Position, IMG_Map.Width, IMG_Map.Height, LatStr, LongStr]);

  // Load the picture from Bing Maps
  Response := TFileStream.Create(Map, fmCreate);
  try
    HTTP_BingMaps.Get(Address, Response);
  finally
    Response.Free();
  end;
  IMG_Map.Picture.LoadFromFile(Map);
  {...}
end;

您可以在此处找到法语的完整单元:
https://github.com/ILPlais/BingMapsGPS/blob/master/UBingMapsGPS.pas

【讨论】:

  • 你好,谢谢你的回答,我想我用了一个稍微不同的方法,但感谢分享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 2019-11-06
相关资源
最近更新 更多