Geolocalización y mapas en C# (.NET): revisión de bibliotecas y herramientas
Trabajar con geolocalización y mapas es una tarea demandada en las aplicaciones .NET modernas: desde el seguimiento de repartidores hasta la visualización de datos en un mapa. En este artículo analizaremos las principales bibliotecas y herramientas para C# (.NET) que le ayudarán a implementar funcionalidades de geoposicionamiento y visualización de mapas.
1. Herramientas integradas de .NET: espacio de nombres Windows.Devices.Geolocation
Para aplicaciones UWP (Universal Windows Platform) en .NET, está disponible una API integrada para obtener la ubicación actual del dispositivo. La clase principal es Geolocator.
using Windows.Devices.Geolocation;
public async Task<BasicGeoposition> GetCurrentPosition(){ var geolocator = new Geolocator(); geolocator.DesiredAccuracy = PositionAccuracy.High;
Geoposition pos = await geolocator.GetGeopositionAsync(); return pos.Coordinate.Point.Position;}Este método devuelve la latitud y longitud del dispositivo. Importante: requiere permiso del usuario y GPS/red activados.
2. Biblioteca GeoCoordinate (System.Device.Location)
La clase GeoCoordinate de System.Device.Location está disponible para aplicaciones clásicas de .NET Framework (Windows Forms, WPF). Permite no solo obtener coordenadas, sino también calcular la distancia entre dos puntos.
using System.Device.Location;
public double CalculateDistance(double lat1, double lon1, double lat2, double lon2){ var coord1 = new GeoCoordinate(lat1, lon1); var coord2 = new GeoCoordinate(lat2, lon2); return coord1.GetDistanceTo(coord2); // en metros}Para .NET Core / .NET 5+ esta biblioteca no está disponible; use las alternativas descritas a continuación.
3. Trabajo con mapas: MapControl (WPF/UWP)
En WPF y UWP se puede usar el elemento integrado MapControl de Windows.UI.Xaml.Controls.Maps. Permite mostrar mapas de Bing Maps (por defecto) o conectar mosaicos de terceros.
<!-- Marcado XAML --><Maps:MapControl x:Name="MyMap" ZoomLevel="12" Center="55.7558, 37.6173" />Para colocar pines (marcadores) use MapIcon:
using Windows.Devices.Geolocation;using Windows.UI.Xaml.Controls.Maps;
public void AddMarker(double latitude, double longitude, string title){ var pin = new MapIcon { Location = new Geopoint(new BasicGeoposition { Latitude = latitude, Longitude = longitude }), Title = title, NormalizedAnchorPoint = new Point(0.5, 1.0) }; MyMap.MapElements.Add(pin);}4. Google Maps API para .NET
Para trabajar con Google Maps desde C# (.NET Core / .NET 5+) use la biblioteca GoogleMapsApi (NuGet: GoogleMapsApi). Proporciona una interfaz conveniente para geocodificación, geocodificación inversa y cálculo de rutas.
using GoogleMapsApi;using GoogleMapsApi.Entities.Geocoding.Request;using GoogleMapsApi.Entities.Geocoding.Response;
public async Task<GeocodingResponse> GeocodeAddress(string address){ var request = new GeocodingRequest { Address = address, ApiKey = "YOUR_API_KEY" }; var geocodingEngine = new GeocodingEngine(); return await geocodingEngine.GeocodeAsync(request);}No olvide obtener una clave API en Google Cloud Console y habilitar la facturación (límite gratuito: 40 000 solicitudes/mes).
5. Biblioteca NetTopologySuite para trabajar con geometría
Si necesita analizar datos geográficos (polígonos, líneas, puntos), use NetTopologySuite (NTS). Es un puerto de la biblioteca Java JTS para .NET.
using NetTopol También en la biblioteca
Bibliotecas WebSocket TypeScript: ws, Socket.IO, uWebSockets.js
Cliente Elasticsearch para TypeScript: @elastic/elasticsearch
Validación de datos en PHP con la librería Respect\\Validation