Géolocalisation et cartes en Go (Golang) : bibliothèques et exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Géolocalisation et cartes en Go (Golang) : aperçu complet des outils



Go (Golang) est un langage compilé moderne offrant d'excellentes performances et une simplicité de programmation parallèle. Lors du développement d'applications serveur, de systèmes de surveillance, de plateformes logistiques ou de services d'information géographique, il est souvent nécessaire de travailler avec des données géospatiales : détermination de la localisation de l'utilisateur, calcul d'itinéraires, affichage d'objets sur une carte. Dans cet article, nous examinerons les bibliothèques et approches clés pour travailler avec la géolocalisation et les cartes en Go.



1. Bibliothèques principales pour travailler avec les données géospatiales en Go



L'écosystème Go propose plusieurs bibliothèques puissantes pour les calculs géospatiaux. Voici les plus populaires :



  • go-geo — bibliothèque pour travailler avec les types géométriques (points, lignes, polygones). Prend en charge la latitude/longitude, la distance, la surface, les zones tampons.
  • go-spatial/geom — implémentation de la norme OGC (Open Geospatial Consortium). Permet de travailler avec la géométrie et d'effectuer des requêtes spatiales.
  • paulmach/orb — bibliothèque rapide et propre pour les opérations géospatiales. Inclut les points, lignes, polygones, ainsi que des algorithmes pour travailler avec GeoJSON et MVT (Mapbox Vector Tiles).
  • golang-geo — bibliothèque simple pour calculer les distances avec la formule des haversines et déterminer les points les plus proches.


2. Détermination de la localisation (géolocalisation) en Go



Pour obtenir les coordonnées d'un appareil (adresse IP, GPS) en Go, les approches suivantes sont utilisées :



  • Détermination par IP — bibliothèque ip2location-go ou services comme ipapi.co, ipstack. Exemple de requête vers une API externe :


package main

import ( "encoding/json" "fmt" "net/http")

type GeoIP struct { Lat float64 `json:"latitude"` Lon float64 `json:"longitude"`}

func main() { resp, err := http.Get("http://ip-api.com/json/") if err != nil { panic(err) } defer resp.Body.Close() var geo GeoIP json.NewDecoder(resp.Body).Decode(&geo) fmt.Printf("Coordonnées : %.4f, %.4f", geo.Lat, geo.Lon)}


  • Coordonnées GPS depuis un appareil mobile — généralement transmises via une API REST ou WebSocket. Le serveur Go reçoit un JSON avec les champs lat et lon.
  • Utilisation de la bibliothèque golang-geo pour calculer la distance :


package main

import ( "fmt" "github.com/kellydunn/golang-geo")

func main() { p1 := geo.NewPoint(55.7558, 37.6173) // Moscou p2 := geo.NewPoint(59.9343, 30.3351) // Saint-Pétersbourg dist := p1.GreatCircleDistance(p2) // en kilomètres fmt.Printf("Distance : %.2f km", dist)}


3. Travail avec les cartes : OpenStreetMap et Leaflet



Pour afficher des cartes sur une page web générée par un backend Go, la combinaison Go + Leaflet.js est la plus couramment utilisée. Leaflet est une bibliothèque JavaScript légère pour les cartes interactives. Go se charge de générer le modèle HTML avec les coordonnées.



3.1. Carte de base avec Leaflet et Go



Créons un serveur HTTP simple qui renvoie une page avec une carte :



package main

import ( "html/template" "net/http")

type Location struct { Lat float64 Lon float64}

const tpl = `<!DOCTYPE html><html><head> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script></head><body> <div id="map" style="height: 500px;"></div> <script> var map = L.map('map').setView([{{.Lat}},

Recommendations