All Projects → parzivail → SGP.NET

parzivail / SGP.NET

Licence: MIT license
C# SGP4 Satellite Prediction Library. Load satellites from TLEs, convert between coordinate systems and reference frames, observe satellites from ground stations, and more.

Programming Languages

C#
18002 projects

Projects that are alternatives of or similar to SGP.NET

Gpredict
Gpredict satellite tracking application
Stars: ✭ 484 (+3126.67%)
Mutual labels:  tracking, satellite
cesium-satellites
View the orbit of satellites in a Cesium viewer, derived from a two line element list
Stars: ✭ 45 (+200%)
Mutual labels:  satellite, orbit
go-satellite
Calculate orbital information of satellites in GoLang.
Stars: ✭ 55 (+266.67%)
Mutual labels:  satellite, sgp4
keeptrack.space
🌎📡 TypeScript Astrodynamics Software for Non-Engineers. 3D Visualization of satellite data and the sensors that track them.
Stars: ✭ 61 (+306.67%)
Mutual labels:  tracking, orbit
cpp-iout
C++ Implementation of IOU Tracker presented in AVSS17
Stars: ✭ 33 (+120%)
Mutual labels:  tracking
whotracks.me
Data from the largest and longest measurement of online tracking.
Stars: ✭ 288 (+1820%)
Mutual labels:  tracking
edusense
EduSense: Practical Classroom Sensing at Scale
Stars: ✭ 44 (+193.33%)
Mutual labels:  tracking
BirdsEye
Applying Perspective transformations to 2d images.
Stars: ✭ 22 (+46.67%)
Mutual labels:  tracking
6DOF tracking evaluation
Code visualize and evaluate the dataset from "A Framework for Evaluating 6-DOF Object Trackers".
Stars: ✭ 34 (+126.67%)
Mutual labels:  tracking
Object-Detection-And-Tracking
Target detection in the first frame and Tracking target by SiamRPN.
Stars: ✭ 33 (+120%)
Mutual labels:  tracking
rio-rgbify
Encoded arbitrary bit depth rasters in psuedo base-256
Stars: ✭ 62 (+313.33%)
Mutual labels:  satellite
goestools
📡 LRIT demodulator from weather satellite GEO-KOMPSAT-2A (GK-2A).
Stars: ✭ 23 (+53.33%)
Mutual labels:  satellite
satproc
🛰️ Python library and CLI tools for processing geospatial imagery for ML
Stars: ✭ 27 (+80%)
Mutual labels:  satellite
rio-glui
Explore CloudOptimized geotiff on your browser using Mapbox GL JS
Stars: ✭ 47 (+213.33%)
Mutual labels:  satellite
georaster-layer-for-leaflet
Display GeoTIFFs and soon other types of raster on your Leaflet Map
Stars: ✭ 168 (+1020%)
Mutual labels:  satellite
ARFaceFilter
Javascript/WebGL lightweight face tracking library designed for augmented reality webcam filters. Features : multiple faces detection, rotation, mouth opening. Various integration examples are provided (Three.js, Babylon.js, FaceSwap, Canvas2D, CSS3D...).
Stars: ✭ 72 (+380%)
Mutual labels:  tracking
The-Purchase-and-Redemption-Forecast-Challenge-baseline
天池“资金流入流出预测——挑战baseline”的解决方案,线上效果143.5
Stars: ✭ 78 (+420%)
Mutual labels:  prediction
epictracker
A demo of how can I track you using fingerprinting and some automated lookups and stuff, using modern Javascript APIs
Stars: ✭ 17 (+13.33%)
Mutual labels:  tracking
mixpanel-react-native
Official React Native Tracking Library for Mixpanel Analytics
Stars: ✭ 69 (+360%)
Mutual labels:  tracking
siamfc-pytorch-gpu-benchmark
No description or website provided.
Stars: ✭ 17 (+13.33%)
Mutual labels:  tracking

SGP.NET

SGP.NET is a multi-function library with support for loading satellites from TLEs, converting between coordinate systems and reference frames, observing satellites from ground stations, and creating schedules of observations over periods of time.

See the wiki for complete documentation.

NuGet

https://www.nuget.org/packages/SGP.NET/

Getting Started

// Create a set of TLE strings
var tle1 = "ISS (ZARYA)";
var tle2 = "1 25544U 98067A   19034.73310439  .00001974  00000-0  38215-4 0  9991";
var tle3 = "2 25544  51.6436 304.9146 0005074 348.4622  36.8575 15.53228055154526";

