Представляю вашему вниманию один интересный инструмент, для тех, кто по роду своей деятельности или в силу увлечения интересуется пространственными данными, созданием разноплановых ГИС-систем и картографических сервисов.
Итак, 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/
Добавить комментарий