Здравствуйте, в продолжении темы по работе с 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-файлами, а также файлами баз данных и др.
Исходники статьи можно скачать тут