Geolocalização e Mapas em Go (Golang): bibliotecas e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Geolocalização e Mapas em Go (Golang): visão geral completa das ferramentas



Go (Golang) é uma linguagem compilada moderna com excelente desempenho e simplicidade de programação concorrente. Ao desenvolver aplicações de servidor, sistemas de monitoramento, plataformas logísticas ou serviços de informação geográfica, surge frequentemente a necessidade de trabalhar com dados geoespaciais: determinar a localização do usuário, traçar rotas, exibir objetos em um mapa. Neste artigo, exploraremos as principais bibliotecas e abordagens para trabalhar com geolocalização e mapas em Go.



1. Principais bibliotecas para trabalhar com dados geoespaciais em Go



O ecossistema Go oferece várias bibliotecas poderosas para computação geoespacial. Vamos analisar as mais populares:



  • go-geo — biblioteca para trabalhar com tipos geométricos (pontos, linhas, polígonos). Suporta latitude/longitude, distância, área, zonas de buffer.
  • go-spatial/geom — implementação do padrão OGC (Open Geospatial Consortium). Permite trabalhar com geometria e realizar consultas espaciais.
  • paulmach/orb — biblioteca rápida e limpa para operações geoespaciais. Inclui pontos, linhas, polígonos, além de algoritmos para trabalhar com GeoJSON e MVT (Mapbox Vector Tiles).
  • golang-geo — biblioteca simples para calcular distâncias usando a fórmula de haversine e determinar pontos mais próximos.


2. Determinação de localização (geolocalização) em Go



Para obter as coordenadas de um dispositivo (endereço IP, GPS) em Go, são utilizadas as seguintes abordagens:



  • Determinação por IP — biblioteca ip2location-go ou serviços como ipapi.co, ipstack. Exemplo de requisição a uma API externa:


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


  • Coordenadas GPS de dispositivo móvel — geralmente transmitidas via REST API ou WebSocket. O servidor Go recebe JSON com os campos lat e lon.
  • Uso da biblioteca golang-geo para calcular distância:


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) // São Petersburgo dist := p1.GreatCircleDistance(p2) // em quilômetros fmt.Printf("Distância: %.2f km", dist)}


3. Trabalhando com mapas: OpenStreetMap e Leaflet



Para exibir mapas em uma página web gerada pelo backend Go, a combinação mais comum é Go + Leaflet.js. Leaflet é uma biblioteca JavaScript leve para mapas interativos. Go é responsável por gerar o template HTML com as coordenadas.



3.1. Mapa básico com Leaflet e Go



Vamos criar um servidor HTTP simples que retorna uma página com um mapa:



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