Geolocalização e Mapas em Go (Golang): Revisão de Bibliotecas e Exemplos de Código
Go (Golang) é uma linguagem compilada moderna que está ganhando popularidade no desenvolvimento backend devido ao seu desempenho, simplicidade e suporte integrado para concorrência. Ao criar serviços web educacionais, logísticos, turísticos e outros, surge frequentemente a necessidade de trabalhar com dados geográficos: calcular distâncias entre pontos, verificar se coordenadas estão dentro de zonas, traçar rotas e exibir mapas. Neste artigo, vamos revisar as principais bibliotecas Go para trabalhar com geolocalização e mapas, além de fornecer exemplos práticos de código.
Principais Bibliotecas para Trabalhar com Geolocalização
1. github.com/paulmach/orb — Biblioteca universal para trabalhar com objetos geométricos
A biblioteca orb fornece tipos e funções para trabalhar com pontos, linhas, polígonos e outros primitivos geométricos. Ela suporta GeoJSON, operações de geometria booleana, projeções e transformações de coordenadas. Esta é uma biblioteca base sobre a qual muitas outras soluções são construídas.
package main
import ( "fmt" "github.com/paulmach/orb" "github.com/paulmach/orb/geo")
func main() { // Definindo dois pontos (latitude, longitude) moscow := orb.Point{37.6173, 55.7558} spb := orb.Point{30.3351, 60.0000}
// Calculando a distância em quilômetros (fórmula de haversine) distance := geo.Distance(moscow, spb) fmt.Printf("Distância de Moscou a São Petersburgo: %.2f km", distance)}2. github.com/twpayne/go-geom — Biblioteca poderosa para operações geométricas
Esta biblioteca oferece acesso de nível mais baixo à geometria e suporta muitos padrões OGC (Open Geospatial Consortium). É ideal para cálculos complexos: interseção de polígonos, bufferização, transformação de projeções.
import ( "github.com/twpayne/go-geom" "github.com/twpayne/go-geom/encoding/geojson")
// Exemplo: criando um ponto e serializando para GeoJSONpoint := geom.NewPoint(geom.XY).SetCoords(geom.Coord{37.6173, 55.7558})data, _ := geojson.Marshal(point)fmt.Println(string(data))// Saída: {"type":"Point","coordinates":[37.6173,55.7558]}3. github.com/kellydunn/golang-geo — Biblioteca simples para calcular distâncias e geocodificação
A biblioteca golang-geo fornece uma API simples para trabalhar com pontos, calcular distâncias (em milhas e quilômetros), bem como para geocodificação via Google Maps API 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) // em quilômetros fmt.Printf("Distância: %.2f km", dist)}Bibliotecas para Trabalhar com Mapas e Visualização
4. github.com/umahmood/leaflet-go — Integração com Leaflet.js para Go
Leaflet é uma das bibliotecas JavaScript mais populares para mapas interativos. leaflet-go permite gerar código HTML com mapas diretamente de uma aplicação Go. Isso é útil para sites educacionais e serviços web simples.
import "github.com/umahmood/leaflet-go"
func main() { // Criando um mapa centrado em Moscou m := leaflet.NewMap( leaflet.Center(55.7558, 37.6173), leaflet.Zoom(10), leaflet.TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"), )
// Adicionando um marcador m.AddMarker(leaflet.Marker( leaflet.LatLng(55.7558, 37.6173), leaflet.Popup("Moscou, Kremlin"), ))
// Exibindo o código HTML do mapa html, _ := m.Render() fmt.Println(html)}5. github.com/ringsaturn/leaflet — Wrapper alternativo para Leaflet
Esta biblioteca