// Create a satellite from the TLEs
var sat = new Satellite(tle1, tle2, tle3);

// Set up our ground station location
var location = new GeodeticCoordinate(Angle.FromDegrees(40.689236), Angle.FromDegrees(-74.044563), 0);

// Create a ground station
var groundStation = new GroundStation(location);

// Observe the satellite
var observation = groundStation.Observe(sat, new DateTime(2019, 3, 5, 3, 45, 12, DateTimeKind.Utc));

Console.WriteLine(observation);
// -> TopocentricObservation[Azimuth=Angle[17.7964900382581°], Elevation=Angle[-54.1738348534288°], Range=10962.2688992742km, RangeRate=3.29677171042301km/s]

Creating TLEs

Two-Line Element sets can actually come in two- or three-line formats. SGP.NET supports both.

From two strings

var tleString1 = "1 25544U 98067A   19034.73310439  .00001974  00000-0  38215-4 0  9991";
var tleString2 = "2 25544  51.6436 304.9146 0005074 348.4622  36.8575 15.53228055154526";

var tle = new Tle(tleString1, tleString2);

From three strings (two strings and a name)

var tleString0 = "ISS (ZARYA)";
var tleString1 = "1 25544U 98067A   19034.73310439  .00001974  00000-0  38215-4 0  9991";
var tleString2 = "2 25544  51.6436 304.9146 0005074 348.4622  36.8575 15.53228055154526";

var tle = new Tle(tleString0, tleString1, tleString2);

Obtaining TLEs

From a file

// Create a provider
var provider = new LocalTleProvider(true, "tles.txt");

// Get every TLE
var tles = provider.GetTles();

// Alternatively get a specific satellite's TLE
var issTle = provider.GetTle(25544);

From a URL

Without local caching

// Remote URL
var url = new Uri("https://celestrak.com/NORAD/elements/weather.txt");

// Create a provider
var provider = new RemoteTleProvider(true, url);

// Get every TLE
var tles = provider.GetTles();

// Alternatively get a specific satellite's TLE
var issTle = provider.GetTle(25544);

With local caching

// Remote URL
var url = new Uri("https://celestrak.com/NORAD/elements/weather.txt");

// Create a provider whose cache is renewed every 12 hours
var provider = new CachingRemoteTleProvider(true, TimeSpan.FromHours(12), "cachedTles.txt", url);

// Get every TLE
var tles = provider.GetTles();

// Alternatively get a specific satellite's TLE
var issTle = provider.GetTle(25544);

More details on Observe

The Observe method of the Groundstation class may accept a time interval (in UTC) in which to find multiple possible visibility overpasses for a satellite. Here we determine passes for the next 24 hour period, using a time step of 10 seconds.

var observations = groundStation.Observe(sat, DateTime.UtcNow, DateTime.UtcNow + TimeSpan.FromHours(24), TimeSpan.FromSeconds(10));

The time step provided to use with groundstation.Observe is used to coarsely perform an initial search for the start, end, and time of max elevation of each overpass, which are then determined to a higher resolution using an interval halving approach. The resolution parameter sets the number of decimal places (in seconds) for determined the time above. This allows using a large time step to for finding the overpasses. Here we use a time step of 10 seconds, but determine the time to a resolution of a hundredth of a second.

var observations = groundStation.Observe(sat, DateTime.UtcNow, DateTime.UtcNow + TimeSpan.FromHours(24), TimeSpan.FromSeconds(10), resolution: 2);

The default resolution is 3.

The Observe method also provides a minElevation parameter, with a default of 0. E.g.

observations = groundstation.Observe(sat, DateTime.UtcNow, DateTime.UtcNow + TimeSpan.FromHours(24), TimeSpan.FromSeconds(10), minElevation: Angle.FromDegrees(7.5));

As well, the Observe method provides clipToStartTime and clipToEndTime parameters, which will clip the start time of the first observation to the start parameter and the end time of the last observation to the end parameter passed to Observe respectively. The default value for clipToStartTime is true (the assumption being that most users are generally concerned with future upcoming passes only) and the default value for clipToEndTime is false (the assumption being that most users do not want to truncate an overpass). Here we clip the observations to the provided time interval.

observations = groundstation.Observe(sat, DateTime.UtcNow, DateTime.UtcNow + TimeSpan.FromHours(24), TimeSpan.FromSeconds(10), clipToEndTime: true)

Further Reading

More examples coming soon. See the wiki for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].