Картографические и ГИС компоненты для разработчиков на GitHub

от автора

Добрый день, жители и гости Хабра!

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

Итак, MapAround — это полноценный картографический движок, который содержит инструментарий для решения большинства типовых задач, возникающих при разработке ГИС, реализован полностью на .NET (не является «оберткой» native-библиотек), имеет высокую степень модульности. Данный SDK организует данные в удобоваримом для карты виде, т.е. позволяет привязать карту к реальным координатам, настроить ее отображение, разбить на слои/объединить их.


Исходники на GitHub доступны по ссылке: github.com/gkrsu
github.com/gkrsu/maparound.core — ядро

Функциональные возможности:
 — вычисление длин, расстояний, площадей и периметров;
 — решение прямой и обратной геодезических задач;
 — вычисление объединений, пересечений, разности и симметричной разности объектов
 — построение буферных зон;
 — вычисление матрицы пересечений;
 — вычисление значений двоичных предикатов: «эквивалентен», «разъединен», «содержит», «содержится», «пересекает», «скрещивается», «перекрывает», «касается»
 — построение разбиения Вороного и триангуляции Делоне;
 — преобразование из географических координат в одну из следующих проекций: проекция Меркатора; поперечная проекция Меркатора (UTM); равновеликая проекция Альберса; равноугольная проекция Ламберта.

Если выражаться проще, то задачи из разряда "выбрать все участки площадью не меньше гектара, находящиеся не ближе двухсот метров от ж/д-путей и не пересекаемые линиями электропередач" — решаются довольно легко.
Или, к примеру, требуется посчитать буферную зону, имея географические координаты где-нибудь в районе Архангельска – в MapAround это возможно.

При оформлении цифровых карт у движка имеются следующие возможности:

 — отображение векторных и растровых символов;
 — настройка штриховок линейных объектов;
 — площадные объекты (большое количество шаблонов заливок, простые и штрихованные границы областей);
 — поддержка сглаживания и полупрозрачности;
 — отображение растра;
 — система вывода надписей.

Можно получить любую тематическую карту. Внешний вид карты можно настраивать, не прибегая к кодированию. Все настройки можно сохранить в xml-формате. Изображение цифровой карты можно получить в форматах: JPG, BMP, PNG, GIF, TIFF.

Приведу простой пример создания карты (WinForms)

public partial class Form1 : Form {         private Map _map;          public Form1()         {            //Берем из библиотеки MapAround контрол управления (MapControl) и размещаем его на форме             InitializeComponent();             _map = new MapAround.Mapping.Map();             mapControl.Map = _map; // Устанавливаем созданный объект MAP         }          private void btnOpen_Click(object sender, EventArgs e) // Действия функции «Добавить слой»         {              using (var dialog = new OpenFileDialog())             {                 dialog.Filter = "*.shp|*.shp";                 dialog.CheckFileExists = true;                  if (dialog.ShowDialog() == DialogResult.OK)                 {                     // Создание нового слоя                     var layer = new FeatureLayer() { Alias = dialog.FileName, Visible = true };                                          var shape = new ShapeFileSpatialDataProvider {FileName = dialog.FileName};                      shape.QueryFeatures(layer); // Загрузка данных из Shape файла                     _map.AddLayer(layer); // Добавляем слой к карте                     SetViewBox(); // Находим новый ViewBox (требуется для отображения)                  }             }         }           private void SetViewBox() // Метод поиска ViewBox         {             BoundingRectangle rectangle = _map.CalculateBoundingRectangle();             if (rectangle.IsEmpty()) return; // Расчет  области данных карты                          // Поправка, для того, что бы вписать данные в контрол             double deltaY = rectangle.Width * mapControl.Height / 2 /                                            mapControl.Width - rectangle.Height / 2;                             // Установка нового ViewBox                                            mapControl.SetViewBox( new BoundingRectangle(rectangle.MinX, rectangle.MinY - deltaY,                                                          rectangle.MaxX, rectangle.MaxY + deltaY));          }                  //  Добавляем функции приблизить/отдалить объект на карте         private void btnZoomIn_Click(object sender, EventArgs e)         {             if (_map.Layers.Count == 0) return;             mapControl.ZoomIn();         }          private void btnZoomOut_Click(object sender, EventArgs e)         {             if (_map.Layers.Count == 0) return;             mapControl.ZoomOut();         }          private void btnViewAll_Click(object sender, EventArgs e)         {             if (_map.Layers.Count == 0) return;             SetViewBox();         }   } 

Код примера выложен на github, скачать можно здесь

Что еще сказать.
MapAround поддерживает следующие форматы векторной графики: ESRI Shape-file, MapInfo TAB, DXF. Пространственные данные можно хранить в таблицах реляционных баз данных (поддерживается: Oracle Spatial; PostGIS; Microsoft SQL Server 2008 (geometry, geography))

Векторные данные можно сериализовать в форматы Well-known text и Well-known binary.

Если вам стало интересно, напоминаю, исходные коды можно взять здесь

И как обычно — будем очень рады вашим замечаниям и предложениям по MapAround!

ссылка на оригинал статьи http://habrahabr.ru/post/168369/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *