code: func (l *Line) GeoMidpoint() *Point {
  	p := &Point{}
  
  	dLng := deg2rad(l.b.Lng() - l.a.Lng())
  
  	aLatRad := deg2rad(l.a.Lat())
  	bLatRad := deg2rad(l.b.Lat())
  
  	x := math.Cos(bLatRad) * math.Cos(dLng)
  	y := math.Cos(bLatRad) * math.Sin(dLng)
  
  	p.SetLat(math.Atan2(math.Sin(aLatRad)+math.Sin(bLatRad), math.Sqrt((math.Cos(aLatRad)+x)*(math.Cos(aLatRad)+x)+y*y)))
  	p.SetLng(deg2rad(l.a.Lng()) + math.Atan2(y, math.Cos(aLatRad)+x))
  
  	// convert back to degrees
  	p.SetLat(rad2deg(p.Lat()))
  	p.SetLng(rad2deg(p.Lng()))
  
  	return p
  }
docs: // GeoMidpoint returns the half-way point along a great circle path between the two points.