Geolocalización y mapas en C# (.NET): resumen de bibliotecas y herramientas clave
Trabajar con datos geoespaciales y cartografía es una tarea común en las aplicaciones modernas de .NET. Desde el seguimiento de ubicación hasta la visualización en mapas, el ecosistema de C# ofrece varias soluciones potentes. En este artículo, analizaremos las principales bibliotecas para trabajar con geolocalización y mapas, sus capacidades y ejemplos de uso.
1. Biblioteca integrada System.Device.Location (GeoCoordinate)
Para el trabajo básico con coordenadas GPS en .NET Framework, está disponible la clase GeoCoordinate del espacio de nombres System.Device.Location. Permite obtener la ubicación actual del dispositivo (Windows) y calcular la distancia entre dos puntos.
Ejemplo 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($"Latitud: {coord.Latitude}, Longitud: {coord.Longitude}");}
// Distancia entre dos puntosvar point1 = new GeoCoordinate(55.7558, 37.6176); // Moscúvar point2 = new GeoCoordinate(59.9343, 30.3351); // San Petersburgodouble distance = point1.GetDistanceTo(point2); // en metrosConsole.WriteLine($"Distancia: {distance / 1000:F2} km");2. NetTopologySuite — trabajo avanzado con geometría
NetTopologySuite (NTS) es el puerto .NET de la popular biblioteca Java JTS. Proporciona potentes herramientas para trabajar con objetos geométricos (puntos, líneas, polígonos) y operaciones espaciales (intersección, unión, buffer).
Principales capacidades:
- Creación y análisis de figuras geométricas (Point, LineString, Polygon).
- Predicados espaciales (Contains, Intersects, Within).
- Transformación de coordenadas y proyección (junto con ProjNet).
- Lectura/escritura de WKT, WKB, GeoJSON.
Ejemplo:
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); // en gradosConsole.WriteLine($"Distancia en grados: {distance:F4}");
// Lectura desde WKTvar reader = new WKTReader();Polygon polygon = reader.Read("POLYGON ((30 20, 45 40, 10 40, 30 20))") as Polygon;Console.WriteLine($"Área del polígono: {polygon.Area}");3. Mapsui — biblioteca cartográfica multiplataforma
Mapsui es una biblioteca moderna para mostrar mapas en .NET (Windows, Android, iOS, WebAssembly). Soporta varias fuentes de teselas (OpenStreetMap, Bing, MapBox), así como la representación de capas personalizadas (marcadores, líneas, polígonos).
Características clave:
- Soporte para WPF, MAUI, Avalonia, Blazor.
- API sencilla para agregar marcadores y capas.
- Animación e interacción (zoom, arrastre).
- Posibilidad de usar mapas sin conexión (MBTiles).
Ejemplo para WPF:
using Mapsui;using Mapsui.Projections;using Mapsui.Tiling;
var map = new Map();map.Layers.Add(OpenStreetMap.CreateTileLayer());
// Agregamos un marcadorvar pin = new PointFeature(37.6176, 55.7558);pin["label"] = "Moscú";map.Layers.Add(new Layer { Name = "Marcadores", DataSource = new MemoryProvider(pin) });
// En XAML: <MapControl Map="{Binding Map}" />// Ejemplo de enlace en código:// mapControl.Map = map;4. SharpMap — biblioteca clásica para sistemas de información geográfica
SharpMap es