point.go
func BearingTo(p1, p2 Point) float64 {
	dLon := toRadians(p2.Lon() - p1.Lon())

	lat1 := toRadians(p1.Lat())
	lat2 := toRadians(p2.Lat())

	y := math.Sin(dLon) * math.Cos(lat2)
	x := math.Cos(lat1)*math.Sin(lat2) -
		math.Sin(lat1)*math.Cos(lat2)*math.Cos(dLon)
	brng := toDegrees(math.Atan2(y, x))

	return brng
}
func BearingTo(p1, p2 Point) float64 {
	dLon := toRadians(p2.Lon() - p1.Lon())

	lat1 := toRadians(p1.Lat())
	lat2 := toRadians(p2.Lat())

	y := math.Sin(dLon) * math.Cos(lat2)
	x := math.Cos(lat1)*math.Sin(lat2) -
		math.Sin(lat1)*math.Cos(lat2)*math.Cos(dLon)
	brng := toDegrees(math.Atan2(y, x))

	return brng
}
// BearingTo returns the bearing from p1 to p2