Go satellite
Calculate orbital information of satellites in GoLang.
I decided to port the SGP4 library to GoLang as one of my first projects with the language. I've included a test suite to ensure accuracy. The project is written primarily in Go, distributed under the BSD 2-Clause "Simplified" License license, first published in 2016. Key topics include: altitude, golang, julian, latlong, longitude.
satellite
import "github.com/joshuaferrara/go-satellite"
Intro
I decided to port the SGP4 library to GoLang as one of my first projects with the language. I've included a test suite to ensure accuracy.
Usage
Constants
goconst DEG2RAD float64 = math.Pi / 180.0
goconst RAD2DEG float64 = 180.0 / math.Pi
goconst TWOPI float64 = math.Pi * 2.0
goconst XPDOTP float64 = 1440.0 / (2.0 * math.Pi)
func ECIToLLA
gofunc ECIToLLA(eciCoords Vector3, gmst float64) (altitude, velocity float64, ret LatLong)
Convert Earth Centered Inertial coordinated into equivalent latitude, longitude,
altitude and velocity. Reference: http://celestrak.com/columns/v02n03/
func GSTimeFromDate
gofunc GSTimeFromDate(year, mon, day, hr, min, sec int) float64
Calc GST given year, month, day, hour, minute and second
func JDay
gofunc JDay(year, mon, day, hr, min, sec int) float64
Calc julian date given year, month, day, hour, minute and second the julian date
is defined by each elapsed day since noon, jan 1, 4713 bc.
func Propagate
gofunc Propagate(sat Satellite, year int, month int, day, hours, minutes, seconds int) (position, velocity Vector3)
Calculates position and velocity vectors for given time
func ThetaG_JD
gofunc ThetaG_JD(jday float64) (ret float64)
Calculate GMST from Julian date. Reference: The 1992 Astronomical Almanac, page
B6.
type LatLong
gotype LatLong struct { Latitude, Longitude float64 }
Holds latitude and Longitude in either degrees or radians
func LatLongDeg
gofunc LatLongDeg(rad LatLong) (deg LatLong)
Convert LatLong in radians to LatLong in degrees
type LookAngles
gotype LookAngles struct { Az, El, Rg float64 }
Holds an azimuth, elevation and range
func ECIToLookAngles
gofunc ECIToLookAngles(eciSat Vector3, obsCoords LatLong, obsAlt, jday float64) (lookAngles LookAngles)
Calculate look angles for given satellite position and observer position obsAlt
in km Reference: http://celestrak.com/columns/v02n02/
type Satellite
gotype Satellite struct { Line1 string Line2 string }
Struct for holding satellite information during and before propagation
func ParseTLE
gofunc ParseTLE(line1, line2 string, gravConst Gravity) (sat Satellite)
Parses a two line element dataset into a Satellite struct
func TLEToSat
gofunc TLEToSat(line1, line2 string, gravConst Gravity) Satellite
Converts a two line element data set into a Satellite struct and runs sgp4init
type Vector3
gotype Vector3 struct { X, Y, Z float64 }
Holds X, Y, Z position
func ECIToECEF
gofunc ECIToECEF(eciCoords Vector3, gmst float64) (ecfCoords Vector3)
Convert Earth Centered Intertial coordinates into Earth Cenetered Earth Final
coordinates Reference: http://ccar.colorado.edu/ASEN5070/handouts/coordsys.doc
func LLAToECI
gofunc LLAToECI(obsCoords LatLong, alt, jday float64) (eciObs Vector3)
Convert latitude, longitude and altitude into equivalent Earth Centered
Intertial coordinates Reference: The 1992 Astronomical Almanac, page K11.
func NewSpacetrack
gofunc NewSpacetrack(username, password string) *Spacetrack
Initialise a spacetrack API for fetching TLEs
func Spacetrack.GetTLE()
gofunc (s *Spacetrack) GetTLE(catid uint64, ts time.Time, gravConst Gravity) (Satellite, error)
Get an initialized Satellite based on the latest TLE before the given time.
Contributors
Showing top 7 contributors by commit count.
