- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

Функциональные возможности:
 — вычисление длин, расстояний, площадей и периметров;
 — решение прямой и обратной геодезических задач;
 — вычисление объединений, пересечений, разности и симметричной разности объектов
 — построение буферных зон;
 — вычисление матрицы пересечений;
 — вычисление значений двоичных предикатов: «эквивалентен», «разъединен», «содержит», «содержится», «пересекает», «скрещивается», «перекрывает», «касается»
 — построение разбиения Вороного и триангуляции Делоне;
 — преобразование из географических координат в одну из следующих проекций: проекция Меркатора; поперечная проекция Меркатора (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, скачать можно здесь [3]

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

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

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

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

Автор: oleroza

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/karty/26477

Ссылки в тексте:

[1] github.com/gkrsu: https://github.com/gkrsu

[2] github.com/gkrsu/maparound.core: https://github.com/gkrsu/maparound.core

[3] здесь: https://github.com/gkrsu/maparound.example

[4] Источник: http://habrahabr.ru/post/168369/