Всем привет, продолжаю развивать тему про MapWindow GIS в Delphi. На этот раз решил рассмотреть, как можно загрузить (отобразить) в компоненте TMap растровое изображение. Как Вы помните, то мы в прошлых статьях рассматривали загрузку shp-файлов. На растровых изображениях уже все необходимые объекты должны быть нанесены сразу, что не очень удобно, но зато на них можно рисовать, как на Canvas, например компонента TImage.

Для всех этих целей, мы рассмотри тип данных Image, который описан в модуле компонента TMap. А сейчас немного поговорим о растровых изображениях.

Растровые изображения — это грубо говоря те же самые BMP, JPEG, PNG изображения. На данных изображениях, сразу наносятся название объектов, раскрашиваются. В большинстве случаем они используются для GPS-навигаторов. Это не самый лучший вариант отображения географической информации, так как, чтобы хорошо увидеть нужный объект на растровой карте, она должна иметь достаточно высокое разрешение. Кроме всего этого, растровые карты имеют намного меньше масштаб увеличения, что также не совсем удобно их использовать в некоторых случаях.

Для примера, я нашел политическую карту Европы, которую мы будем использовать в нашем проекте.

Итак, приступим к рассмотрению типа Image. Рассмотрим функции объекта данного типа.

Функции:

  • Open(ImageFileName:String;OptionalInRam:Boolean;OptionacBack:ICallback):Boolean — загружает, указанный файл
  • CreateNew(NewWidth:Integer;NewHeight:Integer):Boolean — создает новые графический файл
  • Close():Boolean — закрывает открытый файл
  • Save(ImageFileName:String;OptionalWriteWorldFile:Boolean;OptionalFileType:ImageType;OptionalcBack:Iallback):Boolean — сохраняет изображения в файл, с нужным расширением

 

 

Свойства:

  • ImageType:ImageType — определяет тип, загруженного изображения (файла)
  • Filename:String — определяет имя загруженного файла
  • XllCenter:Double — получает или задает координаты центра изображения по X
  • YllCenter:Double — получает или задает координаты центра изображения поY
  • dX - устанавливает ширину пикселя по X
  • dY- устанавливает ширину пикселя по Y

Функции и свойства я рассмотрел не все, а только некоторые, которые понадобятся нам в данной статье. Дальше, мы рассмотрим и другие, когда будем рассматривать статью: о нанесении на слои графических объектов.

Кроме того, параметр FileType:ImageType, который используется, как в функции Open, так и в функции Save, может принимать следующие значения:

  • BITMAP_FILE
  • GIF_FILE
  • USE_FILE_EXTENSION
  • PPM_FILE

В моем проекте, я добавил еще одну кнопку и компонент TOpenDialog, и написал на событие OnClick следующий код:

procedure TForm1.ToolButton9Click(Sender: TObject);
var
 img:Image;
begin
   if OpenDialog2.Execute then
    begin
     img:=CoImage.Create;
     img.Open(OpenDialog2.FileName,BITMAP_FILE,True,nil);
     img.dX:=0.0035;
     img.dY:=0.0035;
     img.YllCenter:=42;
     img.XllCenter:=28;
     Map1.AddLayer(img,True);
    end;
end;

Как видите, я сперва создаю объект, затем загружаю в него наше изображения и настраиваю его отображение, путем указания центра изображения.

Если воспользоваться функцией Save и сохранить наше изображение в формате, например, bmp, то рядом с нашим изображение появиться файл, с расширением *.bpw, в котором будут храниться все указанные настройки нашего изображения.

Вот, что у меня получилось, после загрузки изображения, формата bmp, в наш проект (загружалась политическая карта Европы):

Растровые карты имеют довольно большой объем, так что лучше использовать слои формата shp

Данную тему я рассмотрел, так как мне было достаточно вопросов о том, можно ли загружать в MapWindow GIS, графические карты (растровые, векторные), пришлось сделать такую мини-статью.

Исходник можно скачать со страницы Исходники(обновленный исходник)


Сейчас многие знают, что разработка сайтов харьков, экономит ваше время и позволяет короткие сроки воплотить задуманное в реальный, хороший стабильный ресурс.


