Files
where_woof/frontend/internal/sms/geo.go

17 lines
522 B
Go

package sms
import "math"
const earthRadiusM = 6371000.0
// HaversineMeters returns the great-circle distance between two points
// (lat/lng in decimal degrees) in metres.
func HaversineMeters(lat1, lng1, lat2, lng2 float64) float64 {
rad := func(d float64) float64 { return d * math.Pi / 180 }
dLat := rad(lat2 - lat1)
dLng := rad(lng2 - lng1)
a := math.Sin(dLat/2)*math.Sin(dLat/2) +
math.Cos(rad(lat1))*math.Cos(rad(lat2))*math.Sin(dLng/2)*math.Sin(dLng/2)
return 2 * earthRadiusM * math.Asin(math.Sqrt(a))
}