Здравствуйте, в продолжении темы по работе с MapWindow GIS в Delphi пишу статью о том, как можно загружать карты в свой проект, ну и делать по минимуму операций с ними (увеличивать, перемещаться по карте, очищать карту). В прошлой теме, достаточно долго обсуждалось то, что в Delphi библиотека MapWindow GIS не работает, а точнее когда начинаем загружать карты, то сразу же вылетает ошибка. Подсказали как решить данную проблему — установить фокус на наш компонент, который будет отображать карту (TMap). Скажу сразу, что я фокус не устанавливал и у меня в компиляторе Borland Delphi 7 без фокуса отлично shp-файлы грузились в TMap без всяких ошибок. Но раз такая проблема возникала, то на всякий случай и мы установим фокус, на тот самый случай, чтобы у других пользователей, вдруг ничего не выдало из ошибок. Ну как сделать свою карту я расскажу позже, мы постепенно будем делать свою мини-карту какого-то района. Для данной статьи мы воспользуемся уже готовым примером, в интернете таких карт уже полно, так что скачаем карту любого региона, например Московской области, в Интернете полно готовых shp-файлов карт, которые Вы сможете скачать совершенно бесплатно, но вот можете скачать, например вот такую вот сборку Московской области.

После того как мы скачали файл-карт, shp-файлы, там же и файл баз данных и так далее, нам необходимо создать проект. Создаем проект, устанавливаем на форму компонент TMap с вкладки ActiveX. На данном этапе мы только лишь загрузим нашу карту и отобразим ее, немного по перемещаемся по ней, но не больше того, как рисовать на ней, ставить метки мы будем рассматривать в других статьях. Никаких мы дополнительных модулей не подключаем, далее нам надо создать файл shp, в котором и будет храниться наша карта сама. Это мы сделаем следующим образом

var
 shp:Shapefile;
begin
   shp:=CoShapefile.Create;

Далее мы загружаем наш файл

shp.Open(OpenDialog1.FileName,nil);

Если скачаете какую-то огромную карту, которая будет размером больше 15 мб, не пугайтесь, когда будете ее грузить в проект, если проект на время зависнет, сами понимаете размер не маленький, для этого можно будет использовать потоки, про которые мы также поговорим в следующих статьях. Далее на всякий случай установим фокус нашему компоненту TMap, так как раньше возникали проблемы в некоторых компиляторах при загрузке данных карт. Здесь фокус устанавливается как и на любые другие визуальные компоненты. После этого на наш компонент TMap необходимо добавить новый слой, который и будет отображать содержимое нашей карты. Для этого используется функция AddLayer, у которой 2 параметра:

  • 1 параметр - сам файл карты, который мы будем отображать, это может быть и shp-файд и jpeg-файл, то есть файл-карты
  • 2 параметр - принимает значение True или False в зависимости от того отображать данный слой или нет.

После того как мы добавили слой, нам необходимо его отобразить в своем привычном размере, то есть, чтобы мы видели всею карту, для этого будет использоваться процедура ZoomToMaxExtents. Для того, чтобы вернуться к предыдущему шагу увеличения карты, необходимо использовать функцию ZoomToPrev. Ну вроде бы все по загрузке карт в компонент TMap, остается немного настроить только TOpendialog, чтобы мы могли только видеть shp-файл, зададим ему такой фильтр. Ну, что можете немного поэкспериментировать с картами. Ну да, чуть не забыл, вот весь код, который я написал на событие OnClick кнопки, которая загружает shp-файл и отображает его в TMap.

procedure TForm1.Button1Click(Sender: TObject);
var
 shp:Shapefile;
begin
   try
    if OpenDialog1.Execute then
     begin
      shp:=CoShapefile.Create;
      shp.Open(OpenDialog1.FileName,nil);
      Map1.Focused;//на всякий случай установим фокус
      Map1.AddLayer(shp,true);
      Map1.ZoomToMaxExtents;
     end;
   except
    on e:Exception do
     //-//-//-//-//-//
   end;
end;

Ну вот и все по загрузке shp-файлов, можете искать в Интернете нужную себе карту и загружать и экспериментировать с ней. А дальше мы рассмотрим как можно создать свои shp-файлы, как можно загружать эти файлы в потоках, чтобы приложение не зависало, а также как можно рисовать на слоях TMap и делать нужные нам настройки.

Кстати, хочу Вам сказать, чтобы Ваш сайт был более красочным и красивым рекомендую использовать флеш шаблоны сайта. Под них есть и свои CMS

Не забудьте распаковать архив с shp-файлами, а также файлами баз данных и др.
Исходники статьи можно скачать тут

Автор статьи - Andrey53

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




К записи “Работа с MapWindow GIS. Загрузка карт” оставлено комментариев: 21.

  1. Сергей:

    Очень интересный цикл статей по MapWinGIS, автору большое спасибо за них.
    Будут ли еще статьи по этому компоненту?
    Например работа с jpeg и т.д.
    Ждем с нетерпением!!!

  2. Сергей:

    И еще интересует такой вопрос.
    Загрузил карту России с
    И открыл слой russia-admin-a в MapWindow GIS.
    Там карта выполнена в стиле атласа т.е. кусок территории справа отображается слева.
    Как прикрепить его обратно, чтобы карта России была цельная, а не дробилась как в атласе.

  3. Сергей:

    Выявилась проблемка с TMap!!!!!!!!!!!

    Выборочно подгрузил в TMap карты краев и областей России взятые с gis-lab.info

    Карты:
    1) Свердловская область,
    2) Оренбургская область,
    3) Казахстан,
    4) Киргизия
    отображаются не верно, т.е. 1 и 2 отображают только контур, 4 только маленький кусок карты, 3 даже в MapWindowGIS отображается как вся территория России. По отдельности, если их грузить в TMap все нормально, ну кроме Казахстана. При скроле, бывает бьются контуры карт. В MapWindowGIS все карты вместе, кроме Казахстана отображаются нормально.

    Подскажите в чем может быть проблема?

    Скрин: http://s43.radikal.ru/i101/110.....5c7eed.jpg

    • Andrey53:

      А вы пробовали открывать эти карты в других ГИС? может это дело в самих картах

      • Сергей:

        Открывал карты в MapWindow GIS там они нормально показываются.
        Никаких проблем замечено не было, ну кроме территориальных несоответствий Казахстана и вроде Киргизии.

        • Сергей:

          Также открывал карты в Quantum GIS и CartoMAP. Тоже никаких проблем с отображением. Проблемы возникают только в TMap.

          P.S. Вместо Киргизии Таджикистан. Запутался и неверно написал в в верхних постах.

  4. Mavka:

    Сергей
    Если «налево» уехал Чукотский п-ов, то это особенности проекции (вероятно, использовалась «простая цилиндрическая»). Для карт России применяют Albers-Siberia

  5. Goryni4:

    А как сделать, чтобы shp-файл подгружался не по нажатию кнопки, а сразу при открытии программы?

  6. Javier:

    What is CoShapefile?… object from which class?

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

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

*