Géolocalisation et cartes interactives

Découvrez comment intégrer facilement la géolocalisation et les cartes interactives dans vos applications. Des outils et API modernes pour créer des expériences utilisateur riches et personnalisées...

Olivier Dupuy
02 août 2025

1

Vues

0

Commentaires

3

Min de lecture

La géolocalisation et les cartes interactives sont devenues des fonctionnalités essentielles dans de nombreuses applications modernes. Pour les développeurs .NET, l'intégration de ces capacités présente des défis spécifiques mais offre également de nombreuses opportunités. Dans cet article, nous explorerons les meilleures pratiques et solutions techniques pour implémenter ces fonctionnalités dans vos applications .NET.

Concepts fondamentaux de la géolocalisation

Avant de plonger dans l'implémentation, il est crucial de comprendre les concepts clés :

  • Coordonnées géographiques (latitude, longitude)
  • Systèmes de projection cartographique
  • Formats de données géospatiales (GeoJSON, WKT)
  • Services de cartographie (OpenStreetMap, Google Maps)

Implémentation en C#

Voici un exemple de classe de base pour gérer les coordonnées géographiques :


public class GeoCoordinate
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }

// Validation des coordonnées public bool IsValid() { return Latitude >= -90 && Latitude <= 90 && Longitude >= -180 && Longitude <= 180; }

// Calcul de distance entre deux points public double CalculateDistance(GeoCoordinate other) { var R = 6371; // Rayon de la Terre en km var dLat = ToRad(other.Latitude - Latitude); var dLon = ToRad(other.Longitude - Longitude);

var a = Math.Sin(dLat/2) Math.Sin(dLat/2) + Math.Cos(ToRad(Latitude)) Math.Cos(ToRad(other.Latitude)) Math.Sin(dLon/2) Math.Sin(dLon/2);

var c = 2 Math.Atan2(Math.Sqrt(a), Math.Sqrt(1-a)); return R c; }

private double ToRad(double degrees) { return degrees (Math.PI/180); } }

Intégration avec Entity Framework Core

Pour stocker des données géospatiales dans SQL Server :


public class LocationEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Point Location { get; set; }
}

public class ApplicationDbContext : DbContext { public DbSet Locations { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .Property(e => e.Location) .HasColumnType("geography"); } }

API REST pour la géolocalisation

Exemple de contrôleur ASP.NET Core pour exposer les fonctionnalités de géolocalisation :


[ApiController]
[Route("api/[controller]")]
public class LocationController : ControllerBase
{
    private readonly ILocationService _locationService;

public LocationController(ILocationService locationService) { _locationService = locationService; }

[HttpGet("nearby")] public async Task GetNearbyLocations( [FromQuery] double lat, [FromQuery] double lon, [FromQuery] double radiusKm) { try { var locations = await _locationService .GetNearbyLocationsAsync(lat, lon, radiusKm); return Ok(locations); } catch (ArgumentException ex) { return BadRequest(ex.Message); } } }

Intégration de cartes interactives

Utilisation de Leaflet.js avec ASP.NET Core :


@section Scripts {
    
    

}

Optimisation des performances

Quelques bonnes pratiques pour optimiser les performances :

  • Utilisation d'index spatiaux dans SQL Server
  • Mise en cache des résultats de géocodage
  • Pagination des résultats de recherche
  • Compression des données géographiques


public class LocationService
{
    private readonly IMemoryCache _cache;
    private readonly ApplicationDbContext _context;

public async Task> GetNearbyLocationsAsync( double lat, double lon, double radiusKm, int page = 1, int pageSize = 20) { var cacheKey = $"nearby_{lat}_{lon}_{radiusKm}_{page}"; return await _cache.GetOrCreateAsync(cacheKey, async entry => { entry.SetSlidingExpiration(TimeSpan.FromMinutes(5)); return await _context.Locations .Where(l => l.Location.Distance( DbGeography.FromText($"POINT({lon} {lat})")) <= radiusKm 1000) .Skip((page - 1) pageSize) .Take(pageSize) .ToListAsync(); }); } }

Tests unitaires

Exemple de tests avec xUnit :


public class GeoCoordinateTests
{
    [Fact]
    public void IsValid_WithValidCoordinates_ReturnsTrue()
    {
        var coordinate = new GeoCoordinate 
        { 
            Latitude = 48.8566,
            Longitude = 2.3522
        };
        
        Assert.True(coordinate.IsValid());
    }

[Theory] [InlineData(91, 0)] [InlineData(-91, 0)] [InlineData(0, 181)] [InlineData(0, -181)] public void IsValid_WithInvalidCoordinates_ReturnsFalse( double lat, double lon) { var coordinate = new GeoCoordinate { Latitude = lat, Longitude = lon }; Assert.False(coordinate.IsValid()); } }

Sécurité et considérations GDPR

Points importants à considérer :

  • Chiffrement des données de localisation
  • Consentement explicite des utilisateurs
  • Limitation de la précision des coordonnées
  • Politique de rétention des données

Conclusion

L'implémentation de fonctionnalités de géolocalisation et de cartes interactives dans une application .NET nécessite une compréhension approfondie des concepts géospatiaux et des bonnes pratiques de développement. En suivant les recommandations et exemples présentés dans cet article, vous pourrez créer des solutions robustes et performantes.

N'oubliez pas de :

  • Valider rigoureusement les données d'entrée
  • Optimiser les performances avec la mise en cache
  • Implémenter des tests unitaires complets
  • Respecter les normes de sécurité et de confidentialité
Partager cet article
42
12

Commentaires (0)

Rejoignez la discussion

Connectez-vous pour partager votre avis et échanger avec la communauté

Première discussion

Soyez le premier à partager votre avis sur cet article !

À propos de l'auteur
Olivier Dupuy

Développeur passionné et contributeur actif de la communauté technique.

Profil
Articles similaires
API versioning strategies
02 août 2025 0
C# & .NET
Cryptographie post-quantique
02 août 2025 1
C# & .NET
Auth0 et DevSecOps : meilleures pratiques
01 août 2025 8
C# & .NET
Navigation rapide
Commentaires (0)
Zéro Codename Zéro Codename

Votre source d'informations sur les dernières technologies et tendances du développement web moderne. Apprenez, partagez et grandissez avec notre communauté.

Newsletter

Restez informé des derniers articles et actualités du développement web.


© 2025 Zéro Codename. Tous droits réservés.

Développé avec en ASP.NET Core 8