github.com/pavlo67/common@v0.5.3/common/geolib/degrees.go (about) 1 package geolib 2 3 import "math" 4 5 type DMS struct { 6 D, M int 7 S float64 8 } 9 10 func (dms DMS) Degrees() Degrees { 11 return Degrees(float64(dms.D) + float64(dms.M)/60 + float64(dms.S)/3600) 12 } 13 14 type Degrees float64 15 16 func (degrees Degrees) DMS() DMS { 17 d := int(degrees) 18 dRest := math.Abs(float64(degrees) - float64(d)) 19 20 m := int(dRest * 60) 21 s := (dRest - float64(m)/60) * 3600 22 23 return DMS{d, m, s} 24 } 25 26 func (degrees Degrees) Angle() float64 { 27 return math.Pi * float64(degrees) / 180 28 } 29 30 func (degrees Degrees) Canon() Degrees { 31 for degrees >= 360 { 32 degrees -= 360 33 } 34 for degrees <= -360 { 35 degrees += 360 36 } 37 38 return degrees 39 } 40 41 func DegreesFromAngle(angle float64) Degrees { 42 return Degrees(180 * float64(angle) / math.Pi) 43 }