Как отображать и взаимодействовать с Open Street Maps в приложении Delphi VCL - PullRequest
3 голосов
/ 18 апреля 2020

Это довольно широкий вопрос, но я постараюсь сузить его до самого необходимого. Я работаю над приложением Delphi для школьного проекта, в котором я хотел бы добавить карту в свою программу для обеспечения функциональности местоположения. Я использую RAD Stud ios 10,3

Поскольку это школьный проект, я не хотел бы тратить на него деньги, если это возможно, я также не хотел бы использовать карты Google, так как вам необходимо создать платежный аккаунт. (Я знаю, что вы все еще получаете бесплатные запросы).

Требования:

  • пользователь может просматривать карту Dynami c и размещать булавки (не обязательно быть постоянными)
  • прямое и обратное геокодирование.
  • использование в программе VCL

Из моего исследования я понимаю: я могу использовать Leaflet (https://leafletjs.com/index.html) для взаимодействия с Open Streets Maps мне придется отправлять запросы из моего Delphi приложения куда-нибудь (Leaflet?), чтобы получить карту и данные геокодирования

  • , какой компонент я использую для отображения карт в моей форме vcl
  • Как мне взаимодействовать с Open Street Maps через Leaflet?

(эти следующие вопросы могут быть излишними, если я могу понять, как взаимодействовать с чем-то вроде листовки и я иметь доступ к своей документации n)

  • Как запросить координаты и адрес улицы с булавки?
  • Как показать карту с булавкой из GPS-координат?

Заранее спасибо.

1 Ответ

0 голосов
/ 20 апреля 2020

Я долгое время работал go с Bing Maps. И чтобы загрузить отображаемую карту, я использовал TIdHTTP из Indy Project. Я думаю, что он будет работать так же, как и с 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

...