Géolocalisation et cartes en C# (.NET) : aperçu des bibliothèques et outils clés
Travailler avec des données géographiques et la cartographie est une tâche courante dans les applications .NET modernes. Du suivi de localisation à la visualisation sur une carte, l'écosystème C# propose plusieurs solutions puissantes. Dans cet article, nous passerons en revue les principales bibliothèques pour la géolocalisation et les cartes, leurs fonctionnalités et des exemples d'utilisation.
1. Bibliothèque intégrée System.Device.Location (GeoCoordinate)
Pour un travail de base avec les coordonnées GPS dans .NET Framework, la classe GeoCoordinate de l'espace de noms System.Device.Location est disponible. Elle permet d'obtenir la position actuelle de l'appareil (Windows) et de calculer la distance entre deux points.
Exemple d'utilisation :
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}");}
// Distance entre deux pointsvar point1 = new GeoCoordinate(55.7558, 37.6176); // Moscouvar point2 = new GeoCoordinate(59.9343, 30.3351); // Saint-Pétersbourgdouble distance = point1.GetDistanceTo(point2); // en mètresConsole.WriteLine($"Distance : {distance / 1000:F2} km");2. NetTopologySuite — travail avancé avec la géométrie
NetTopologySuite (NTS) est le port .NET de la célèbre bibliothèque Java JTS. Elle fournit des outils puissants pour travailler avec des objets géométriques (points, lignes, polygones) et des opérations spatiales (intersection, union, tampon).
Principales fonctionnalités :
- Création et analyse de formes géométriques (Point, LineString, Polygon).
- Prédicats spatiaux (Contains, Intersects, Within).
- Transformation de coordonnées et projection (avec ProjNet).
- Lecture/écriture WKT, WKB, GeoJSON.
Exemple :
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 degrésConsole.WriteLine($"Distance en degrés : {distance:F4}");
// Lecture à partir de WKTvar reader = new WKTReader();Polygon polygon = reader.Read("POLYGON ((30 20, 45 40, 10 40, 30 20))") as Polygon;Console.WriteLine($"Aire du polygone : {polygon.Area}");3. Mapsui — bibliothèque cartographique multiplateforme
Mapsui est une bibliothèque moderne pour l'affichage de cartes en .NET (Windows, Android, iOS, WebAssembly). Elle prend en charge diverses sources de tuiles (OpenStreetMap, Bing, MapBox), ainsi que le rendu de couches personnalisées (marqueurs, lignes, polygones).
Caractéristiques clés :
- Prise en charge de WPF, MAUI, Avalonia, Blazor.
- API simple pour ajouter des marqueurs et des couches.
- Animation et interaction (zoom, glisser-déposer).
- Possibilité d'utiliser des cartes hors ligne (MBTiles).
Exemple pour WPF :
using Mapsui;using Mapsui.Projections;using Mapsui.Tiling;
var map = new Map();map.Layers.Add(OpenStreetMap.CreateTileLayer());
// Ajout d'un marqueurvar pin = new PointFeature(37.6176, 55.7558);pin["label"] = "Moscou";map.Layers.Add(new Layer { Name = "Marqueurs", DataSource = new MemoryProvider(pin) });
// En XAML : <MapControl Map="{Binding Map}" />// Exemple de liaison en code :// mapControl.Map = map;4. SharpMap — bibliothèque classique pour les systèmes d'information géographique
SharpMap est