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