Всем привет, данная статья будет посвящена — двум географическом-информационным системам: Яндекс.Карты совместно с MapWindow GIS в Delphi. Яндекс.Карты мы уже использовали в своих проектах, и рассматривали их (Static Api), теперь попробуем совместить эти два дела, при том, что загрузку растровых изображений в TMap, мы также рассматривали, а следовательно, мы обойдемся без каких-либо трудностей и справимся с этой задачей. Тут можно это все организовать двумя способами. Один способ, я расскажу только теорию, а второй способ я расскажу и посмотрим на практике, как это реализовать. Для второго способоа нам понадобится тип Utils, который описан в модуле MapWindow GIS.
Давайте поговорим по поводу первого метода. Данный метод очень прост — мы просто посылаем запрос на получение карты-картинки и сохраняем его в Stream, после чего мы его сохраняем в файл, а затем в самый последний момент, данный файл мы уже загружаем и отображаем в TMap.
Данный метод не самый лучший, так как мы очень много лишних действий делаем. Необходимо сохранить Stream в файл, затем этот файл загрузить, по окончанию работы программы, можно этот файл еще и удалить. Так, что тут, как вариант можно использовать данный метод.
Но на благо имеется отличный тип данных Utils, который поможет нам все сделать без временных файлов. Мы просто преобразуем bmp в Picture, который и поможет сразу загрузить и отобразить изображение в компонент TMap.
Да, так как мы получаем изображение карты в формате png или jpg, то мы еще преобразуем сперва в bmp, но тут тоже нам труда это не составит.
Ну, давайте приступим. В проекте Static API я создал, еще одну форму и на ней разместил компонент TMap, а на главную форму еще добавил TButton, по нажатию на которую, мы будем конвертировать наши изображения и отображать их в компоненте TMap.
На событие нашей новой формы — OnShow, я написал следующий код:
procedure TForm2.FormShow(Sender: TObject);
var
UTL:Utils;
img:Image;
bmp:TBitmap;
begin
bmp:=TBitmap.Create;
bmp.Assign(Form1.png);
UTL:=CoUtils.Create;
img:=CoImage.Create;
img.Picture:=UTL.hBitmapToPicture(bmp.Handle);
Map1.AddLayer(img,True);
bmp.Free;
end;
Немного поговорим о данном типе, и о данной функции:
- функция hBitmapToPicture(hBitmap:Integer):IPictureDisp
Конвертирует hBitmap в Picture-объект, который мы потом отображаем в компоненте TMap. Как Вы видите, то мы передаем Handle нашего HBitmap.
У данного типа довольно много различных функций, который может конвертировать и ShapeFile, и производить другие конвертации, но более подробно мы рассмотрим это в других статьях.
Ну, да и мы видим, что сперва, когда мы получаем png-изображение, то мы сразу его пересохраняем в bmp, так как данная функция позволяет работать только с bmp-изображениями.
Так, что смело можно говорить, что у нас уже статические карты — превращаются в интерактивные, по ним уже тоже можно перемещаться и увеличивать.