Geolocalização e Mapas em C# (.NET): Visão Geral das Principais Bibliotecas e Ferramentas
Trabalhar com dados geoespaciais e cartografia é uma tarefa comum em aplicações .NET modernas. Do rastreamento de localização à visualização em mapas, o ecossistema C# oferece várias soluções poderosas. Neste artigo, analisaremos as principais bibliotecas para trabalhar com geolocalização e mapas, seus recursos e exemplos de uso.
1. Biblioteca Integrada System.Device.Location (GeoCoordinate)
Para trabalhos básicos com coordenadas GPS no .NET Framework, a classe GeoCoordinate do namespace System.Device.Location está disponível. Ela permite obter a localização atual do dispositivo (Windows) e calcular a distância entre dois pontos.
Exemplo de uso:
using System.Device.Location;
var watcher = new GeoCoordinateWatcher();watcher.TryStart(false, TimeSpan.FromMilliseconds(1000));
if (watcher.Status == GeoPositionStatus.Ready){ GeoCoordinate coord = watcher.Position.Location; Console.WriteLine($"Latitude: {coord.Latitude}, Longitude: {coord.Longitude}");}
// Distância entre dois pontosvar point1 = new GeoCoordinate(55.7558, 37.6176); // Moscouvar point2 = new GeoCoordinate(59.9343, 30.3351); // São Petersburgodouble distance = point1.GetDistanceTo(point2); // em metrosConsole.WriteLine($"Distância: {distance / 1000:F2} km");2. NetTopologySuite — Trabalho Avançado com Geometria
NetTopologySuite (NTS) é a porta .NET da popular biblioteca Java JTS. Ela fornece ferramentas poderosas para trabalhar com objetos geométricos (pontos, linhas, polígonos) e operações espaciais (interseção, união, buffer).
Principais recursos:
- Criação e análise de formas geométricas (Point, LineString, Polygon).
- Predicados espaciais (Contains, Intersects, Within).
- Transformação de coordenadas e projeção (em conjunto com ProjNet).
- Leitura/escrita de WKT, WKB, GeoJSON.
Exemplo:
using NetTopologySuite.Geometries;using NetTopologySuite.IO;
var geometryFactory = new GeometryFactory();Point point1 = geometryFactory.CreatePoint(new Coordinate(37.6176, 55.7558));Point point2 = geometryFactory.CreatePoint(new Coordinate(30.3351, 59.9343));
double distance = point1.Distance(point2); // em grausConsole.WriteLine($"Distância em graus: {distance:F4}");
// Leitura de WKTvar reader = new WKTReader();Polygon polygon = reader.Read("POLYGON ((30 20, 45 40, 10 40, 30 20))") as Polygon;Console.WriteLine($"Área do polígono: {polygon.Area}");3. Mapsui — Biblioteca de Mapas Multiplataforma
Mapsui é uma biblioteca moderna para exibição de mapas em .NET (Windows, Android, iOS, WebAssembly). Ela suporta várias fontes de tiles (OpenStreetMap, Bing, MapBox), bem como a renderização de camadas personalizadas (marcadores, linhas, polígonos).
Principais características:
- Suporte para WPF, MAUI, Avalonia, Blazor.
- API simples para adicionar marcadores e camadas.
- Animação e interação (zoom, arrastar).
- Possibilidade de usar mapas offline (MBTiles).
Exemplo para WPF:
using Mapsui;using Mapsui.Projections;using Mapsui.Tiling;
var map = new Map();map.Layers.Add(OpenStreetMap.CreateTileLayer());
// Adicionando um marcadorvar pin = new PointFeature(37.6176, 55.7558);pin["label"] = "Moscou";map.Layers.Add(new Layer { Name = "Marcadores", DataSource = new MemoryProvider(pin) });
// No XAML: <MapControl Map="{Binding Map}" />// Exemplo de vinculação no código:// mapControl.Map = map;4. SharpMap — Biblioteca Clássica para Sistemas de Informação Geográfica
SharpMap é