Все статьи по MapWindow GIS на моем блоге:

  1. Работа с MapWindow GIS. Обзор
  2. Работа с MapWindow GIS. Загрузка карт
  3. Работа с MapWindow GIS. Проекция карт
  4. Работа с MapWindow GIS. Настройки TMap
  5. Работа с MapWindow GIS. Конвертация Яндекс.Карт в Shape-файл
  6. Работа с MapWindow GIS. Работа со слоями
  7. Работа с MapWindow GIS. Работа с таблицами атрибутов
  8. Работа с MapWindow GIS. Загрузка растровых изображений. Тип Image

Метки: , , , , , , ,




К записи “Работа с MapWindow GIS. Загрузка растровых изображений. Тип Image” оставлено комментариев: 25.

  1. Алия:

    С интересом прочитала все статьи по работе с ГИС. Передо мной сейчас стоит задача найти бесплатную ГИС для отображения карты города вплодь до улиц и домов. Ее нужно прикрутить к delphi-проекту.
    Как думаете, можно реализовать такое с помощью MapWindow?

    • Andrey53:

      Можно, необходимо только найти нужный Вам слой (карты) страны, города и так далее, и нанести на него нужную информацию, можно уже готовый найти, но будет тяжелее

      • Алия:

        Спасибо! Карта в shp-формате есть. Прогрузилась в tmap отлично, проставились номера домов. Я начинаю задумываться о реализации поиска по улице и номеру дома. И понимаю, насколько это будет проблематично. В первую очередь, это несовпадение названий улиц в моей БД и в dbf-файле карты.
        Рассматриваю возможность использования отдельно готовой ГИС с передачей ей каким-то образом адреса в качестве параметров. Ничего не можете подсказать по этой теме?
        Спасибо за статьи, они пришлись мне очень кстати. Надеюсь будет продолжение. :)

        • Andrey53:

          Ну, насчет поиска ничего сказать пока что не могу, а продолжение обязательно будет

  2. Алик:

    Оу, атличная статья, инавационная даже.

  3. Сергей:

    А в TMap можно загрузить jpg файлы?
    У меня почему-то карта в jpg не подгружается, в bmp все нормально.

    • Andrey53:

      png, bmp, gif можно, а jpeg насколько я знаю нельзя, хотя попробуйте указать атрибут JPEG_FILE

      • Сергей:

        bmp грузит.
        jpeg и png не подгружает, вернее файл открывается но TMap пустой и карта не отображается.

        • Andrey53:

          так указывать же необходимо тип файла, например PNG_FILE, для каждого типа файла будет и параметр свой, для png не будет BITMAP_FILE, а будет PNG_FILE или что-то в этом роде

  4. Сергей:

    Ставил параметр PNG_File и не отображается TMap чистый открывается.
    Вот код:
    img:=CoImage.Create;
    img.Open(OpenDialog2.FileName,PNG_FILE,True,nil);
    img.dX:=0.0035;
    img.dY:=0.0035;
    img.YllCenter:=42;
    img.XllCenter:=28;
    Map1.AddLayer(img,True);

    Для теста пользуюсь вашим исходником:)))

    • Andrey53:

      дайте ссылку на Ваш png-файл, попробую я

      • Сергей:

        Вот ссылка на png файл
        http://ifolder.ru/23944113

        наконец то добрался до компа и закачал)))
        весит 68 метров

        • Andrey53:

          в ближайшее время я посмотрю

          • Сергей:

            Так и не получается подгрузить png ни в какую не хочет его отображать!
            Вы так и не смотрели?

          • Andrey53:

            Да png не получилось, Вам необходимо переконвертировать в bmp и тогда только грузить

  5. Сергей:

    В том то и засада, что bmp карта весит больше 350 метров и грузится очень долго.
    В jpeg мало весит, но опять же таки не подгружается

    • Andrey53:

      Так в том-то и вкусности всего, что у Вас в bmp будут четче видны геоданные, при этом Вы загрузку можете вынести в отдельный поток

  6. [...] Работа с MapWindow GIS. Загрузка растровых изображений. Тип Im… [...]

  7. [...] Работа с MapWindow GIS. Загрузка растровых изображений. Тип Im… [...]

  8. Женя:

    Андрей, подскажите, можно ли в компоненте отображать два слоя одновременно: shape-file и image?

  9. Женя:

    а я два дня не могу добиться… да и пусть перекрывает, мне image слой не на весь компонент нужен, просто маленькая картинка на карте, может подскажите в какую сторону копать?

    • Andrey:

      Если Вам необходимо метка в виде картинки на слое, то Вам не слой из картинки надо добавлять, а работать именно с графическими метками!

Оставить комментарий на Алик

Вы можете использовать следующие теги:

*