Géolocalisation et cartes en Go (Golang) : aperçu des bibliothèques et exemples de code
Go (Golang) est un langage compilé moderne qui gagne en popularité dans le développement backend grâce à ses performances, sa simplicité et sa prise en charge intégrée de la concurrence. Lors de la création de services web éducatifs, logistiques, touristiques et autres, il est souvent nécessaire de travailler avec des données géographiques : calculer les distances entre des points, vérifier si des coordonnées se trouvent dans des zones, construire des itinéraires et afficher des cartes. Dans cet article, nous examinerons les principales bibliothèques Go pour la géolocalisation et les cartes, et fournirons des exemples de code pratiques.
Bibliothèques principales pour la géolocalisation
1. github.com/paulmach/orb — bibliothèque universelle pour travailler avec des objets géométriques
La bibliothèque orb fournit des types et des fonctions pour travailler avec des points, des lignes, des polygones et d'autres primitives géométriques. Elle prend en charge GeoJSON, les opérations de géométrie booléenne, les projections et les transformations de coordonnées. C'est une bibliothèque de base sur laquelle de nombreuses autres solutions sont construites.
package main
import ( "fmt" "github.com/paulmach/orb" "github.com/paulmach/orb/geo")
func main() { // Définir deux points (latitude, longitude) moscow := orb.Point{37.6173, 55.7558} spb := orb.Point{30.3351, 60.0000}
// Calculer la distance en kilomètres (formule haversine) distance := geo.Distance(moscow, spb) fmt.Printf("Distance de Moscou à Saint-Pétersbourg : %.2f km", distance)}2. github.com/twpayne/go-geom — bibliothèque puissante pour les opérations géométriques
Cette bibliothèque offre un accès de plus bas niveau à la géométrie et prend en charge de nombreuses normes OGC (Open Geospatial Consortium). Elle est idéale pour les calculs complexes : intersections de polygones, tamponnage, transformation de projections.
import ( "github.com/twpayne/go-geom" "github.com/twpayne/go-geom/encoding/geojson")
// Exemple : création d'un point et sérialisation en GeoJSONpoint := geom.NewPoint(geom.XY).SetCoords(geom.Coord{37.6173, 55.7558})data, _ := geojson.Marshal(point)fmt.Println(string(data))// Sortie : {"type":"Point","coordinates":[37.6173,55.7558]}3. github.com/kellydunn/golang-geo — bibliothèque simple pour le calcul de distances et le géocodage
La bibliothèque golang-geo fournit une API simple pour travailler avec des points, calculer des distances (en miles et kilomètres), ainsi que pour le géocodage via l'API Google Maps ou OpenStreetMap (Nominatim).
import "github.com/kellydunn/golang-geo"
func main() { p1 := geo.NewPoint(55.7558, 37.6173) p2 := geo.NewPoint(60.0000, 30.3351) dist := p1.GreatCircleDistance(p2) // en kilomètres fmt.Printf("Distance : %.2f km", dist)}Bibliothèques pour les cartes et la visualisation
4. github.com/umahmood/leaflet-go — intégration avec Leaflet.js pour Go
Leaflet est l'une des bibliothèques JavaScript les plus populaires pour les cartes interactives. leaflet-go permet de générer du code HTML avec des cartes directement depuis une application Go. C'est pratique pour les sites éducatifs et les services web simples.
import "github.com/umahmood/leaflet-go"
func main() { // Créer une carte centrée sur Moscou m := leaflet.NewMap( leaflet.Center(55.7558, 37.6173), leaflet.Zoom(10), leaflet.TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"), )
// Ajouter un marqueur m.AddMarker(leaflet.Marker( leaflet.LatLng(55.7558, 37.6173), leaflet.Popup("Moscou, Kremlin"), ))
// Afficher le code HTML de la carte html, _ := m.Render() fmt.Println(html)}5. github.com/ringsaturn/leaflet — wrapper alternatif pour Leaflet
Cette bibliothèque
Aussi dans la bibliothèque
Journalisation en JavaScript (Node.js) : les meilleures solutions pour votre projet
Frameworks CLI pour Go (Golang) : aperçu complet des outils pour créer des applications console
Génération de QR codes en C++ : bibliothèque QR-Code-generator