Здравствуйте, в продолжении темы по работе с 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
Метки: ActiveX, GIS, MapGIS в Delphi, MapWindow GIS, MapWindow GIS в Delphi, MapWinGIS, TMap, ГИС
Очень интересный цикл статей по MapWinGIS, автору большое спасибо за них.
Будут ли еще статьи по этому компоненту?
Например работа с jpeg и т.д.
Ждем с нетерпением!!!
И еще интересует такой вопрос.
Загрузил карту России с
И открыл слой russia-admin-a в MapWindow GIS.
Там карта выполнена в стиле атласа т.е. кусок территории справа отображается слева.
Как прикрепить его обратно, чтобы карта России была цельная, а не дробилась как в атласе.
хм, я на днях обязательно посмотрю, да и цикл обязательно продолжу
Выявилась проблемка с TMap!!!!!!!!!!!
Выборочно подгрузил в TMap карты краев и областей России взятые с gis-lab.info
Карты:
1) Свердловская область,
2) Оренбургская область,
3) Казахстан,
4) Киргизия
отображаются не верно, т.е. 1 и 2 отображают только контур, 4 только маленький кусок карты, 3 даже в MapWindowGIS отображается как вся территория России. По отдельности, если их грузить в TMap все нормально, ну кроме Казахстана. При скроле, бывает бьются контуры карт. В MapWindowGIS все карты вместе, кроме Казахстана отображаются нормально.
Подскажите в чем может быть проблема?
Скрин: http://s43.radikal.ru/i101/110.....5c7eed.jpg
А вы пробовали открывать эти карты в других ГИС? может это дело в самих картах
Открывал карты в MapWindow GIS там они нормально показываются.
Никаких проблем замечено не было, ну кроме территориальных несоответствий Казахстана и вроде Киргизии.
Также открывал карты в Quantum GIS и CartoMAP. Тоже никаких проблем с отображением. Проблемы возникают только в TMap.
P.S. Вместо Киргизии Таджикистан. Запутался и неверно написал в в верхних постах.
ну я попробую на днях разобраться
Сергей
Если «налево» уехал Чукотский п-ов, то это особенности проекции (вероятно, использовалась «простая цилиндрическая»). Для карт России применяют Albers-Siberia
[…] Работа с MapWindow GIS. Загрузка карт […]
[…] Работа с MapWindow GIS. Загрузка карт […]
That’s an intlleigent answer to a difficult question xxx
А как сделать, чтобы shp-файл подгружался не по нажатию кнопки, а сразу при открытии программы?
На событие формы OnShow написать код загрузки файла
[…] Работа с MapWindow GIS. Загрузка карт […]
[…] Работа с MapWindow GIS. Загрузка карт […]
[…] Работа с MapWindow GIS. Загрузка карт […]
[…] Работа с MapWindow GIS. Загрузка карт […]
[…] Работа с MapWindow GIS. Загрузка карт […]
[…] Работа с MapWindow GIS. Загрузка карт […]
What is CoShapefile?… object from which class?