Geolocalização e Mapas em C# (.NET): ferramentas para trabalhar com dados espaciais
O desenvolvimento de aplicações que trabalham com coordenadas geográficas, mapas e rotas é uma tarefa muito requisitada para desenvolvedores C#. No ecossistema .NET, existem várias bibliotecas poderosas que permitem resolver desde tarefas simples de determinação de coordenadas até a construção de sistemas de informação geográfica (SIG) complexos. Neste artigo, vamos analisar as principais ferramentas para trabalhar com geolocalização e mapas em C#.
1. Recursos nativos: a classe GeoCoordinate
A plataforma .NET fornece a classe base System.Device.Location.GeoCoordinate (disponível no .NET Framework e através do pacote System.Device.Location.Portable para .NET Core). Ela permite armazenar latitude e longitude, além de calcular a distância entre dois pontos usando a fórmula do haversine.
using System.Device.Location;
public class GeoService{ public double CalculateDistance(double lat1, double lon1, double lat2, double lon2) { var point1 = new GeoCoordinate(lat1, lon1); var point2 = new GeoCoordinate(lat2, lon2); return point1.GetDistanceTo(point2); // resultado em metros }
public void ShowDistance() { double distance = CalculateDistance(55.7558, 37.6176, 59.9343, 30.3351); Console.WriteLine($"Distância Moscou-SPb: {distance / 1000:F2} km"); }}Limitações: a classe não suporta trabalho com mapas, geocodificação (conversão de endereço em coordenadas) ou construção de rotas. Para um trabalho completo com mapas, serão necessárias bibliotecas de terceiros.
2. Mapsui — biblioteca multiplataforma para exibição de mapas
Mapsui é uma biblioteca multiplataforma moderna para .NET (suporta WPF, MAUI, Avalonia, Blazor). Ela permite exibir mapas de várias fontes: OpenStreetMap (OSM), Bing Maps, Stamen, bem como servidores de tiles próprios. A biblioteca é de código aberto e está em desenvolvimento ativo.
Principais recursos:
- Exibição de tiles raster e vetoriais
- Suporte a camadas (marcadores, polígonos, linhas)
- Interatividade: zoom, pan, cliques em objetos
- Integração com provedores de mapas (OSM, CartoDB, MapTiler)
- Suporte a projeções (EPSG:4326, EPSG:3857)
using Mapsui;using Mapsui.Providers;using Mapsui.Tiling;using Mapsui.Widgets.MapInfo;using Mapsui.Widgets;
// Criando um mapa com tiles do OpenStreetMapvar map = new Map();map.Layers.Add(OpenStreetMap.CreateTileLayer());
// Adicionando um marcador (ponto)var pointLayer = new MemoryLayer{ DataSource = new PointsProvider(new[] { new Feature(new MPoint(37.6176, 55.7558)) { ["Name"] = "Moscou" } }), Style = new SymbolStyle { Fill = new Brush(Color.Red), SymbolScale = 1.5 }};map.Layers.Add(pointLayer);
// Exibindo no WPF MapControl// mapControl.Map = map;Quando usar: se precisar incorporar um mapa em uma aplicação desktop ou móvel em .NET MAUI/WPF, sem depender de chaves de API de terceiros (OSM é gratuito).
3. NetTopologySuite (NTS) — trabalho com geometria e consultas espaciais
NetTopologySuite é uma adaptação da conhecida biblioteca Java JTS (Java Topology Suite) para .NET. Ela fornece ferramentas poderosas para trabalhar com objetos geométricos: pontos, linhas, polígonos, multipolígonos. A NTS é usada como base para muitas aplicações SIG e ORMs (por exemplo, Entity Framework Core com o provedor Npgsql para PostgreSQL/PostGIS).
Principais recursos:
- Criação e manipulação de formas geométricas
- Predicados espaciais: interseção, contém, toca
- Buffer, união, interseção de polígonos
- Leitura/escrita de formatos