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  }