Часть 1. Создаем десктопное приложение ГИС, используя MapWinGIS и C#
От переводчика. Для своей курсовой работы я рыскал по интернету и наткнулся на серию постов, состоящую из 4 частей, о разработке ГИС-программы. Сразу это меня заинтересовало своей простотой разработки и изложением сути данной темы о ГИС.
Введение
Геоинформационные системы (ГИС) являются одним из видов программ, которые имеют набор средств для сбора, хранения, поиска, анализа и визуализации географических данных и связанной с ними информации о представленных в ГИС объектах. ГИС-приложения разработаны для удовлетворения различных нужд и простых целей, таких как разведка данных ГИС в сложных условиях, например, отображение водораздела. Различные коммерческие библиотеки, как ArcObject от ESIR и Map Suite от ThinkGeo, доступны для разработчиков и их можно использовать и реализовать в своих приложениях. Но, к сожалению, стоимость лицензий для этих библиотек, как правило, очень высока, что делает процесс разработки ГИС нецелесообразным для внештатных программистов и мелких контор.
В этой серии постов я буду подробно описывать, как построить настольные приложения ГИС с использованием библиотеки Open Source MapWinGIS и языка программирования C#. MapWinGIS – это контрол (или компонент) ActiveX для разработки ГИС, со встроенной поддержкой для многих растровых и векторных форматов. MapWinGIS.ocx – ядро известной Open Source MapWinGIS многоцелевых настольных ГИС-приложений. Для начала мы сделаем первый шаг в этом уроке – скачаем MapWinGIS.ocx от MapWin ГИС: http://mapwingis.codeplex.com/releases , а затем его установить на свой компьютер с помощью установочного мастера.
Создаем нашу карту
Подготовка, от переводчика: В этом уроке я использовал .NET Framework 4.0 и Microsoft Visual Studio 2010 Express Edition. А также я использовал набор данных ГИС от ESRI, хранящиеся в формате shapefile, который ты найдешь в самом низу данного урока как архивный файл. Рекомендую скачать этот файл, распаковать и поместить содержимое файла в независимую папку. В моем примере я разместил все файлы в папку ГИС, где и находятся файлы проекта ГИС. Теперь мы готовы перейти к следующему шагу.
Создаем проект и добавляем ссылку (Add a Reference) на компоненты MapWinGIS
А теперь запустим наш Visual Studio и создаем новое приложение Windows Forms. В главном меню выбираем пункт Проект и далее команду «Добавить ссылку». В диалоговом окне добавления ссылки выделяем вкладку COM, затем выбираем компоненты MapWinGIS в списке «Название компонента» и щелкаем по кнопке OK.
А теперь у нас в окне «Обозреватель решений» мы видим, что появилась новая ссылка.
А теперь мы добавим элемент упраавления Map на панель инструментов. Элемент управления Map – элемент управления, который используется в качестве контейнера и интерактивного отображения областей географических данных. Чтобы добавить этот элемент управления на панель инструментов, выбираем вкладку Общие в панели инструментов и щелкаем правой кнопкой мыши. В контекстном меню кликни по «Выбрать элементы...» и перед тобой появится диалоговое окно. Во вкладке «COM-компоненты» мы выбираем Map Control и щелкаем по кнопке ОК.
Теперь ты можешь увидеть новый компонент, появившийся во вкладке «Общие».
Время делать GUI
Итак, поехали создавать интерфейс приложения. Брось на форму компонент ToolStrip из вкладки «Меню и панели инструментов» из панели инструментов. Добавь пять кнопок ToolStrip и назови их соответсвующе toolCursor, toolZoomExtent,toolZoomIn, toolZoomOut и toolPan. Можешь присваивать кнопкам соответствующие картинки, а также можешь взять рисунки, находящиеся в моем архиве.
Брось на форму компонент Map. В окне свойства этого элемента назначаем свойству Dock равным Fill и в свойстве CursorMode выбираем cmNone.
Загружаем наши ГИС данные в программное обеспечение
А теперь мы будем добавлять две ESRI Shapefiles в нашу карту. ESRI Shapefile или просто Shapefile – популярный формат векторных геопространственных данных для ПО географических информационных систем.
В событии Form1_Load добавляем следующий код:
//Добавляем первый слой в нашу карту
int intHandler1; //индекс integer для обработки слоя
//создаем новый экземпляр для MapWinGIS.Shapefile
//MapWinGIS.Shapefile – это провайдер данных ESRI Shapefile
MapWinGIS.Shapefile shapefile1 = new MapWinGIS.Shapefile();
//Определяем источника данных для экземпляра MapWinGIS.Shapefile.
shapefile1.Open(@"D:\MyProjects\CSharp\GIS\GISSampleData\base.shp", null );
//Отображаем слой на карте.
intHandler1 = axMap1.AddLayer(shapefile1, true);
//Добавляем второй слой
int intHandler2;
MapWinGIS.Shapefile shapefile2 = new MapWinGIS.Shapefile();
shapefile2.Open(@"D:\MyProjects\CSharp\GIS\GISSampleData\nile.shp", null);
intHandler2 = axMap1.AddLayer(shapefile2, true);
В первой строке, мы создали переменную int (intHandler1). Во второй строке мы создаем экземпляр (shapefile1) для класса MapWinGIS.Shapefile. MapWinGIS.Shapefile является контейнером для геометрических объектов, которые представляют географические особенности реального мира. В третьей строке, источник данных для нового объекта (shapefile1) мы определили – это источник данных ESRI Shapefile. И эти данные показывают Египет как полигон. В четвертой строке мы добавили новый объект в наш контрол Map карту (axMap1) и сделали его видимым. Функция AddLayer используется для добавления географического слоя на контроле Map и возвращает целое число, указывающий обработчик слоя. С четвертой по восьмой строки добавляем второй слой шейп-файла в элемент Map и делаем его видимым. Теперь уже настало время запускать наш первый ГИС-приложение – нажимаем клавишу F5 для отображения карты Египта в контроле map.
Изменяем символ функции
Настройка различных условных знаков для различных географических особенностей, включенных в карту, является одной из самых важных задач для разработчика ГИС. В этом уроке я перехожу к существующему самому простому способу – настроить символическое обозначение функций. Фактически, MapWinGIS обеспечивает много передовых методов символизировать данные GIS, которые я буду обсуждать в следующем уроке.
Теперь добавляем следующий код после предыдущего кода в событии Form1_Load:
//Устанавливаем цвет заливки полигона shapefile
axMap1.set_ShapeLayerFillColor(intHandler1,
(UInt32)(System.Drawing.ColorTranslator.ToOle
(System.Drawing.Color.SaddleBrown)));
//Устанавливаем цвет линии
axMap1.set_ShapeLayerLineColor(intHandler2,
(UInt32)(System.Drawing.ColorTranslator.ToOle
(System.Drawing.Color.Blue)));
// Устанавливаем ширину линии
axMap1.set_ShapeLayerLineWidth(intHandler2,5);
В первой строке мы использовали метод контрола Map (axMap1) – set_ShapeLayerFillColor. Этот метод вызывает обработчик слоя (intHandler1) и установки цвета в формате UInt32 для для определенного слоя. Есть много других полезных методов настройки знаков обозначения на слое, представляемых контролом Map, такие как set_ShapeLayerFillStipple, определяющий тип заполнения слоя, и set_ShapeLayerFillTransparency, который определяет уровень прозрачности слоя. Во второй строчке используется другой метод. Этот метод – set_ShapeLayerLineColor – определяет цвет линии для геометрической линии слоя с помощью обработчика слоя и формат цвета UInt32. А в третьей строке мы использовали метод set_ShapeLayerLineWidth, чтобы определить ширину геометрической линии слоя с помощью обработчика этого слоя, и переменная float обозначает ширину линии. Запускаем наше приложение нажатем клавиши F5, чтобы посмотреть результат наших колдований.
Добавляем некоторые действия для приложения Map
Естественно, что мы захотим добавить некоторые действия, такие как увеличить, уменьшить и паномировать карту. Добавлять таких манипуляций не так трудно с библиотекой MapWinGIS. Свойство CursorMode контрола Map отличный способ использовать эти задачи без труда: мы назначаем режим манипуляции, какой мы хотим, чтобы это свойство использовать непосредственно на нашей карте. В следующем коде мы поиграем со свойством CursorMode, используя событие Click для каждой кнопки в нашей панели инструментов.
private void toolCursor_Click(object sender, EventArgs e)
{
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmNone;
}
private void toolZoomIn_Click(object sender, EventArgs e)
{
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn;
}
private void toolZoomOut_Click(object sender, EventArgs e)
{
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut;
}
private void toolPan_Click(object sender, EventArgs e)
{
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmPan;
}
Чтобы установить карту в максимальном размере карте, мы заюзаем метод ZoomToMaxExtents контрола Map метод. Просто вызовем этот метод с помощью события Click, чтобы отображать карту в максимальном размере:
private void toolZoomExtent_Click(object sender, EventArgs e)
{
axMap1.ZoomToMaxExtents();
}
Теперь пора запускать тест, чтобы проверить эти новые возможности, щелкая по каждой кнопке.
Заключение
MapWinGIS является наиболее простым способом создания десктопных ГИС-приложений. Указанные особенности описывают принцип действия, необходимый для ГИС-разработчика. В следующие посты-переводы в этой серии будут рассматриваться более подробно расширенные возможности MapWinGIS.
До следующей встречи, твой толмач(так в старину у русских называли переводчиков) Андрей aka Zanuda25
Update. Обновил архивы.
Вложение | Размер |
---|---|
gissampledata_zip_11481.zip | 85.81 КБ |
GIS.7z | 163.72 КБ |
- Zanuda25's блог
- Добавить комментарий
- 12373 просмотра
Комментарии
10 комментария(ев)Дата: ВС, 02/12/2012 - 03:30
Скачал архив и запустил ЕХЕ (там их два в папке debug). Приложения не запустились.
Дата: ВС, 02/12/2012 - 03:38
Выложу исправленные примеры в течение сутки...
Дата: ВС, 02/12/2012 - 21:00
Возможно просто каких-то библиотек не хватает. В общем хотелось бы чтобы скачать ЕХЕ, запустить и все заработало
Дата: Пнд, 03/12/2012 - 17:07
а я еще хочу блэкджека и шлюх...
Дата: Пнд, 03/12/2012 - 17:19
Это сарказм?
Разве я не прав? Разве не должно так быть, что программист отдает прогу не в виде исходников, а готовых ЕХЕ и набора библиотек. Чтобы пользователь запустил программу и она работала? Джимми, твой сарказм на ВР просто зашкаливает бывает...
Дата: Пнд, 03/12/2012 - 18:42
У меня:
...скачал, поставил ]]>http://mapwingis.codeplex.com/release]]>
потом полез в gissampleapplication01_zip_17753_zip_11846, достал два exe-ника, полез во второй архив - достал GISSampleData и положил рядом с EXE-никами, запустился только один - GISSampleApplication01.exe.
Однако окно пустое:

Дата: Пнд, 03/12/2012 - 23:54
Мало информации по работе с данной ГИС в Delphi. Пару сайтов есть таких, а по C#, C++, VB примером очень много и на официальном сайте. Здесь достаточно информации по MapWindow GIS - ]]>http://devdelphi.ru/?page_id=3111]]> в Delphi. Информация постоянно обновляется, рассматриваются новые темы, которых возможно и нет на официальном сайте, примеров. Я сейчас сам в Delphi собираю проект по MapWindow GIS, по данным урокам, достаточно уже не плохой и объемный проект получается
В любом случае удачи, интересно было бы почитать про темы, которых нет на официальном сайте. Например, определить расстояние от точки до точки, выделений объектов (линиий границ), добавление графических меток.
В любом случае, удачи Вам
Дата: СР, 05/12/2012 - 09:14
Залил заново архивы...
P.S. Оказалось, не те архивы залил
Дата: СБ, 22/02/2014 - 23:32
Когда будет доступна 2 часть?
Дата: ЧТ, 27/02/2014 - 18:21
Привет! А если у меня имеется набор со стилями (XML,JSON) на несколько зум уровней можно их как нибудь прикрутить к этому примеру?