Geolokalisierung und Karten in Go (Golang): Bibliotheken und Codebeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Geolokalisierung und Karten in Go (Golang): vollständiger Überblick über Werkzeuge



Go (Golang) ist eine moderne, kompilierte Sprache mit hervorragender Leistung und einfacher paralleler Programmierung. Bei der Entwicklung von Serveranwendungen, Überwachungssystemen, Logistikplattformen oder Geoinformationsdiensten besteht häufig die Notwendigkeit, mit Geodaten zu arbeiten: Bestimmung des Standorts des Benutzers, Routenplanung, Anzeige von Objekten auf einer Karte. In diesem Artikel betrachten wir die wichtigsten Bibliotheken und Ansätze für die Arbeit mit Geolokalisierung und Karten in Go.



1. Wichtige Bibliotheken für die Arbeit mit Geodaten in Go



Das Go-Ökosystem bietet mehrere leistungsstarke Bibliotheken für georäumliche Berechnungen. Betrachten wir die beliebtesten:



  • go-geo — Bibliothek für die Arbeit mit geometrischen Typen (Punkte, Linien, Polygone). Unterstützt Breiten-/Längengrad, Entfernung, Fläche, Pufferzonen.
  • go-spatial/geom — Implementierung des OGC-Standards (Open Geospatial Consortium). Ermöglicht die Arbeit mit Geometrie und die Durchführung räumlicher Abfragen.
  • paulmach/orb — schnelle und saubere Bibliothek für georäumliche Operationen. Enthält Punkte, Linien, Polygone sowie Algorithmen für die Arbeit mit GeoJSON und MVT (Mapbox Vector Tiles).
  • golang-geo — einfache Bibliothek zur Berechnung von Entfernungen mit der Haversine-Formel und zur Bestimmung der nächsten Punkte.


2. Standortbestimmung (Geolokalisierung) in Go



Zum Abrufen der Koordinaten eines Geräts (IP-Adresse, GPS) werden in Go die folgenden Ansätze verwendet:



  • Bestimmung per IP — Bibliothek ip2location-go oder Dienste wie ipapi.co, ipstack. Beispiel einer Anfrage an eine externe API:


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("Koordinaten: %.4f, %.4f", geo.Lat, geo.Lon)}


  • GPS-Koordinaten von einem mobilen Gerät — werden normalerweise über REST API oder WebSocket übertragen. Der Go-Server empfängt JSON mit den Feldern lat und lon.
  • Verwendung der Bibliothek golang-geo zur Berechnung der Entfernung:


package main

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

func main() { p1 := geo.NewPoint(55.7558, 37.6173) // Moskau p2 := geo.NewPoint(59.9343, 30.3351) // Sankt Petersburg dist := p1.GreatCircleDistance(p2) // in Kilometern fmt.Printf("Entfernung: %.2f km", dist)}


3. Arbeiten mit Karten: OpenStreetMap und Leaflet



Zur Anzeige von Karten auf einer Webseite, die von einem Go-Backend generiert wird, wird am häufigsten die Kombination Go + Leaflet.js verwendet. Leaflet ist eine leichtgewichtige JavaScript-Bibliothek für interaktive Karten. Go ist für die Generierung der HTML-Vorlage mit den Koordinaten verantwortlich.



3.1. Basiskarte mit Leaflet und Go



Erstellen wir einen einfachen HTTP-Server, der eine Seite mit einer Karte zurückgibt:



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}},

Empfehlungen