Files
SatIntel/osint/tle.go
2023-05-07 08:32:56 -07:00

83 lines
4.4 KiB
Go

package osint
import (
"fmt"
"github.com/TwiN/go-color"
"strconv"
"strings"
)
type TLE struct {
CommonName string
SatelliteCatalogNumber int
ElsetClassificiation string
InternationalDesignator string
ElementSetEpoch float64
FirstDerivativeMeanMotion float64
SecondDerivativeMeanMotion string
BDragTerm string
ElementSetType int
ElementNumber int
ChecksumOne int
OrbitInclination float64
RightAscension float64
Eccentrcity float64
Perigee float64
MeanAnamoly float64
MeanMotion float64
RevolutionNumber int
ChecksumTwo int
}
func ConstructTLE(one string, two string, three string) TLE {
tle := TLE{}
tle.CommonName = one
firstArr := strings.Fields(two)
secondArr := strings.Fields(three)
tle.SatelliteCatalogNumber, _ = strconv.Atoi(firstArr[1][:len(firstArr[1])-1])
tle.ElsetClassificiation = string(firstArr[1][len(firstArr[1])-1])
tle.InternationalDesignator = firstArr[2]
tle.ElementSetEpoch, _ = strconv.ParseFloat(firstArr[3], 64)
tle.FirstDerivativeMeanMotion, _ = strconv.ParseFloat(firstArr[4], 64)
tle.SecondDerivativeMeanMotion = firstArr[5]
tle.BDragTerm = firstArr[6]
tle.ElementSetType, _ = strconv.Atoi(firstArr[7])
tle.ElementNumber, _ = strconv.Atoi(firstArr[8][:len(firstArr[8])-1])
tle.ChecksumOne, _ = strconv.Atoi(string(firstArr[8][len(firstArr[8])-1]))
tle.SatelliteCatalogNumber, _ = strconv.Atoi(secondArr[1])
tle.OrbitInclination, _ = strconv.ParseFloat(secondArr[2], 64)
tle.RightAscension, _ = strconv.ParseFloat(secondArr[3], 64)
tle.Eccentrcity, _ = strconv.ParseFloat("0." + secondArr[4], 64)
tle.Perigee, _ = strconv.ParseFloat(secondArr[5], 64)
tle.MeanAnamoly, _ = strconv.ParseFloat(secondArr[6], 64)
tle.MeanMotion, _ = strconv.ParseFloat(secondArr[7][:11], 64)
tle.RevolutionNumber, _ = strconv.Atoi(secondArr[7][11:16])
tle.ChecksumTwo, _ = strconv.Atoi(string(secondArr[7][len(secondArr[7])-1]))
return tle
}
func PrintTLE (tle TLE) {
fmt.Println(color.Ize(color.Purple, "\n╔═════════════════════════════════════════════════════════════╗"))
fmt.Println(color.Ize(color.Purple, GenRowString("Name", tle.CommonName)))
fmt.Println(color.Ize(color.Purple, GenRowString("Satellite Catalog Number", fmt.Sprintf("%d", tle.SatelliteCatalogNumber))))
fmt.Println(color.Ize(color.Purple, GenRowString("Elset Classification", tle.ElsetClassificiation)))
fmt.Println(color.Ize(color.Purple, GenRowString("International Designator", tle.InternationalDesignator)))
fmt.Println(color.Ize(color.Purple, GenRowString("Element Set Epoch (UTC)", fmt.Sprintf("%f", tle.ElementSetEpoch))))
fmt.Println(color.Ize(color.Purple, GenRowString("1st Derivative of the Mean Motion", fmt.Sprintf("%f", tle.FirstDerivativeMeanMotion))))
fmt.Println(color.Ize(color.Purple, GenRowString("2nd Derivative of the Mean Motion", tle.SecondDerivativeMeanMotion)))
fmt.Println(color.Ize(color.Purple, GenRowString("B* Drag Term", tle.BDragTerm)))
fmt.Println(color.Ize(color.Purple, GenRowString("Element Set Type", fmt.Sprintf("%d", tle.ElementSetType))))
fmt.Println(color.Ize(color.Purple, GenRowString("Element Number", fmt.Sprintf("%d", tle.ElementNumber))))
fmt.Println(color.Ize(color.Purple, GenRowString("Checksum Line One", fmt.Sprintf("%d", tle.ChecksumOne))))
fmt.Println(color.Ize(color.Purple, GenRowString("Orbit Inclination (degrees)", fmt.Sprintf("%f", tle.OrbitInclination))))
fmt.Println(color.Ize(color.Purple, GenRowString("Right Ascension of Ascending Node (degrees)", fmt.Sprintf("%f", tle.RightAscension))))
fmt.Println(color.Ize(color.Purple, GenRowString("Eccentricity", fmt.Sprintf("%f", tle.Eccentrcity))))
fmt.Println(color.Ize(color.Purple, GenRowString("Argument of Perigee (degrees)", fmt.Sprintf("%f", tle.Perigee))))
fmt.Println(color.Ize(color.Purple, GenRowString("Mean Anomaly (degrees)", fmt.Sprintf("%f", tle.MeanAnamoly))))
fmt.Println(color.Ize(color.Purple, GenRowString("Mean Motion (revolutions/day)", fmt.Sprintf("%f", tle.MeanMotion))))
fmt.Println(color.Ize(color.Purple, GenRowString("Revolution Number at Epoch", fmt.Sprintf("%d", tle.RevolutionNumber))))
fmt.Println(color.Ize(color.Purple, GenRowString("Checksum Line Two", fmt.Sprintf("%d", tle.ChecksumTwo))))
fmt.Println(color.Ize(color.Purple, "╚═════════════════════════════════════════════════════════════╝ \n\n"))
}