Geolocalización y mapas en C# (.NET): herramientas para trabajar con datos espaciales
El desarrollo de aplicaciones que trabajan con coordenadas geográficas, mapas y rutas es una tarea demandada para los desarrolladores de C#. En el ecosistema .NET existen varias bibliotecas potentes que permiten resolver tareas desde la simple determinación de coordenadas hasta la construcción de sistemas de información geográfica (SIG) complejos. En este artículo, revisaremos las herramientas clave para trabajar con geolocalización y mapas en C#.
1. Herramientas integradas: clase GeoCoordinate
La plataforma .NET proporciona la clase base System.Device.Location.GeoCoordinate (disponible en .NET Framework y a través del paquete System.Device.Location.Portable para .NET Core). Permite almacenar latitud y longitud, así como calcular la distancia entre dos puntos mediante la fórmula del haverseno.
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 en metros }
public void ShowDistance() { double distance = CalculateDistance(55.7558, 37.6176, 59.9343, 30.3351); Console.WriteLine($"Distancia Moscú-San Petersburgo: {distance / 1000:F2} km"); }}Limitaciones: la clase no admite trabajo con mapas, geocodificación (conversión de direcciones a coordenadas) ni construcción de rutas. Para un trabajo completo con mapas se necesitarán bibliotecas de terceros.
2. Mapsui — biblioteca multiplataforma para visualización de mapas
Mapsui es una biblioteca multiplataforma moderna para .NET (compatible con WPF, MAUI, Avalonia, Blazor). Permite mostrar mapas de diversas fuentes: OpenStreetMap (OSM), Bing Maps, Stamen, así como servidores de teselas propios. La biblioteca tiene código abierto y se desarrolla activamente.
Funcionalidades principales:
- Visualización de teselas rasterizadas y vectoriales
- Soporte de capas (marcadores, polígonos, líneas)
- Interactividad: zoom, desplazamiento, clics en objetos
- Integración con proveedores de mapas (OSM, CartoDB, MapTiler)
- Soporte de proyecciones (EPSG:4326, EPSG:3857)
using Mapsui;using Mapsui.Providers;using Mapsui.Tiling;using Mapsui.Widgets.MapInfo;using Mapsui.Widgets;
// Creamos un mapa con teselas de OpenStreetMapvar map = new Map();map.Layers.Add(OpenStreetMap.CreateTileLayer());
// Añadimos un marcador (punto)var pointLayer = new MemoryLayer{ DataSource = new PointsProvider(new[] { new Feature(new MPoint(37.6176, 55.7558)) { ["Name"] = "Moscú" } }), Style = new SymbolStyle { Fill = new Brush(Color.Red), SymbolScale = 1.5 }};map.Layers.Add(pointLayer);
// Mostramos en WPF MapControl// mapControl.Map = map;Cuándo usarlo: si necesita integrar un mapa en una aplicación de escritorio o móvil en .NET MAUI/WPF, que no dependa de claves API de terceros (OSM es gratuito).
3. NetTopologySuite (NTS) — trabajo con geometría y consultas espaciales
NetTopologySuite es un puerto de la conocida biblioteca Java JTS (Java Topology Suite) para .NET. Proporciona potentes herramientas para trabajar con objetos geométricos: puntos, líneas, polígonos, multipolígonos. NTS se utiliza como base para muchas aplicaciones SIG y ORM (por ejemplo, Entity Framework Core con el proveedor Npgsql para PostgreSQL/PostGIS).
Funcionalidades clave:
- Creación y manipulación de figuras geométricas
- Predicados espaciales: intersección, contención, contacto
- Buffer, unión, intersección de polígonos
- Lectura/escritura de formatos
También en la biblioteca
Envío de SMS en C# (.NET): Integración con API de servicios SMS a través de HttpClient
Monitoreo de aplicaciones PHP con las bibliotecas php-ast y xhprof
Wolverine C# (.NET): guía completa con ejemplos prácticos
Compose Multiplatform Kotlin: guía completa con ejemplos