Merge lp:~jlcanales-gasco/stellarium/satellite-plugin into lp:stellarium

Proposed by J.L. Canales
Status: Superseded
Proposed branch: lp:~jlcanales-gasco/stellarium/satellite-plugin
Merge into: lp:stellarium
Diff against target: 12207 lines (+7211/-3735)
44 files modified
doc/builtinScriptFunctions.doxygen (+37/-0)
doc/scripting.doxygen (+8/-1)
plugins/Satellites/satellites.json (+1116/-909)
plugins/Satellites/src/CMakeLists.txt (+26/-8)
plugins/Satellites/src/Satellite.cpp (+208/-36)
plugins/Satellites/src/Satellite.hpp (+43/-3)
plugins/Satellites/src/Satellites.hpp (+1/-1)
plugins/Satellites/src/gsatellite/gException.hpp (+44/-0)
plugins/Satellites/src/gsatellite/gMatrix.cpp (+290/-0)
plugins/Satellites/src/gsatellite/gMatrix.hpp (+86/-0)
plugins/Satellites/src/gsatellite/gMatrixTempl.hpp (+117/-0)
plugins/Satellites/src/gsatellite/gObserver.cpp (+88/-0)
plugins/Satellites/src/gsatellite/gObserver.hpp (+114/-0)
plugins/Satellites/src/gsatellite/gSatTEME.cpp (+156/-0)
plugins/Satellites/src/gsatellite/gSatTEME.hpp (+128/-0)
plugins/Satellites/src/gsatellite/gTime.cpp (+347/-0)
plugins/Satellites/src/gsatellite/gTime.hpp (+329/-0)
plugins/Satellites/src/gsatellite/gTimeSpan.cpp (+217/-0)
plugins/Satellites/src/gsatellite/gVector.cpp (+105/-0)
plugins/Satellites/src/gsatellite/gVector.hpp (+78/-0)
plugins/Satellites/src/gsatellite/gVectorTempl.hpp (+107/-0)
plugins/Satellites/src/gsatellite/mathUtils.cpp (+63/-0)
plugins/Satellites/src/gsatellite/mathUtils.hpp (+42/-0)
plugins/Satellites/src/gsatellite/sgp4ext.cpp (+724/-0)
plugins/Satellites/src/gsatellite/sgp4ext.h (+97/-0)
plugins/Satellites/src/gsatellite/sgp4io.cpp (+261/-0)
plugins/Satellites/src/gsatellite/sgp4io.h (+46/-0)
plugins/Satellites/src/gsatellite/sgp4unit.cpp (+2113/-0)
plugins/Satellites/src/gsatellite/sgp4unit.h (+126/-0)
plugins/Satellites/src/gsatellite/stdsat.h (+35/-0)
plugins/Satellites/src/gui/SatellitesDialog.cpp (+11/-0)
plugins/Satellites/src/gui/SatellitesDialog.hpp (+1/-0)
plugins/Satellites/src/gui/satellitesDialog.ui (+10/-2)
plugins/Satellites/src/sgp4sdp4/1_COPYING (+0/-25)
plugins/Satellites/src/sgp4sdp4/2_README (+0/-167)
plugins/Satellites/src/sgp4sdp4/README (+0/-7)
plugins/Satellites/src/sgp4sdp4/sgp4sdp4.c (+0/-1072)
plugins/Satellites/src/sgp4sdp4/sgp4sdp4.h (+0/-237)
plugins/Satellites/src/sgp4sdp4/sgp_in.c (+0/-251)
plugins/Satellites/src/sgp4sdp4/sgp_math.c (+0/-286)
plugins/Satellites/src/sgp4sdp4/sgp_obs.c (+0/-214)
plugins/Satellites/src/sgp4sdp4/sgp_time.c (+0/-428)
plugins/Satellites/src/sgp4sdp4/solar.c (+0/-69)
util/refactor.pl (+37/-19)
To merge this branch: bzr merge lp:~jlcanales-gasco/stellarium/satellite-plugin
Reviewer Review Type Date Requested Status
J.L. Canales (community) Needs Resubmitting
Bogdan Marinov Needs Fixing
Review via email: mp+38067@code.launchpad.net

This proposal has been superseded by a proposal from 2010-10-30.

Description of the change

SGP4/SDP4 core refactored to use the revised Spacetrack report N#3 (including Spacetrack report N#6). There is an inform about all the improvements in the next URL: http://www.celestrak.com/publications/AIAA/2006-6753

Main advantages of this code are:
       - Better performance. The main computation process and the Kepler Equation resolution has been optimized.
       - More precision. Some instabilities in the kepler equation and the integrals problems has been resolved too.
       - Easy to use. I have wrapped the new SGP4/SDP4 code with an object oriented interface that aisle the Satellite class methods from the complexity of the SGP4/SDP4 functions.

Satellite sky-path drawing
  This is a functionality asked by some friends that take CCD Astronomical photographs and needs to predict if a satellite cross the photographed field. This feature can be activated changing a flag (draworb) in the satellites.json file (similar as the visible flag).

This code has been tested in Ubuntu 10.04 LTS

To post a comment you must log in.
Revision history for this message
Bogdan Marinov (daggerstab) wrote :

I skimmed the code and I immediately saw a problem that needs to be fixed before proceeding with a merge.

It seems that you've used an old version of the source as the base for your modifications. As a result, they overwrite the changes I made to fix bug #616627:
https://bugs.launchpad.net/stellarium/+bug/616627

Here are the relevant revisions:
http://bazaar.launchpad.net/~stellarium/stellarium/trunk/revision/4756
http://bazaar.launchpad.net/~stellarium/stellarium/trunk/revision/4757 (this is just an update of the TLEs)
http://bazaar.launchpad.net/~stellarium/stellarium/trunk/revision/4758

The links are for information only, just use the most recent code.

After you merge, you can update the TLEs again, just make sure that no satellites have been dropped off the lists at celestrak.com or renamed (again :(). My patch provides a log message that reports how many satellites have been updated out of the total number.

review: Needs Fixing
4766. By J.L. Canales

Bogdan Marinov review notes fixed. Code base actualized to Rev. N 4766

4767. By J.L. Canales

Fixed. Draw satellite skypath configuration desapear after TLE update

4768. By J.L. Canales

Satellite plugin: TLE data actualized

Revision history for this message
J.L. Canales (jlcanales-gasco) wrote :

Hi Bodgan,
   I have fixed the problems with the base version. Now the source code is based in the Rev. No. 4766.
   Additionaly, I have updated the satellite TLE data.

Regards,

review: Needs Resubmitting
Revision history for this message
Matthew Gates (matthew-porpoisehead) wrote :

I did a local merge of your code. It built and ran fine. Thank you
very much for your work - it looks very interesting.

Some comments:

1. Apart from the effort required, is there is good reason not recode
to use Stellarium's existing matrix classes instead of having another
set of matrix code?

2. The code formatting should be brought into conformity with the rest
of Stellarium's code. This includes indentation, variable names,
header #ifndef flags. The recode.pl script and astyle program make
this pretty quick to do.

3a. I would like to see the orbit lines fading in and out rather than
abruptly ending (progressively drop the alpha for the segments towards
the ends of the orbit lines).

3b. Orbit lines should be taken from the color in the satellites.json
file (I think they are all the same blue color at the moment?)

4. You wouldn't happen to have a method to determine the brightness of
a satellite would you (shadow & apparent magnitude when not is
shadow)? I imagine this would require some sort of size and/or albedo
data to be added to the satellites.json. If you have some code for
predicting Iridium flares that would be really amazing!

Matthew

On 9 October 2010 14:39, J.L. Canales <email address hidden> wrote:
> J.L. Canales has proposed merging lp:~jlcanales-gasco/stellarium/satellite-plugin into lp:stellarium.
>
> Requested reviews:
>  Stellarium (stellarium)
>
>
> SGP4/SDP4 core refactored to use the revised Spacetrack report N#3 (including Spacetrack report N#6). There is an inform about all the improvements in the next URL: http://www.celestrak.com/publications/AIAA/2006-6753
>
> Main advantages of this code are:
>       - Better performance. The main computation process and the Kepler Equation resolution has been optimized.
>       - More precision. Some instabilities in the kepler equation and the integrals problems has been resolved too.
>       - Easy to use. I have wrapped the new SGP4/SDP4 code with an object oriented interface that aisle the Satellite class methods from the complexity of the SGP4/SDP4 functions.
>
> Satellite sky-path drawing
>  This is a functionality asked by some friends that take CCD Astronomical photographs and needs to predict if a satellite cross the photographed field. This feature can be activated changing a flag (draworb) in the satellites.json file (similar as the visible flag).
>
> This code has been tested in Ubuntu 10.04 LTS
> --
> https://code.launchpad.net/~jlcanales-gasco/stellarium/satellite-plugin/+merge/38067
> Your team Stellarium is requested to review the proposed merge of lp:~jlcanales-gasco/stellarium/satellite-plugin into lp:stellarium.

Revision history for this message
J.L. Canales (jlcanales-gasco) wrote :

Hi Matthew,
   Thank you for your comments, I will answer your questions.
>
> 1. Apart from the effort required, is there is good reason not recode
> to use Stellarium's existing matrix classes instead of having another
> set of matrix code?

   I use this classes because I am reusing code from other of my projects originally based on
stl library. There aren't any technical reason, so it can be refactored using Stellarium's and QT's classes.

>
> 2. The code formatting should be brought into conformity with the rest
> of Stellarium's code. This includes indentation, variable names,
> header #ifndef flags. The recode.pl script and astyle program make
> this pretty quick to do.

OK, I'll do it.

>
> 3a. I would like to see the orbit lines fading in and out rather than
> abruptly ending (progressively drop the alpha for the segments towards
> the ends of the orbit lines).
Nice visual effect, I'll try to get it..

>
> 3b. Orbit lines should be taken from the color in the satellites.json
> file (I think they are all the same blue color at the moment?)
Ok, I'll do it..

>
> 4. You wouldn't happen to have a method to determine the brightness of
> a satellite would you (shadow & apparent magnitude when not is
> shadow)? I imagine this would require some sort of size and/or albedo
> data to be added to the satellites.json. If you have some code for
> predicting Iridium flares that would be really amazing!

I started to study how to model Iridium flares some time ago. It's not easy to find equations to predict it. Nevertheless, I found a java open source code (iridiumflares.sourceforge.com) that implements that feature. I am studying this code in order to port it to C++ but I have not finished yet.

Regards,

Revision history for this message
Matthew Gates (matthew-porpoisehead) wrote :

I look forward to seeing your changes.

Revision history for this message
Matthew Gates (matthew-porpoisehead) wrote :

I've made a change to the default satellites.json, and to Satellites.cpp. This should fix the missing group values. You'll need to merge this into your branch.

P.S. I changed the draorb key in the json file to draw_orbit, which I feel is easier to understand. You should change your code accordingly. Thanks.

Revision history for this message
Matthew Gates (matthew-porpoisehead) wrote :

Actually... I created my own branch which is trunk with your changes merged and a few extras from me. http://bazaar.launchpad.net/~matthew-porpoisehead/stellarium/satellites

4769. By J.L. Canales

Sat. Plugin: Satellite skypath line color setup available in sattelites.json

4770. By J.L. Canales

Sat. Plugin: Satellite skypath line fading in and out at the end of the orbit lines

Revision history for this message
J.L. Canales (jlcanales-gasco) wrote :

> Actually... I created my own branch which is trunk with your changes merged
> and a few extras from me. http://bazaar.launchpad.net/~matthew-
> porpoisehead/stellarium/satellites

Thanks, I'm merging your improvements to be synchronized.

4771. By J.L. Canales

merge: Matthew Gates Orbit lines fading solution

Revision history for this message
J.L. Canales (jlcanales-gasco) wrote :

I believe your solution to implement orbit lines fading in and out is better than mine, so I merged it in my branch.

   We have developed the 3a and 3b points of your previous comment. Now, I'm dealing with points 2 and 1.

Revision history for this message
Matthew Gates (matthew-porpoisehead) wrote :

I made it a bit more efficient by making only a single call to drawFromArray for the center segments of the line which are all the same color.

I also reformatted some of the gSatellite code to match the Stellarium coding standards better.

Please pull the changes from my branch and if you're happy with it make another merge proposal thing for lp:stellarium. I can do it myself from my branch, but I would prefer for you to get the commit credit :-)

Revision history for this message
J.L. Canales (jlcanales-gasco) wrote :

Many thanks,
  I'll execute my unit tests to validate the changes and I'll propose another merge...

> I made it a bit more efficient by making only a single call to drawFromArray
> for the center segments of the line which are all the same color.
>
> I also reformatted some of the gSatellite code to match the Stellarium coding
> standards better.
>
> Please pull the changes from my branch and if you're happy with it make
> another merge proposal thing for lp:stellarium. I can do it myself from my
> branch, but I would prefer for you to get the commit credit :-)

4772. By J.L. Canales

gSatellite code style adapted to stellarium rules

4773. By J.L. Canales

optimise satellite orbit drawing by making only a single call to drawFromArray for middle segments which are all the same color

4774. By J.L. Canales

Actualiced code base from trunk Rev. No 4776

4775. By J.L. Canales

FIX: Use Orbit Color seting up in satelites.json. Before this fix, orbit color was always equal to hint color

4776. By J.L. Canales

merge Matthew stylesheet and satellite dialog changes

4777. By J.L. Canales

Optimized use of setVertexArray in Satellite::drawOrbit method

4778. By J.L. Canales

Rendering of the orbits goes funny with non-stereo projection modes

4779. By J.L. Canales

[merge] Updated Author list; my e-mail included

4780. By J.L. Canales

merge Matthew Gates drawo orbit lines optimization and night style available

4781. By J.L. Canales

merge trunk changes rev. 4797

4782. By J.L. Canales

merge trunk rev 4806

4783. By J.L. Canales

Fix: Orbit line little bit off satellite icon

4784. By J.L. Canales

rebase trunk changes rev 4808

4785. By J.L. Canales

Rebase code from trunk Rev. 4821

4786. By J.L. Canales

Fix: First point of orbit line bad sited when time jumps more than orbitLineSegments*orbitLineSegmentDuration

4787. By J.L. Canales

Fix: breaking the smooth fade at the leading edge of the orbit line.

4788. By J.L. Canales

Rebase trunk code Rev 4856. Unuseless gSatellite code removed. gSatStelWrapper declared

4789. By J.L. Canales

SubPoint calculation gSatTEME inteface change to make easier wrapper implementation

4790. By J.L. Canales

gSatStelWrapper methods getTEMEPos, getTEMEVel, getSubPoint methods implemented

4791. By J.L. Canales

gSatStelWrapper getAltAz method implemented

4792. By J.L. Canales

Satellite class working with gSatStelWrapper. Orbit lines disabled, not refactored yet

4793. By J.L. Canales

Orbit lines code refactored. Using gTime classto time management

4794. By J.L. Canales

Clean unused files. gObserver class

4795. By J.L. Canales

Code standars application

4796. By J.L. Canales

gSatStelWrapper name changed to adapt to naming structure of other wrappers in stellarium. (starWraper)

4797. By J.L. Canales

Implemented Visibility prediction method in gSatWrapper class

4798. By J.L. Canales

Rebase trunk code Rev. 4875

4799. By J.L. Canales

Fix: redraw orbit lines after load new TLE data

4800. By J.L. Canales

Fix: Bug updating tle data in satelites.json

4801. By J.L. Canales

clean useless code

4802. By J.L. Canales

Fix: Problem detecting when the site is in dark earth side. Code formated folowing standarts

4803. By J.L. Canales

Fix: Satellite AlAz pos calculation bug.

4804. By J.L. Canales

merge with trunk rev. 4878

4805. By J.L. Canales

Update satellites and TLE in satellite.json

4806. By J.L. Canales

Updated GPS frecuencies with Lennert Buytenhek information

4807. By J.L. Canales

Set variables name accord to stellarium standarts

4808. By J.L. Canales

foreach clauses optimization

4809. By J.L. Canales

rebase trunk ver.4886

4810. By J.L. Canales

TLE data in satelites.json actualized

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'doc/builtinScriptFunctions.doxygen'
--- doc/builtinScriptFunctions.doxygen 1970-01-01 00:00:00 +0000
+++ doc/builtinScriptFunctions.doxygen 2010-10-30 00:49:41 +0000
@@ -0,0 +1,37 @@
1/*
2 * Stellarium
3 * Copyright (C) 2010 Matthew Gates
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 */
19
20/*!
21
22@page builtinScriptFunctions Built in Script Functions
23
24<B>waitFor(dt, spec="utc")</B>
25
26Waits until a specified simulation date/time.
27
28This function will take into account the rate (and direction) in which simulation
29time is passing. e.g. if a future date is specified and the time is moving backwards,
30the function will return immediately. If the time rate is 0, the function will not
31wait. This is to prevent infinite wait time.
32
33Parameters:
34 - dt : the date string to use
35 - spec : "local" or "utc".
36
37*/
038
=== modified file 'doc/scripting.doxygen'
--- doc/scripting.doxygen 2010-05-19 06:40:34 +0000
+++ doc/scripting.doxygen 2010-10-30 00:49:41 +0000
@@ -1,6 +1,6 @@
1/*1/*
2 * Stellarium2 * Stellarium
3 * Copyright (C) 2009 Matthew Gates3 * Copyright (C) 2010 Matthew Gates
4 *4 *
5 * This program is free software; you can redistribute it and/or5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License6 * modify it under the terms of the GNU General Public License
@@ -75,6 +75,13 @@
75 - StelSkyDrawer75 - StelSkyDrawer
76 - StelSkyLayerMgr76 - StelSkyLayerMgr
7777
78@section built_in_script_functions Built in Script Functions
79
80In addition to the public slots of the classes described above, some functionality
81is provided by functions implemented within the scripting language. These are
82made available from the core object, and are similar in operation to the
83public slots of StelMainScriptAPI. See @ref builtinScriptFunctions for details.
84
78@section script_console Script Console85@section script_console Script Console
7986
80Note: The Script Console has been enabled by default since version 0.10.5. 87Note: The Script Console has been enabled by default since version 0.10.5.
8188
=== modified file 'plugins/Satellites/satellites.json'
--- plugins/Satellites/satellites.json 2010-10-27 15:28:33 +0000
+++ plugins/Satellites/satellites.json 2010-10-30 00:49:41 +0000
@@ -1,187 +1,39 @@
1{1{
2 "creator": "Satellites plugin (update)",2 "creator": "Satellites plugin (update)",
3 "hintColor": [0, 0.5, 0.5],3 "hintColor": [0, 0.5, 0.5],
4 "orbitColor": [0, 0.5, 0.5],
4 "satellites": 5 "satellites":
5 {6 {
6 "AAU CUBESAT": 7 "AAU CUBESAT":
7 {8 {
8 "comms": [],9 "comms": [],
9 "tle1": "1 27846U 03031G 10010.54313843 .00000017 00000-0 28199-4 0 6580",10 "groups": [],
10 "tle2": "2 27846 98.7035 22.6880 0008761 245.5711 114.4553 14.21010978338790",11 "orbitColor": [0, 0, 0],
11 "draw_orbit": false,12 "orbitVisible": false,
12 "visible": false13 "tle1": "1 27846U 03031G 10300.91786855 .00000087 00000-0 60137-4 0 8600",
13 },14 "tle2": "2 27846 98.7017 308.8055 0009783 122.9220 237.2907 14.21060728380030",
14 "PHASE 3B (AO-10)":
15 {
16 "description": "Amateur satellite",
17 "groups": ["amateur", "non-operational"],
18 "tle1": "1 14129U 83058B 09080.32998673 -.00000327 00000-0 10000-3 0 6360",
19 "tle2": "2 14129 25.9652 165.8235 5982871 207.6161 100.7646 2.05871463165845",
20 "draw_orbit": false,
21 "visible": false
22 },
23 "PACSAT (AO-16)":
24 {
25 "description": "Amateur satellite",
26 "groups": ["amateur", "non-operational"],
27 "tle1": "1 20439U 90005D 09080.85236265 .00000014 00000-0 20602-4 0 5632",
28 "tle2": "2 20439 98.2700 53.2702 0011918 71.1776 289.0705 14.31818920 653",
29 "draw_orbit": false,
30 "visible": false15 "visible": false
31 },16 },
32 "ARSENE (AO-24)": 17 "ARSENE (AO-24)":
33 {18 {
34 "description": "Amateur satellite",19 "comms": [],
35 "groups": ["amateur", "non-operational"],20 "groups": ["amateur", "non-operational"],
36 "tle1": "1 22654U 93031B 09078.43825483 -.00000132 00000-0 10000-3 0 2462",21 "orbitColor": [0, 0, 0],
37 "tle2": "2 22654 5.1398 339.1447 2877460 155.4874 221.3758 1.42205192 77846",22 "orbitVisible": false,
38 "draw_orbit": false,23 "tle1": "1 22654U 93031B 10296.29188703 -.00000103 00000-0 10000-3 0 4131",
39 "visible": false24 "tle2": "2 22654 4.6448 327.4414 2846429 190.3502 161.8369 1.42205681 86138",
40 },
41 "EYESAT-1 (AO-27)":
42 {
43 "comms": [
44 {
45 "description": "uplink",
46 "frequency": 145.85
47 },
48 {
49 "description": "downlink",
50 "frequency": 145.2
51 }],
52 "description": "Amateur satellite",
53 "groups": ["amateur"],
54 "tle1": "1 22825U 93061C 09080.84794649 .00000017 00000-0 23242-4 0 2051",
55 "tle2": "2 22825 98.4253 37.0634 0008629 156.2036 203.9551 14.29261103807439",
56 "draw_orbit": false,
57 "visible": true
58 },
59 "PHASE 3D (AO-40)":
60 {
61 "comms": [
62 {
63 "description": "Beacon",
64 "frequency": 145.898
65 }],
66 "description": "AMSAT-OSCAR 40 (Phase 3D)",
67 "groups": ["amateur"],
68 "tle1": "1 26609U 00072B 09080.26545799 -.00000301 00000-0 10000-3 0 2044",
69 "tle2": "2 26609 8.9892 27.3596 7956558 186.7198 145.1448 1.25584591 38523",
70 "draw_orbit": false,
71 "visible": true
72 },
73 "OSCAR 5 (AO-5)":
74 {
75 "description": "Amateur satellite",
76 "groups": ["amateur", "non-operational"],
77 "tle1": "1 04321U 70008B 09080.96250683 -.00000031 00000-0 10000-3 0 1420",
78 "tle2": "2 04321 102.1329 90.4257 0027646 145.0891 215.1997 12.52156131789847",
79 "draw_orbit": false,
80 "visible": false
81 },
82 "ECHO (AO-51)":
83 {
84 "comms": [
85 {
86 "description": "uplink",
87 "frequency": 145.92,
88 "modulation": "FM/Voice"
89 },
90 {
91 "description": "downlink",
92 "frequency": 435.15,
93 "modulation": "FM/Voice"
94 }],
95 "description": "Amateur satellite",
96 "groups": ["amateur"],
97 "tle1": "1 28375U 04025K 09080.66057599 .00000001 00000-0 12813-4 0 3455",
98 "tle2": "2 28375 98.0561 95.3557 0085140 31.1071 329.5121 14.40636066248352",
99 "draw_orbit": false,
100 "visible": true
101 },
102 "OSCAR 6 (AO-6)":
103 {
104 "description": "Amateur satellite",
105 "groups": ["amateur", "non-operational"],
106 "tle1": "1 06236U 72082B 09080.97286453 -.00000027 00000-0 10000-3 0 1476",
107 "tle2": "2 06236 101.4018 97.8648 0004124 61.3429 298.8059 12.53076701666485",
108 "draw_orbit": false,
109 "visible": false
110 },
111 "OSCAR 7 (AO-7)":
112 {
113 "comms": [
114 {
115 "description": "200mW Beacon used with Modes B & C",
116 "frequency": 145.972
117 },
118 {
119 "description": "downlink",
120 "frequency": 145.95,
121 "modulation": "Modes B & C"
122 },
123 {
124 "description": "uplink",
125 "frequency": 145.9,
126 "modulation": "Mode A"
127 },
128 {
129 "description": "downlink",
130 "frequency": 29.45,
131 "modulation": "Mode A"
132 },
133 {
134 "description": "200mW Beacon used with Mode A",
135 "frequency": 29.502
136 },
137 {
138 "frequency": 2304.1,
139 "modulation": "40 mW Beacon - only when commanded"
140 },
141 {
142 "description": "uplink",
143 "frequency": 432.15,
144 "modulation": "Modes B & C"
145 }],
146 "description": "AMSAT-OSCAR 7 (Phase-IIB)",
147 "groups": ["amateur"],
148 "tle1": "1 07530U 74089B 09081.09982174 -.00000027 00000-0 10000-3 0 4327",
149 "tle2": "2 07530 101.4356 108.9488 0012080 79.3798 280.8632 12.53575454571800",
150 "draw_orbit": false,
151 "visible": true
152 },
153 "OSCAR 8 (AO-8)":
154 {
155 "description": "Amateur satellite",
156 "groups": ["amateur", "non-operational"],
157 "tle1": "1 10703U 78026B 09081.15228109 .00000030 00000-0 50534-4 0 4427",
158 "tle2": "2 10703 98.8443 129.5050 0007638 50.2967 309.8869 13.98840358583855",
159 "draw_orbit": false,
160 "visible": false25 "visible": false
161 },26 },
162 "CANX-1": 27 "CANX-1":
163 {28 {
164 "comms": [],29 "comms": [],
165 "tle1": "1 27847U 03031H 10010.55450479 .00000005 00000-0 22661-4 0 6786",30 "groups": [],
166 "tle2": "2 27847 98.7031 22.6860 0008813 243.1062 116.9211 14.20990414338740",31 "orbitColor": [0, 0, 0],
167 "draw_orbit": false,32 "orbitVisible": false,
33 "tle1": "1 27847U 03031H 10301.49689319 .00000073 00000-0 53616-4 0 8814",
34 "tle2": "2 27847 98.7006 309.3586 0009858 121.5158 238.6993 14.21038584380060",
168 "visible": false35 "visible": false
169 },36 },
170 "CUTE-1 (CO-55)":
171 {
172 "comms": [
173 {
174 "description": "downlink",
175 "frequency": 437.4,
176 "modulation": "AFSK 1200 bps"
177 }],
178 "description": "Amateur satellite",
179 "groups": ["amateur"],
180 "tle1": "1 27844U 03031E 09080.51717845 .00000023 00000-0 31209-4 0 5380",
181 "tle2": "2 27844 98.7159 90.9149 0010677 40.0025 320.1937 14.20627455296817",
182 "draw_orbit": false,
183 "visible": true
184 },
185 "CUBESAT XI-IV (CO-57)": 37 "CUBESAT XI-IV (CO-57)":
186 {38 {
187 "comms": [39 "comms": [
@@ -190,11 +42,11 @@
190 "frequency": 437.49,42 "frequency": 437.49,
191 "modulation": "AFSK 1200 bps"43 "modulation": "AFSK 1200 bps"
192 }],44 }],
193 "description": "Amateur satellite",
194 "groups": ["amateur"],45 "groups": ["amateur"],
195 "tle1": "1 27848U 03031J 09080.55297394 .00000015 00000-0 27156-4 0 4858",46 "orbitColor": [0, 0, 0],
196 "tle2": "2 27848 98.7176 90.0128 0010577 41.9374 318.2624 14.20430987296783",47 "orbitVisible": false,
197 "draw_orbit": false,48 "tle1": "1 27848U 03031J 10300.75686843 .00000118 00000-0 75342-4 0 9138",
49 "tle2": "2 27848 98.7155 306.9596 0009645 148.6384 211.5372 14.20530353379862",
198 "visible": true50 "visible": true
199 },51 },
200 "CUBESAT XI-V (CO-58)": 52 "CUBESAT XI-V (CO-58)":
@@ -205,21 +57,27 @@
205 "frequency": 437.345,57 "frequency": 437.345,
206 "modulation": "AFSK 1200 bps"58 "modulation": "AFSK 1200 bps"
207 }],59 }],
208 "description": "Amateur satellite",
209 "groups": ["amateur"],60 "groups": ["amateur"],
210 "tle1": "1 28895U 05043F 09080.73753781 .00000170 00000-0 45254-4 0 2627",61 "orbitColor": [0, 0, 0],
211 "tle2": "2 28895 98.0694 333.7523 0016860 260.8704 99.0653 14.59751404180971",62 "orbitVisible": false,
212 "draw_orbit": false,63 "tle1": "1 28895U 05043F 10301.90384514 .00000118 00000-0 33891-4 0 7168",
64 "tle2": "2 28895 97.9923 181.8026 0017166 223.3057 136.6785 14.59954295266498",
213 "visible": true65 "visible": true
214 },66 },
215 "DOVE (DO-17)": 67 "CUTE-1 (CO-55)":
216 {68 {
217 "description": "Amateur satellite",69 "comms": [
218 "groups": ["amateur", "non-operational"],70 {
219 "tle1": "1 20440U 90005E 09080.52227667 .00000009 00000-0 18438-4 0 2752",71 "description": "downlink",
220 "tle2": "2 20440 98.2451 57.8863 0011973 67.7463 292.4996 14.32122011 741",72 "frequency": 437.4,
221 "draw_orbit": false,73 "modulation": "AFSK 1200 bps"
222 "visible": false74 }],
75 "groups": ["amateur"],
76 "orbitColor": [0, 0, 0],
77 "orbitVisible": false,
78 "tle1": "1 27844U 03031E 10301.55293538 .00000112 00000-0 72257-4 0 9662",
79 "tle2": "2 27844 98.7101 308.6233 0009948 142.0283 218.1605 14.20740927380020",
80 "visible": true
223 },81 },
224 "DELFI-C3 (DO-64)": 82 "DELFI-C3 (DO-64)":
225 {83 {
@@ -229,1152 +87,1315 @@
229 "frequency": 145.87,87 "frequency": 145.87,
230 "modulation": "BPSK 1200 bps"88 "modulation": "BPSK 1200 bps"
231 }],89 }],
232 "description": "Amateur satellite",
233 "groups": ["amateur"],90 "groups": ["amateur"],
234 "tle1": "1 32789U 08021G 09080.84012653 .00000106 00000-0 20301-4 0 3267",91 "orbitColor": [0, 0, 0],
235 "tle2": "2 32789 97.9568 145.5256 0014665 318.8670 41.1422 14.81641404 48513",92 "orbitVisible": false,
236 "draw_orbit": false,93 "tle1": "1 32789U 08021G 10301.97603882 .00001122 00000-0 14653-3 0 8232",
94 "tle2": "2 32789 97.8873 5.5871 0015021 205.9532 154.0924 14.82393546135328",
237 "visible": true95 "visible": true
238 },96 },
97 "DOVE (DO-17)":
98 {
99 "comms": [],
100 "groups": ["amateur", "non-operational"],
101 "orbitColor": [0, 0, 0],
102 "orbitVisible": false,
103 "tle1": "1 20440U 90005E 10301.41284784 .00000048 00000-0 33180-4 0 7479",
104 "tle2": "2 20440 98.3259 257.6780 0011703 121.3158 238.9186 14.32187224 84605",
105 "visible": false
106 },
239 "DTUSAT": 107 "DTUSAT":
240 {108 {
241 "comms": [],109 "comms": [],
242 "tle1": "1 27842U 03031C 10010.89561892 .00000007 00000-0 23258-4 0 7359",110 "groups": [],
243 "tle2": "2 27842 98.7047 23.0441 0008526 245.7454 114.2832 14.21010898338847",111 "orbitColor": [0, 0, 0],
244 "draw_orbit": false,112 "orbitVisible": false,
113 "tle1": "1 27842U 03031C 10302.04462644 .00000081 00000-0 57327-4 0 9601",
114 "tle2": "2 27842 98.7019 309.9250 0009996 120.0473 240.1690 14.21063113380192",
245 "visible": false115 "visible": false
246 },116 },
117 "ECHO (AO-51)":
118 {
119 "comms": [
120 {
121 "description": "uplink",
122 "frequency": 145.92,
123 "modulation": "FM/Voice"
124 },
125 {
126 "description": "downlink",
127 "frequency": 435.15,
128 "modulation": "FM/Voice"
129 }],
130 "groups": ["amateur"],
131 "orbitColor": [0, 0, 0],
132 "orbitVisible": false,
133 "tle1": "1 28375U 04025K 10301.07913539 .00000051 00000-0 27765-4 0 8107",
134 "tle2": "2 28375 98.0736 287.0941 0085114 54.0307 306.8742 14.40705651332640",
135 "visible": true
136 },
247 "ENVISAT": 137 "ENVISAT":
248 {138 {
249 "comms": [],139 "comms": [],
250 "groups": ["scientific"],140 "groups": ["scientific"],
251 "hintColor": [0.400000005960464, 0.800000011920929, 1],141 "hintColor": [0.400000005960464, 0.800000011920929, 1],
252 "tle1": "1 27386U 02009A 10011.73639675 .00000071 00000-0 42510-4 0 6762",142 "orbitColor": [0, 0, 0],
253 "tle2": "2 27386 98.5484 81.1001 0001030 91.3585 61.9740 14.32248909411344",143 "orbitVisible": true,
254 "draw_orbit": true,144 "tle1": "1 27386U 02009A 10302.30705345 .00000433 00000-0 15968-3 0 5695",
145 "tle2": "2 27386 98.5363 7.4906 0001057 108.6868 251.4502 14.37440949452946",
255 "visible": true146 "visible": true
256 },147 },
257 "JAS-1 (FO-12)": 148 "EYESAT-1 (AO-27)":
258 {
259 "description": "Amateur satellite",
260 "groups": ["amateur", "non-operational"],
261 "tle1": "1 16909U 86061B 09080.94650626 -.00000083 00000-0 10000-3 0 5465",
262 "tle2": "2 16909 50.0155 70.0871 0010887 345.8622 14.1906 12.44452849 28116",
263 "draw_orbit": false,
264 "visible": false
265 },
266 "JAS-1B (FO-20)":
267 {
268 "description": "Amateur satellite",
269 "groups": ["amateur", "non-operational"],
270 "tle1": "1 20480U 90013C 09080.79147234 -.00000010 00000-0 50788-4 0 941",
271 "tle2": "2 20480 99.0681 17.7100 0540652 8.2393 352.7149 12.83361326895695",
272 "draw_orbit": false,
273 "visible": false
274 },
275 "JAS-2 (FO-29)":
276 {149 {
277 "comms": [150 "comms": [
278 {151 {
279 "description": "uplink",152 "description": "uplink",
280 "frequency": 145.95,153 "frequency": 145.85
281 "modulation": "SSB/CW"
282 }, 154 },
283 {155 {
284 "description": "downlink",156 "description": "downlink",
285 "frequency": 435.85,157 "frequency": 145.2
286 "modulation": "SSB/CW"
287 }],158 }],
288 "description": "Amateur satellite",
289 "groups": ["amateur"],159 "groups": ["amateur"],
290 "tle1": "1 24278U 96046B 09080.73870134 -.00000063 00000-0 -26229-4 0 41",160 "orbitColor": [0, 0, 0],
291 "tle2": "2 24278 98.5666 326.4736 0350089 216.8408 140.8210 13.52942306621921",161 "orbitVisible": false,
292 "draw_orbit": false,162 "tle1": "1 22825U 93061C 10301.86090994 .00000033 00000-0 29665-4 0 6612",
163 "tle2": "2 22825 98.5013 246.4466 0007545 234.1411 125.9055 14.29313405891148",
293 "visible": true164 "visible": true
294 },165 },
295 "GENESIS 1": 166 "GENESIS 1":
296 {167 {
297 "comms": [],168 "comms": [],
298 "tle1": "1 29252U 06029A 10011.52793667 .00000091 00000-0 19479-4 0 9551",169 "groups": [],
299 "tle2": "2 29252 64.5138 48.6502 0005838 166.2231 193.9045 15.03489848192237",170 "orbitColor": [0, 0, 0],
300 "draw_orbit": false,171 "orbitVisible": false,
172 "tle1": "1 29252U 06029A 10301.24236459 .00000810 00000-0 71150-4 0 1806",
173 "tle2": "2 29252 64.5138 201.6869 0033064 326.9862 32.9190 15.03780124235794",
301 "visible": true174 "visible": true
302 },175 },
303 "GENESIS 2": 176 "GENESIS 2":
304 {177 {
305 "comms": [],178 "comms": [],
306 "tle1": "1 31789U 07028A 10011.52925320 .00000135 00000-0 23184-4 0 7041",179 "groups": [],
307 "tle2": "2 31789 64.5059 80.0205 0048307 232.0058 127.6690 15.03160429139449",180 "orbitColor": [0, 0, 0],
308 "draw_orbit": false,181 "orbitVisible": false,
182 "tle1": "1 31789U 07028A 10301.30602734 .00000668 00000-0 61695-4 0 9244",
183 "tle2": "2 31789 64.5057 233.2725 0015456 185.0663 175.0302 15.03452344183002",
309 "visible": true184 "visible": true
310 },185 },
311 "TECHSAT 1B (GO-32)":
312 {
313 "description": "Amateur satellite",
314 "groups": ["amateur", "non-operational"],
315 "tle1": "1 25397U 98043D 09080.75202847 -.00000043 00000-0 -91654-6 0 8508",
316 "tle2": "2 25397 98.3353 107.7463 0001898 121.8466 238.2885 14.23155927555696",
317 "draw_orbit": false,
318 "visible": false
319 },
320 "GPS BIIA-10 (PRN 32)": 186 "GPS BIIA-10 (PRN 32)":
321 {187 {
322 "comms": [],188 "comms": [],
323 "tle1": "1 20959U 90103A 10010.99755647 -.00000036 00000-0 10000-3 0 5262",189 "groups": [],
324 "tle2": "2 20959 55.0535 274.6290 0132765 299.3343 59.4131 2.00568641140074",190 "orbitColor": [0, 0, 0],
325 "draw_orbit": false,191 "orbitVisible": false,
192 "tle1": "1 20959U 90103A 10301.17033650 .00000001 00000-0 10000-3 0 8981",
193 "tle2": "2 20959 54.8508 262.9106 0128049 307.5619 51.2764 2.00571453145897",
326 "visible": false194 "visible": false
327 },195 },
328 "GPS BIIA-11 (PRN 24)": 196 "GPS BIIA-11 (PRN 24)":
329 {197 {
330 "comms": [],198 "comms": [],
331 "tle1": "1 21552U 91047A 10009.70414824 .00000092 00000-0 10000-3 0 5313",199 "groups": [],
332 "tle2": "2 21552 54.4144 212.6800 0062160 326.3598 33.2642 2.00563397135632",200 "orbitColor": [0, 0, 0],
333 "draw_orbit": false,201 "orbitVisible": false,
202 "tle1": "1 21552U 91047A 10301.06970066 .00000018 00000-0 10000-3 0 8874",
203 "tle2": "2 21552 54.3571 200.9750 0057951 338.3118 21.5157 2.00436716141476",
334 "visible": false204 "visible": false
335 },205 },
336 "GPS BIIA-14 (PRN 26)": 206 "GPS BIIA-14 (PRN 26)":
337 {207 {
338 "comms": [],208 "comms": [],
339 "tle1": "1 22014U 92039A 10010.93278189 -.00000105 00000-0 10000-3 0 4649",209 "groups": [],
340 "tle2": "2 22014 56.8181 333.2692 0195319 59.8919 302.0021 2.00570105121807",210 "orbitColor": [0, 0, 0],
341 "draw_orbit": false,211 "orbitVisible": false,
212 "tle1": "1 22014U 92039A 10299.97348574 -.00000038 00000-0 10000-3 0 7848",
213 "tle2": "2 22014 56.6867 322.0414 0196227 63.7900 298.2637 2.00568038127602",
342 "visible": false214 "visible": false
343 },215 },
344 "GPS BIIA-15 (PRN 27)": 216 "GPS BIIA-15 (PRN 27)":
345 {217 {
346 "comms": [],218 "comms": [],
347 "tle1": "1 22108U 92058A 10010.90400221 -.00000067 00000-0 10000-3 0 3539",219 "groups": [],
348 "tle2": "2 22108 55.9801 26.5719 0219290 274.8295 82.7079 2.00561618126981",220 "orbitColor": [0, 0, 0],
349 "draw_orbit": false,221 "orbitVisible": false,
222 "tle1": "1 22108U 92058A 10301.07012426 -.00000061 00000-0 10000-3 0 6825",
223 "tle2": "2 22108 56.1265 15.1080 0219146 282.0449 75.5558 2.00576285132801",
350 "visible": false224 "visible": false
351 },225 },
352 "GPS BIIA-21 (PRN 09)": 226 "GPS BIIA-21 (PRN 09)":
353 {227 {
354 "comms": [],228 "comms": [],
355 "tle1": "1 22700U 93042A 10010.42349068 -.00000067 00000-0 10000-3 0 7005",229 "groups": [],
356 "tle2": "2 22700 56.0930 27.9954 0203907 87.3193 275.0601 2.00570795121138",230 "orbitColor": [0, 0, 0],
357 "draw_orbit": false,231 "orbitVisible": false,
232 "tle1": "1 22700U 93042A 10300.60063047 -.00000060 00000-0 10000-3 0 227",
233 "tle2": "2 22700 56.2590 16.5804 0168032 88.8279 273.1456 2.00561025126958",
358 "visible": false234 "visible": false
359 },235 },
360 "GPS BIIA-23 (PRN 04)": 236 "GPS BIIA-23 (PRN 04)":
361 {237 {
362 "comms": [],238 "comms": [],
363 "tle1": "1 22877U 93068A 10010.06604071 .00000093 00000-0 10000-3 0 197",239 "groups": [],
364 "tle2": "2 22877 53.8346 209.9413 0090336 32.3870 328.2140 2.00570796118779",240 "orbitColor": [0, 0, 0],
365 "draw_orbit": false,241 "orbitVisible": false,
242 "tle1": "1 22877U 93068A 10300.74029013 .00000022 00000-0 10000-3 0 3691",
243 "tle2": "2 22877 53.7782 198.0703 0092885 37.1146 323.5923 2.00552150124602",
366 "visible": false244 "visible": false
367 },245 },
368 "GPS BIIA-24 (PRN 06)": 246 "GPS BIIA-24 (PRN 06)":
369 {247 {
370 "comms": [],248 "comms": [],
371 "tle1": "1 23027U 94016A 10010.76960448 .00000006 00000-0 10000-3 0 283",249 "groups": [],
372 "tle2": "2 23027 53.5254 146.9361 0060541 291.8296 67.4883 2.00564113116098",250 "orbitColor": [0, 0, 0],
373 "draw_orbit": false,251 "orbitVisible": false,
252 "tle1": "1 23027U 94016A 10301.43787208 .00000072 00000-0 10000-3 0 3399",
253 "tle2": "2 23027 53.5644 134.9878 0063098 304.7648 54.7027 2.00565234121928",
374 "visible": false254 "visible": false
375 },255 },
376 "GPS BIIA-25 (PRN 03)": 256 "GPS BIIA-25 (PRN 03)":
377 {257 {
378 "comms": [],258 "comms": [],
379 "tle1": "1 23833U 96019A 10011.28117265 -.00000009 00000-0 10000-3 0 2176",259 "groups": [],
380 "tle2": "2 23833 53.1057 142.9368 0125981 55.7020 305.4397 2.00562273101088",260 "orbitColor": [0, 0, 0],
381 "draw_orbit": false,261 "orbitVisible": false,
262 "tle1": "1 23833U 96019A 10300.45786614 .00000069 00000-0 10000-3 0 5332",
263 "tle2": "2 23833 53.1598 130.9064 0142163 56.9894 304.4139 2.00570127106884",
382 "visible": false264 "visible": false
383 },265 },
384 "GPS BIIA-26 (PRN 10)": 266 "GPS BIIA-26 (PRN 10)":
385 {267 {
386 "comms": [],268 "comms": [],
387 "tle1": "1 23953U 96041A 10011.18603747 -.00000025 00000-0 10000-3 0 6866",269 "groups": [],
388 "tle2": "2 23953 54.7294 271.0433 0088058 35.3384 325.3007 2.00592554 98874",270 "orbitColor": [0, 0, 0],
389 "draw_orbit": false,271 "orbitVisible": false,
272 "tle1": "1 23953U 96041A 10300.83095470 .00000001 00000-0 10000-3 0 280",
273 "tle2": "2 23953 54.5206 259.2542 0093347 37.3286 323.3054 2.00580557104681",
390 "visible": false274 "visible": false
391 },275 },
392 "GPS BIIA-27 (PRN 30)": 276 "GPS BIIA-27 (PRN 30)":
393 {277 {
394 "comms": [],278 "comms": [],
395 "tle1": "1 24320U 96056A 10010.55267325 -.00000068 00000-0 10000-3 0 4257",279 "groups": [],
396 "tle2": "2 24320 54.6846 87.2451 0117066 83.4925 277.8682 2.00567811 97528",280 "orbitColor": [0, 0, 0],
397 "draw_orbit": false,281 "orbitVisible": false,
282 "tle1": "1 24320U 96056A 10300.76073036 .00000024 00000-0 00000+0 0 7570",
283 "tle2": "2 24320 54.8841 75.4974 0129153 89.1011 272.3637 2.00368467103347",
398 "visible": false284 "visible": false
399 },285 },
400 "GPS BIIA-28 (PRN 08)": 286 "GPS BIIA-28 (PRN 08)":
401 {287 {
402 "comms": [],288 "comms": [],
403 "tle1": "1 25030U 97067A 10010.28331492 -.00000064 00000-0 10000-3 0 1002",289 "groups": [],
404 "tle2": "2 25030 56.8069 33.5854 0109830 177.7126 182.3861 2.00557057 89283",290 "orbitColor": [0, 0, 0],
405 "draw_orbit": false,291 "orbitVisible": false,
292 "tle1": "1 25030U 97067A 10300.46082717 -.00000055 00000-0 10000-3 0 4280",
293 "tle2": "2 25030 56.9800 22.3810 0114857 181.8340 178.1709 2.00565936 95101",
406 "visible": false294 "visible": false
407 },295 },
408 "GPS BIIR-02 (PRN 13)": 296 "GPS BIIR-02 (PRN 13)":
409 {297 {
410 "comms": [],298 "comms": [],
411 "tle1": "1 24876U 97035A 10011.15261365 -.00000105 00000-0 10000-3 0 1907",299 "groups": [],
412 "tle2": "2 24876 56.9425 333.4309 0037352 94.7690 265.6519 2.00571727 91409",300 "orbitColor": [0, 0, 0],
413 "draw_orbit": false,301 "orbitVisible": false,
302 "tle1": "1 24876U 97035A 10300.82746512 -.00000037 00000-0 10000-3 0 5014",
303 "tle2": "2 24876 56.8190 322.2355 0040820 104.7722 255.7262 2.00561646 97215",
414 "visible": false304 "visible": false
415 },305 },
416 "GPS BIIR-03 (PRN 11)": 306 "GPS BIIR-03 (PRN 11)":
417 {307 {
418 "comms": [],308 "comms": [],
419 "tle1": "1 25933U 99055A 10010.92537465 .00000081 00000-0 10000-3 0 6410",309 "groups": [],
420 "tle2": "2 25933 50.9220 196.7469 0102582 44.1197 316.7153 2.00557696 75219",310 "orbitColor": [0, 0, 0],
421 "draw_orbit": false,311 "orbitVisible": false,
312 "tle1": "1 25933U 99055A 10301.10513055 .00000027 00000-0 10000-3 0 9482",
313 "tle2": "2 25933 50.8872 184.0730 0111220 49.1827 311.8654 2.00586073 81036",
422 "visible": false314 "visible": false
423 },315 },
424 "GPS BIIR-04 (PRN 20)": 316 "GPS BIIR-04 (PRN 20)":
425 {317 {
426 "comms": [],318 "comms": [],
427 "tle1": "1 26360U 00025A 10011.52706440 -.00000016 00000-0 10000-3 0 7344",319 "groups": [],
428 "tle2": "2 26360 53.7974 268.0575 0039769 72.6509 287.8497 2.00559568 70923",320 "orbitColor": [0, 0, 0],
429 "draw_orbit": false,321 "orbitVisible": false,
322 "tle1": "1 26360U 00025A 10300.69570086 .00000000 00000-0 10000-3 0 398",
323 "tle2": "2 26360 53.6003 256.0337 0040795 71.7443 288.6921 2.00547813 76721",
430 "visible": false324 "visible": false
431 },325 },
432 "GPS BIIR-05 (PRN 28)": 326 "GPS BIIR-05 (PRN 28)":
433 {327 {
434 "comms": [],328 "comms": [],
435 "tle1": "1 26407U 00040A 10010.36440597 -.00000066 00000-0 10000-3 0 6829",329 "groups": [],
436 "tle2": "2 26407 55.5104 91.6427 0157978 246.2508 112.1090 2.00565206 69571",330 "orbitColor": [0, 0, 0],
437 "draw_orbit": false,331 "orbitVisible": false,
332 "tle1": "1 26407U 00040A 10301.53469852 .00000000 00000-0 10000-3 0 9882",
333 "tle2": "2 26407 55.6937 80.1082 0165329 248.9835 109.2466 2.00562548 75417",
438 "visible": false334 "visible": false
439 },335 },
440 "GPS BIIR-06 (PRN 14)": 336 "GPS BIIR-06 (PRN 14)":
441 {337 {
442 "comms": [],338 "comms": [],
443 "tle1": "1 26605U 00071A 10010.96064742 -.00000106 00000-0 10000-3 0 6884",339 "groups": [],
444 "tle2": "2 26605 56.5635 332.2378 0052732 241.2746 118.1865 2.00562276 67186",340 "orbitColor": [0, 0, 0],
445 "draw_orbit": false,341 "orbitVisible": false,
342 "tle1": "1 26605U 00071A 10301.13987066 -.00000036 00000-0 10000-3 0 9985",
343 "tle2": "2 26605 56.4295 320.9194 0059068 240.4602 118.9895 2.00574824 73009",
446 "visible": false344 "visible": false
447 },345 },
448 "GPS BIIR-07 (PRN 18)": 346 "GPS BIIR-07 (PRN 18)":
449 {347 {
450 "comms": [],348 "comms": [],
451 "tle1": "1 26690U 01004A 10011.32818609 -.00000026 00000-0 10000-3 0 5740",349 "groups": [],
452 "tle2": "2 26690 53.8131 271.1512 0110582 226.2030 132.9381 2.00565198 65607",350 "orbitColor": [0, 0, 0],
453 "draw_orbit": false,351 "orbitVisible": false,
352 "tle1": "1 26690U 01004A 10301.00551877 -.00000001 00000-0 10000-3 0 8777",
353 "tle2": "2 26690 53.6003 259.1082 0120363 229.8105 129.1216 2.00556043 71411",
454 "visible": false354 "visible": false
455 },355 },
456 "GPS BIIR-08 (PRN 16)": 356 "GPS BIIR-08 (PRN 16)":
457 {357 {
458 "comms": [],358 "comms": [],
459 "tle1": "1 27663U 03005A 10010.18241212 -.00000066 00000-0 10000-3 0 9453",359 "groups": [],
460 "tle2": "2 27663 55.6126 91.1957 0054149 342.9474 16.8941 2.00562319 50933",360 "orbitColor": [0, 0, 0],
461 "draw_orbit": false,361 "orbitVisible": false,
362 "tle1": "1 27663U 03005A 10301.36090832 .00000036 00000-0 10000-3 0 2860",
363 "tle2": "2 27663 55.7967 79.6869 0058044 349.2639 10.6053 2.00563683 56770",
462 "visible": false364 "visible": false
463 },365 },
464 "GPS BIIR-09 (PRN 21)": 366 "GPS BIIR-09 (PRN 21)":
465 {367 {
466 "comms": [],368 "comms": [],
467 "tle1": "1 27704U 03010A 10010.75198163 .00000090 00000-0 10000-3 0 8437",369 "groups": [],
468 "tle2": "2 27704 53.4558 210.5815 0154862 213.4823 145.5286 2.00557110 49738",370 "orbitColor": [0, 0, 0],
469 "draw_orbit": false,371 "orbitVisible": false,
372 "tle1": "1 27704U 03010A 10299.92552095 .00000026 00000-0 10000-3 0 1671",
373 "tle2": "2 27704 53.4076 198.6608 0172053 221.0136 137.7605 2.00568532 55536",
470 "visible": false374 "visible": false
471 },375 },
472 "GPS BIIR-10 (PRN 22)": 376 "GPS BIIR-10 (PRN 22)":
473 {377 {
474 "comms": [],378 "comms": [],
475 "tle1": "1 28129U 03058A 10010.87364204 -.00000030 00000-0 10000-3 0 4548",379 "groups": [],
476 "tle2": "2 28129 53.6784 271.4646 0053797 253.0522 106.4165 2.00564472 44446",380 "orbitColor": [0, 0, 0],
477 "draw_orbit": false,381 "orbitVisible": false,
382 "tle1": "1 28129U 03058A 10301.04872722 -.00000002 00000-0 10000-3 0 7642",
383 "tle2": "2 28129 53.4689 259.3656 0057247 250.7828 108.5881 2.00557705 50267",
478 "visible": false384 "visible": false
479 },385 },
480 "GPS BIIR-11 (PRN 19)": 386 "GPS BIIR-11 (PRN 19)":
481 {387 {
482 "comms": [],388 "comms": [],
483 "tle1": "1 28190U 04009A 10011.32018064 .00000015 00000-0 10000-3 0 4007",389 "groups": [],
484 "tle2": "2 28190 54.8708 154.0770 0060512 347.4292 12.3771 2.00562181 42623",390 "orbitColor": [0, 0, 0],
485 "draw_orbit": false,391 "orbitVisible": false,
392 "tle1": "1 28190U 04009A 10301.50046097 .00000072 00000-0 10000-3 0 7406",
393 "tle2": "2 28190 54.9000 142.5675 0066538 355.8704 4.1637 2.00574577 48448",
486 "visible": false394 "visible": false
487 },395 },
488 "GPS BIIR-12 (PRN 23)": 396 "GPS BIIR-12 (PRN 23)":
489 {397 {
490 "comms": [],398 "comms": [],
491 "tle1": "1 28361U 04023A 10011.11001436 -.00000108 00000-0 10000-3 0 2210",399 "groups": [],
492 "tle2": "2 28361 55.5233 330.1407 0063091 175.1654 184.8914 2.00555994 40706",400 "orbitColor": [0, 0, 0],
493 "draw_orbit": false,401 "orbitVisible": false,
402 "tle1": "1 28361U 04023A 10301.28559030 -.00000036 00000-0 10000-3 0 5604",
403 "tle2": "2 28361 55.3810 318.5203 0072448 180.5016 179.5309 2.00568475 46520",
494 "visible": false404 "visible": false
495 },405 },
496 "GPS BIIR-13 (PRN 02)": 406 "GPS BIIR-13 (PRN 02)":
497 {407 {
498 "comms": [],408 "comms": [],
499 "tle1": "1 28474U 04045A 10010.60958177 .00000092 00000-0 10000-3 0 1103",409 "groups": [],
500 "tle2": "2 28474 53.8831 208.8835 0092214 169.6917 190.5412 2.00553740 38050",410 "orbitColor": [0, 0, 0],
501 "draw_orbit": false,411 "orbitVisible": false,
412 "tle1": "1 28474U 04045A 10300.77942241 .00000022 00000-0 10000-3 0 4407",
413 "tle2": "2 28474 53.8254 197.0502 0092613 180.6485 179.4129 2.00565881 43871",
502 "visible": false414 "visible": false
503 },415 },
504 "GPS BIIRM-1 (PRN 17)": 416 "GPS BIIRM-1 (PRN 17)":
505 {417 {
506 "comms": [],418 "comms": [],
507 "tle1": "1 28874U 05038A 10010.46611155 .00000020 00000-0 10000-3 0 3749",419 "groups": [],
508 "tle2": "2 28874 55.0076 150.9355 0050579 211.6273 148.0313 2.00552416 31470",420 "orbitColor": [0, 0, 0],
509 "draw_orbit": false,421 "orbitVisible": false,
422 "tle1": "1 28874U 05038A 10300.63167212 .00000072 00000-0 10000-3 0 7178",
423 "tle2": "2 28874 55.0369 139.4663 0058105 217.5165 142.1443 2.00563988 37298",
510 "visible": false424 "visible": false
511 },425 },
512 "GPS BIIRM-2 (PRN 31)": 426 "GPS BIIRM-2 (PRN 31)":
513 {427 {
514 "comms": [],428 "comms": [],
515 "tle1": "1 29486U 06042A 10011.06942763 -.00000065 00000-0 10000-3 0 6815",429 "groups": [],
516 "tle2": "2 29486 55.8943 29.7669 0076878 294.8151 64.4195 2.00574313 24189",430 "orbitColor": [0, 0, 0],
517 "draw_orbit": false,431 "orbitVisible": false,
432 "tle1": "1 29486U 06042A 10300.25051077 -.00000059 00000-0 10000-3 0 318",
433 "tle2": "2 29486 56.0510 18.3338 0076580 298.9210 60.3604 2.00551737 29988",
518 "visible": false434 "visible": false
519 },435 },
520 "GPS BIIRM-3 (PRN 12)": 436 "GPS BIIRM-3 (PRN 12)":
521 {437 {
522 "comms": [],438 "comms": [],
523 "tle1": "1 29601U 06052A 10010.51493068 -.00000066 00000-0 10000-3 0 7387",439 "groups": [],
524 "tle2": "2 29601 55.5346 90.1935 0034161 324.4761 35.3273 2.00550794 23085",440 "orbitColor": [0, 0, 0],
525 "draw_orbit": false,441 "orbitVisible": false,
442 "tle1": "1 29601U 06052A 10300.68949439 .00000031 00000-0 10000-3 0 952",
443 "tle2": "2 29601 55.7140 78.7061 0033602 337.9762 21.8540 2.00573430 28905",
526 "visible": false444 "visible": false
527 },445 },
528 "GPS BIIRM-4 (PRN 15)": 446 "GPS BIIRM-4 (PRN 15)":
529 {447 {
530 "comms": [],448 "comms": [],
531 "tle1": "1 32260U 07047A 10010.31555820 -.00000108 00000-0 00000+0 0 4705",449 "groups": [],
532 "tle2": "2 32260 54.7160 328.8448 0023063 332.4507 27.4199 2.00560044 16474",450 "orbitColor": [0, 0, 0],
533 "draw_orbit": false,451 "orbitVisible": false,
452 "tle1": "1 32260U 07047A 10301.00379408 -.00000037 00000-0 00000+0 0 8086",
453 "tle2": "2 32260 54.5620 316.9717 0026605 346.0435 13.9162 2.00545550 22300",
534 "visible": false454 "visible": false
535 },455 },
536 "GPS BIIRM-5 (PRN 29)": 456 "GPS BIIRM-5 (PRN 29)":
537 {457 {
538 "comms": [],458 "comms": [],
539 "tle1": "1 32384U 07062A 10010.63802324 .00000019 00000-0 10000-3 0 4994",459 "groups": [],
540 "tle2": "2 32384 55.0131 151.4032 0032068 287.1304 72.4854 2.00578110 15209",460 "orbitColor": [0, 0, 0],
541 "draw_orbit": false,461 "orbitVisible": false,
462 "tle1": "1 32384U 07062A 10300.82009883 .00000072 00000-0 10000-3 0 8359",
463 "tle2": "2 32384 55.0523 139.9388 0024871 291.4893 68.2676 2.00565959 21022",
542 "visible": false464 "visible": false
543 },465 },
544 "GPS BIIRM-6 (PRN 07)": 466 "GPS BIIRM-6 (PRN 07)":
545 {467 {
546 "comms": [],468 "comms": [],
547 "tle1": "1 32711U 08012A 10010.73574093 -.00000067 00000-0 10000-3 0 3661",469 "groups": [],
548 "tle2": "2 32711 55.5876 29.8416 0032333 179.9404 180.1045 2.00557495 13415",470 "orbitColor": [0, 0, 0],
549 "draw_orbit": false,471 "orbitVisible": false,
472 "tle1": "1 32711U 08012A 10300.91601166 -.00000060 00000-0 10000-3 0 6672",
473 "tle2": "2 32711 55.7503 18.2909 0041268 182.2061 177.8254 2.00562157 19238",
550 "visible": false474 "visible": false
551 },475 },
476 "HAMSAT (VO-52)":
477 {
478 "comms": [
479 {
480 "description": "Beacon",
481 "frequency": 145.86,
482 "modulation": "CW"
483 }],
484 "groups": ["amateur"],
485 "orbitColor": [0, 0, 0],
486 "orbitVisible": false,
487 "tle1": "1 28650U 05017B 10301.70204233 .00000454 00000-0 63624-4 0 6322",
488 "tle2": "2 28650 97.6762 349.8118 0026562 197.3803 162.6532 14.81837321296466",
489 "visible": true
490 },
552 "HST": 491 "HST":
553 {492 {
554 "comms": [],493 "comms": [],
555 "tle1": "1 20580U 90037B 10009.85735511 .00000291 00000-0 94489-5 0 5019",494 "groups": [],
556 "tle2": "2 20580 28.4685 193.3983 0003260 317.8077 42.2266 15.00875675880934",495 "orbitColor": [0, 0, 0],
557 "draw_orbit": false,496 "orbitVisible": true,
497 "tle1": "1 20580U 90037B 10300.09759300 .00000718 00000-0 41998-4 0 6685",
498 "tle2": "2 20580 28.4686 98.6536 0003467 162.6448 197.4276 15.01074509924596",
558 "visible": true499 "visible": true
559 },500 },
560 "ITAMSAT (IO-26)":
561 {
562 "description": "Amateur satellite",
563 "groups": ["amateur", "non-operational"],
564 "tle1": "1 22826U 93061D 09080.85350470 -.00000006 00000-0 14293-4 0 9268",
565 "tle2": "2 22826 98.4204 37.8560 0009197 152.3361 207.8319 14.29512039807534",
566 "draw_orbit": false,
567 "visible": false
568 },
569 "IRIDIUM 10": 501 "IRIDIUM 10":
570 {502 {
571 "description": "Iridium 10",503 "comms": [],
572 "groups": ["iridium", "communications"],504 "groups": ["iridium", "communications"],
573 "tle1": "1 24839U 97030D 09080.75603299 .00000198 00000-0 63641-4 0 5665",505 "orbitColor": [0, 0, 0],
574 "tle2": "2 24839 86.4032 167.9110 0002345 85.8737 274.2720 14.34216304615619",506 "orbitVisible": false,
575 "draw_orbit": false,507 "tle1": "1 24839U 97030D 10301.46267144 .00000007 00000-0 -45497-5 0 2584",
508 "tle2": "2 24839 86.3911 283.1128 0002489 80.1516 279.9963 14.34216097699562",
576 "visible": false509 "visible": false
577 },510 },
578 "IRIDIUM 11": 511 "IRIDIUM 11":
579 {512 {
580 "description": "Iridium 11",513 "comms": [],
581 "groups": ["iridium", "communications"],514 "groups": ["iridium", "communications"],
582 "tle1": "1 25578U 98074B 09080.96418723 .00000021 00000-0 -64075-8 0 5598",515 "orbitColor": [0, 0, 0],
583 "tle2": "2 25578 86.5093 73.3425 0002585 79.6314 280.5189 14.54937843544862",516 "orbitVisible": false,
584 "draw_orbit": false,517 "tle1": "1 25578U 98074B 10301.24589116 .00000272 00000-0 58203-4 0 2734",
518 "tle2": "2 25578 86.5181 188.7611 0002357 77.8060 282.3396 14.54951368629966",
585 "visible": false519 "visible": false
586 },520 },
587 "IRIDIUM 12": 521 "IRIDIUM 12":
588 {522 {
589 "description": "Iridium 12",523 "comms": [],
590 "groups": ["iridium", "communications"],524 "groups": ["iridium", "communications"],
591 "tle1": "1 24837U 97030B 09080.76871839 .00000162 00000-0 50797-4 0 5682",525 "orbitColor": [0, 0, 0],
592 "tle2": "2 24837 86.4018 167.9072 0002316 83.3237 276.8222 14.34216073615601",526 "orbitVisible": false,
593 "draw_orbit": false,527 "tle1": "1 24837U 97030B 10301.40558675 -.00000010 00000-0 -10565-4 0 2579",
528 "tle2": "2 24837 86.3903 283.1426 0002512 84.4387 275.7108 14.34216340699546",
594 "visible": false529 "visible": false
595 },530 },
596 "IRIDIUM 13": 531 "IRIDIUM 13":
597 {532 {
598 "description": "Iridium 13",533 "comms": [],
599 "groups": ["iridium", "communications"],534 "groups": ["iridium", "communications"],
600 "tle1": "1 24840U 97030E 09080.77506041 .00000178 00000-0 56458-4 0 5246",535 "orbitColor": [0, 0, 0],
601 "tle2": "2 24840 86.4035 167.9756 0002404 88.5081 271.6386 14.34216342615608",536 "orbitVisible": false,
602 "draw_orbit": false,537 "tle1": "1 24840U 97030E 10301.48170248 .00000002 00000-0 -63744-5 0 2148",
538 "tle2": "2 24840 86.3913 283.1911 0002538 78.9591 281.1904 14.34216190699552",
603 "visible": false539 "visible": false
604 },540 },
605 "IRIDIUM 14": 541 "IRIDIUM 14":
606 {542 {
607 "description": "Iridium 14",543 "comms": [],
608 "groups": ["iridium", "communications"],544 "groups": ["iridium", "communications"],
609 "tle1": "1 25777U 99032A 09080.96055310 .00000130 00000-0 25188-4 0 5243",545 "orbitColor": [0, 0, 0],
610 "tle2": "2 25777 86.5126 41.6339 0001855 82.9817 277.1596 14.54935495519245",546 "orbitVisible": false,
611 "draw_orbit": false,547 "tle1": "1 25777U 99032A 10301.51723412 .00000154 00000-0 30756-4 0 2427",
548 "tle2": "2 25777 86.5153 156.9718 0002312 77.7386 282.4084 14.54947031604388",
612 "visible": false549 "visible": false
613 },550 },
614 "IRIDIUM 15": 551 "IRIDIUM 15":
615 {552 {
616 "description": "Iridium 15",553 "comms": [],
617 "groups": ["iridium", "communications"],554 "groups": ["iridium", "communications"],
618 "tle1": "1 24869U 97034A 09080.83555834 .00000127 00000-0 38404-4 0 5876",555 "orbitColor": [0, 0, 0],
619 "tle2": "2 24869 86.3996 199.4843 0002242 82.3271 277.8172 14.34217422612589",556 "orbitVisible": false,
620 "draw_orbit": false,557 "tle1": "1 24869U 97034A 10301.47242563 -.00000024 00000-0 -15465-4 0 2873",
558 "tle2": "2 24869 86.3926 314.8201 0002445 86.9290 273.2200 14.34219000696521",
621 "visible": false559 "visible": false
622 },560 },
623 "IRIDIUM 16": 561 "IRIDIUM 16":
624 {562 {
625 "description": "Iridium 16",563 "comms": [],
626 "groups": ["iridium", "communications"],564 "groups": ["iridium", "communications"],
627 "tle1": "1 24841U 97030F 09080.74756006 .00000103 00000-0 28979-4 0 5472",565 "orbitColor": [0, 0, 0],
628 "tle2": "2 24841 86.4115 168.5066 0004087 67.5298 292.6324 14.35274480615732",566 "orbitVisible": false,
629 "draw_orbit": false,567 "tle1": "1 24841U 97030F 10301.49343822 .00000157 00000-0 47706-4 0 2532",
568 "tle2": "2 24841 86.3990 283.8057 0001109 29.5848 330.5421 14.35369815699755",
630 "visible": false569 "visible": false
631 },570 },
632 "IRIDIUM 17": 571 "IRIDIUM 17":
633 {572 {
634 "description": "Iridium 17",573 "comms": [],
635 "groups": ["iridium", "communications"],574 "groups": ["iridium", "communications"],
636 "tle1": "1 24870U 97034B 09080.86574228 .00000094 00000-0 26348-4 0 5551",575 "orbitColor": [0, 0, 0],
637 "tle2": "2 24870 86.3997 199.3860 0002450 74.3578 285.7893 14.34424293612609",576 "orbitVisible": false,
638 "draw_orbit": false,577 "tle1": "1 24870U 97034B 10301.40154518 .00000156 00000-0 48296-4 0 2490",
578 "tle2": "2 24870 86.3935 314.6658 0002199 76.6525 283.4917 14.34512721696546",
639 "visible": false579 "visible": false
640 },580 },
641 "IRIDIUM 18": 581 "IRIDIUM 18":
642 {582 {
643 "description": "Iridium 18",583 "comms": [],
644 "groups": ["iridium", "communications"],584 "groups": ["iridium", "communications"],
645 "tle1": "1 24872U 97034D 09080.86727066 .00000184 00000-0 58625-4 0 5567",585 "orbitColor": [0, 0, 0],
646 "tle2": "2 24872 86.4003 199.6099 0002454 81.7604 278.3867 14.34217527612589",586 "orbitVisible": false,
647 "draw_orbit": false,587 "tle1": "1 24872U 97034D 10301.50413725 .00000004 00000-0 -56993-5 0 2443",
588 "tle2": "2 24872 86.3931 314.9668 0002380 81.5831 278.5648 14.34219073696523",
648 "visible": false589 "visible": false
649 },590 },
650 "IRIDIUM 19": 591 "IRIDIUM 19":
651 {592 {
652 "description": "Iridium 19",593 "comms": [],
653 "groups": ["iridium", "communications"],594 "groups": ["iridium", "communications"],
654 "tle1": "1 24965U 97056A 09080.72718535 .00000100 00000-0 28631-4 0 5236",595 "orbitColor": [0, 0, 0],
655 "tle2": "2 24965 86.3996 136.4806 0002460 90.2603 269.8873 14.34219384601200",596 "orbitVisible": false,
656 "draw_orbit": false,597 "tle1": "1 24965U 97056A 10301.50366897 .00000088 00000-0 24442-4 0 2104",
598 "tle2": "2 24965 86.3935 251.5975 0002482 84.1741 275.9721 14.34218772685165",
657 "visible": false599 "visible": false
658 },600 },
659 "IRIDIUM 2": 601 "IRIDIUM 2":
660 {602 {
661 "description": "Iridium 2",603 "comms": [],
662 "groups": ["iridium", "communications"],604 "groups": ["iridium", "communications"],
663 "tle1": "1 25527U 98066A 09080.75555857 .00000044 00000-0 94123-6 0 8457",605 "orbitColor": [0, 0, 0],
664 "tle2": "2 25527 85.5654 330.3309 0011200 129.4966 230.7244 14.97948645565148",606 "orbitVisible": false,
665 "draw_orbit": false,607 "tle1": "1 25527U 98066A 10301.18691019 .00001380 00000-0 11268-3 0 6125",
608 "tle2": "2 25527 85.5646 356.9509 0008409 198.8268 161.2649 14.98527668652791",
666 "visible": false609 "visible": false
667 },610 },
668 "IRIDIUM 20": 611 "IRIDIUM 20":
669 {612 {
670 "description": "Iridium 20",613 "comms": [],
671 "groups": ["iridium", "communications"],614 "groups": ["iridium", "communications"],
672 "tle1": "1 25577U 98074A 09080.98033202 -.00000021 00000-0 -14422-4 0 3714",615 "orbitColor": [0, 0, 0],
673 "tle2": "2 25577 86.3904 73.1381 0002452 79.1409 281.0061 14.34214985537121",616 "orbitVisible": false,
674 "draw_orbit": false,617 "tle1": "1 25577U 98074A 10301.40802733 -.00001014 00000-0 -36937-3 0 503",
618 "tle2": "2 25577 86.3993 188.4413 0002307 83.6228 276.5230 14.34213135621030",
675 "visible": false619 "visible": false
676 },620 },
677 "IRIDIUM 21": 621 "IRIDIUM 21":
678 {622 {
679 "description": "Iridium 21",623 "comms": [],
680 "groups": ["iridium", "communications"],624 "groups": ["iridium", "communications"],
681 "tle1": "1 25778U 99032B 09080.93260961 .00000088 00000-0 24407-4 0 4289",625 "orbitColor": [0, 0, 0],
682 "tle2": "2 25778 86.3940 41.6568 0001858 135.0959 225.0387 14.34213303516794",626 "orbitVisible": false,
683 "draw_orbit": false,627 "tle1": "1 25778U 99032B 10301.36016290 .00000109 00000-0 32005-4 0 1215",
628 "tle2": "2 25778 86.3966 157.0456 0004285 90.1310 270.0372 14.34223335600704",
684 "visible": false629 "visible": false
685 },630 },
686 "IRIDIUM 22": 631 "IRIDIUM 22":
687 {632 {
688 "description": "Iridium 22",633 "comms": [],
689 "groups": ["iridium", "communications"],634 "groups": ["iridium", "communications"],
690 "tle1": "1 24907U 97043E 09080.93593228 .00000038 00000-0 64008-5 0 5443",635 "orbitColor": [0, 0, 0],
691 "tle2": "2 24907 86.3913 73.5164 0002428 76.7490 283.3976 14.34215296606512",636 "orbitVisible": false,
692 "draw_orbit": false,637 "tle1": "1 24907U 97043E 10301.36362755 .00000137 00000-0 41923-4 0 2275",
638 "tle2": "2 24907 86.4005 188.8880 0002341 81.1379 279.0079 14.34216367690429",
693 "visible": false639 "visible": false
694 },640 },
695 "IRIDIUM 23": 641 "IRIDIUM 23":
696 {642 {
697 "description": "Iridium 23",643 "comms": [],
698 "groups": ["iridium", "communications"],644 "groups": ["iridium", "communications"],
699 "tle1": "1 24906U 97043D 09080.94227688 .00000036 00000-0 58894-5 0 5744",645 "orbitColor": [0, 0, 0],
700 "tle2": "2 24906 86.3894 73.1318 0002472 82.1303 278.0178 14.34215338606511",646 "orbitVisible": false,
701 "draw_orbit": false,647 "tle1": "1 24906U 97043D 10301.43972938 .00000175 00000-0 55359-4 0 2597",
648 "tle2": "2 24906 86.3999 188.3968 0002284 78.4691 281.6760 14.34218288690434",
702 "visible": false649 "visible": false
703 },650 },
704 "IRIDIUM 24": 651 "IRIDIUM 24":
705 {652 {
706 "description": "Iridium 24",653 "comms": [],
707 "groups": ["iridium", "communications"],654 "groups": ["iridium", "communications"],
708 "tle1": "1 25105U 97082B 09080.88485856 .00000094 00000-0 24467-4 0 1226",655 "orbitColor": [0, 0, 0],
709 "tle2": "2 25105 86.3868 64.1686 0012063 143.9347 216.2672 14.38254916590102",656 "orbitVisible": false,
710 "draw_orbit": false,657 "tle1": "1 25105U 97082B 10301.18083982 .00000179 00000-0 52087-4 0 7624",
658 "tle2": "2 25105 86.3964 177.7006 0013578 41.4370 318.7856 14.38367245674235",
711 "visible": false659 "visible": false
712 },660 },
713 "IRIDIUM 25": 661 "IRIDIUM 25":
714 {662 {
715 "description": "Iridium 25",663 "comms": [],
716 "groups": ["iridium", "communications"],664 "groups": ["iridium", "communications"],
717 "tle1": "1 24904U 97043B 09080.95495998 .00000045 00000-0 90546-5 0 5564",665 "orbitColor": [0, 0, 0],
718 "tle2": "2 24904 86.3902 73.1904 0002447 79.4878 280.6605 14.34215301606501",666 "orbitVisible": false,
719 "draw_orbit": false,667 "tle1": "1 24904U 97043B 10301.31288895 -.00000306 00000-0 -11639-3 0 2415",
668 "tle2": "2 24904 86.3986 188.5237 0002349 81.6978 278.4538 14.34214579690408",
720 "visible": false669 "visible": false
721 },670 },
722 "IRIDIUM 26": 671 "IRIDIUM 26":
723 {672 {
724 "description": "Iridium 26",673 "comms": [],
725 "groups": ["iridium", "communications"],674 "groups": ["iridium", "communications"],
726 "tle1": "1 24903U 97043A 09080.92325319 .00000061 00000-0 14603-4 0 6635",675 "orbitColor": [0, 0, 0],
727 "tle2": "2 24903 86.3905 73.2530 0002433 79.3191 280.8286 14.34215067606530",676 "orbitVisible": false,
728 "draw_orbit": false,677 "tle1": "1 24903U 97043A 10301.28117716 -.00000455 00000-0 -16970-3 0 3502",
678 "tle2": "2 24903 86.3991 188.5961 0002453 79.9332 280.2207 14.34214020690435",
729 "visible": false679 "visible": false
730 },680 },
731 "IRIDIUM 28": 681 "IRIDIUM 28":
732 {682 {
733 "description": "Iridium 28",683 "comms": [],
734 "groups": ["iridium", "communications"],684 "groups": ["iridium", "communications"],
735 "tle1": "1 24948U 97051E 09080.72766345 -.00000012 00000-0 -11441-4 0 3800",685 "orbitColor": [0, 0, 0],
736 "tle2": "2 24948 86.3924 105.0922 0002660 74.1790 285.9694 14.34248276603049",686 "orbitVisible": false,
737 "draw_orbit": false,687 "tle1": "1 24948U 97051E 10301.33479639 .00000180 00000-0 57176-4 0 864",
688 "tle2": "2 24948 86.3985 220.2483 0001878 79.3904 280.7492 14.34341723686986",
738 "visible": false689 "visible": false
739 },690 },
740 "IRIDIUM 29": 691 "IRIDIUM 29":
741 {692 {
742 "description": "Iridium 29",693 "comms": [],
743 "groups": ["iridium", "communications"],694 "groups": ["iridium", "communications"],
744 "tle1": "1 24944U 97051A 09080.73641357 -.00000048 00000-0 -24213-4 0 5196",695 "orbitColor": [0, 0, 0],
745 "tle2": "2 24944 86.3928 104.9291 0002412 84.1606 275.9868 14.34217590603056",696 "orbitVisible": false,
746 "draw_orbit": false,697 "tle1": "1 24944U 97051A 10301.30362042 -.00000646 00000-0 -23779-3 0 1935",
698 "tle2": "2 24944 86.3978 220.1102 0002370 78.2191 281.9265 14.34214060686989",
747 "visible": false699 "visible": false
748 },700 },
749 "IRIDIUM 3": 701 "IRIDIUM 3":
750 {702 {
751 "description": "Iridium 3",703 "comms": [],
752 "groups": ["iridium", "communications"],704 "groups": ["iridium", "communications"],
753 "tle1": "1 25431U 98048A 09080.92959394 .00000063 00000-0 15480-4 0 4481",705 "orbitColor": [0, 0, 0],
754 "tle2": "2 25431 86.3903 73.3431 0002965 84.2311 275.9229 14.34215319554292",706 "orbitVisible": false,
755 "draw_orbit": false,707 "tle1": "1 25431U 98048A 10301.28751827 -.00001140 00000-0 -41424-3 0 1335",
708 "tle2": "2 25431 86.3996 188.7028 0002503 69.5365 290.6101 14.34213818638197",
756 "visible": false709 "visible": false
757 },710 },
758 "IRIDIUM 30": 711 "IRIDIUM 30":
759 {712 {
760 "description": "Iridium 30",713 "comms": [],
761 "groups": ["iridium", "communications"],714 "groups": ["iridium", "communications"],
762 "tle1": "1 24949U 97051F 09080.60956429 -.00000118 00000-0 -49226-4 0 5599",715 "orbitColor": [0, 0, 0],
763 "tle2": "2 24949 86.3918 105.0480 0002502 87.1679 272.9801 14.34216956603032",716 "orbitVisible": false,
764 "draw_orbit": false,717 "tle1": "1 24949U 97051F 10301.31630586 -.00000935 00000-0 -34102-3 0 2521",
718 "tle2": "2 24949 86.3982 220.1828 0002394 80.5741 279.5722 14.34212081686989",
765 "visible": false719 "visible": false
766 },720 },
767 "IRIDIUM 31": 721 "IRIDIUM 31":
768 {722 {
769 "description": "Iridium 31",723 "comms": [],
770 "groups": ["iridium", "communications"],724 "groups": ["iridium", "communications"],
771 "tle1": "1 24950U 97051G 09080.95206580 .00000006 00000-0 -50967-5 0 5472",725 "orbitColor": [0, 0, 0],
772 "tle2": "2 24950 86.3926 104.8960 0002452 82.6436 277.5040 14.34217229603094",726 "orbitVisible": false,
773 "draw_orbit": false,727 "tle1": "1 24950U 97051G 10301.44950136 -.00001083 00000-0 -39397-3 0 2226",
728 "tle2": "2 24950 86.3981 220.1240 0002426 81.3268 278.8198 14.34210867687011",
774 "visible": false729 "visible": false
775 },730 },
776 "IRIDIUM 32": 731 "IRIDIUM 32":
777 {732 {
778 "description": "Iridium 32",733 "comms": [],
779 "groups": ["iridium", "communications"],734 "groups": ["iridium", "communications"],
780 "tle1": "1 24945U 97051B 09080.82521335 -.00000034 00000-0 -19243-4 0 5260",735 "orbitColor": [0, 0, 0],
781 "tle2": "2 24945 86.3920 104.9062 0002420 86.0555 274.0934 14.34217114603087",736 "orbitVisible": false,
782 "draw_orbit": false,737 "tle1": "1 24945U 97051B 10301.39241707 -.00000905 00000-0 -33044-3 0 2114",
738 "tle2": "2 24945 86.3976 220.0911 0002352 78.3319 281.8123 14.34212503687015",
783 "visible": false739 "visible": false
784 },740 },
785 "IRIDIUM 33": 741 "IRIDIUM 33":
786 {742 {
787 "description": "Iridium 33",743 "comms": [],
788 "groups": ["iridium", "communications"],744 "groups": ["iridium", "communications"],
789 "tle1": "1 24946U 97051C 09079.48224177 .00000050 00000-0 11256-4 0 5548",745 "orbitColor": [0, 0, 0],
790 "tle2": "2 24946 86.3829 105.5030 0007498 339.0307 21.0569 14.32470536602871",746 "orbitVisible": false,
791 "draw_orbit": false,747 "tle1": "1 24946U 97051C 10301.30780396 .00000103 00000-0 30874-4 0 3307",
748 "tle2": "2 24946 86.3895 220.2555 0006786 199.2047 160.8908 14.32545186686906",
792 "visible": false749 "visible": false
793 },750 },
794 "IRIDIUM 34": 751 "IRIDIUM 34":
795 {752 {
796 "description": "Iridium 34",753 "comms": [],
797 "groups": ["iridium", "communications"],754 "groups": ["iridium", "communications"],
798 "tle1": "1 24969U 97056E 09080.66375773 .00000143 00000-0 44096-4 0 5214",755 "orbitColor": [0, 0, 0],
799 "tle2": "2 24969 86.3985 136.5744 0002407 86.3781 273.7691 14.34219875601171",756 "orbitVisible": false,
800 "draw_orbit": false,757 "tle1": "1 24969U 97056E 10301.37047500 .00000133 00000-0 40499-4 0 2044",
758 "tle2": "2 24969 86.3933 251.7300 0002471 80.8760 279.2726 14.34219098685123",
801 "visible": false759 "visible": false
802 },760 },
803 "IRIDIUM 35": 761 "IRIDIUM 35":
804 {762 {
805 "description": "Iridium 35",763 "comms": [],
806 "groups": ["iridium", "communications"],764 "groups": ["iridium", "communications"],
807 "tle1": "1 24966U 97056B 09080.73987018 .00000085 00000-0 23358-4 0 5695",765 "orbitColor": [0, 0, 0],
808 "tle2": "2 24966 86.3976 136.5004 0002426 88.2177 271.9296 14.34219553601183",766 "orbitVisible": false,
809 "draw_orbit": false,767 "tle1": "1 24966U 97056B 10301.51635596 -.00000385 00000-0 -14474-3 0 2533",
768 "tle2": "2 24966 86.3937 251.6122 0002532 80.6792 279.4757 14.34211428685143",
810 "visible": false769 "visible": false
811 },770 },
812 "IRIDIUM 36": 771 "IRIDIUM 36":
813 {772 {
814 "description": "Iridium 36",773 "comms": [],
815 "groups": ["iridium", "communications"],774 "groups": ["iridium", "communications"],
816 "tle1": "1 24967U 97056C 09080.65710171 -.00000019 00000-0 -13689-4 0 4998",775 "orbitColor": [0, 0, 0],
817 "tle2": "2 24967 86.3983 136.6024 0002458 82.4670 277.6800 14.34287200601317",776 "orbitVisible": false,
818 "draw_orbit": false,777 "tle1": "1 24967U 97056C 10301.39302625 .00000131 00000-0 39626-4 0 1997",
778 "tle2": "2 24967 86.3966 251.7390 0002309 86.5090 273.6383 14.34359852685271",
819 "visible": false779 "visible": false
820 },780 },
821 "IRIDIUM 37": 781 "IRIDIUM 37":
822 {782 {
823 "description": "Iridium 37",783 "comms": [],
824 "groups": ["iridium", "communications"],784 "groups": ["iridium", "communications"],
825 "tle1": "1 24968U 97056D 09080.71450005 .00000098 00000-0 28096-4 0 5346",785 "orbitColor": [0, 0, 0],
826 "tle2": "2 24968 86.3999 136.6077 0002361 87.7484 272.3982 14.34219477601186",786 "orbitVisible": false,
827 "draw_orbit": false,787 "tle1": "1 24968U 97056D 10301.35144457 .00000056 00000-0 12992-4 0 2210",
788 "tle2": "2 24968 86.3939 251.7957 0002427 84.6546 275.4959 14.34213228685126",
828 "visible": false789 "visible": false
829 },790 },
830 "IRIDIUM 38": 791 "IRIDIUM 38":
831 {792 {
832 "description": "Iridium 38",793 "comms": [],
833 "groups": ["iridium", "communications"],794 "groups": ["iridium", "communications"],
834 "tle1": "1 25043U 97069E 09080.84584675 .00000189 00000-0 59905-4 0 5412",795 "orbitColor": [0, 0, 0],
835 "tle2": "2 25043 86.3999 198.9627 0003100 65.2494 294.9020 14.34689502595081",796 "orbitVisible": false,
836 "draw_orbit": false,797 "tle1": "1 25043U 97069E 10301.48572705 .00000131 00000-0 39291-4 0 2310",
798 "tle2": "2 25043 86.3930 314.0819 0001612 70.0722 290.0660 14.34770701679053",
837 "visible": false799 "visible": false
838 },800 },
839 "IRIDIUM 39": 801 "IRIDIUM 39":
840 {802 {
841 "description": "Iridium 39",803 "comms": [],
842 "groups": ["iridium", "communications"],804 "groups": ["iridium", "communications"],
843 "tle1": "1 25042U 97069D 09080.81653387 .00000186 00000-0 59194-4 0 5120",805 "orbitColor": [0, 0, 0],
844 "tle2": "2 25042 86.4012 199.6847 0002432 78.6189 281.5268 14.34217041594973",806 "orbitVisible": false,
845 "draw_orbit": false,807 "tle1": "1 25042U 97069D 10301.38362828 .00000037 00000-0 61418-5 0 2065",
808 "tle2": "2 25042 86.3939 315.1128 0002183 83.4944 276.6508 14.34218237678909",
846 "visible": false809 "visible": false
847 },810 },
848 "IRIDIUM 4": 811 "IRIDIUM 4":
849 {812 {
850 "description": "Iridium 4",813 "comms": [],
851 "groups": ["iridium", "communications"],814 "groups": ["iridium", "communications"],
852 "tle1": "1 24796U 97020E 09080.70815717 .00000117 00000-0 34873-4 0 5689",815 "orbitColor": [0, 0, 0],
853 "tle2": "2 24796 86.3992 136.4182 0002479 84.7507 275.3970 14.34219551621866",816 "orbitVisible": false,
854 "draw_orbit": false,817 "tle1": "1 24796U 97020E 10301.48464559 .00000171 00000-0 53914-4 0 2512",
818 "tle2": "2 24796 86.3930 251.5109 0002496 78.1753 281.9709 14.34218964705824",
855 "visible": false819 "visible": false
856 },820 },
857 "IRIDIUM 40": 821 "IRIDIUM 40":
858 {822 {
859 "description": "Iridium 40",823 "comms": [],
860 "groups": ["iridium", "communications"],824 "groups": ["iridium", "communications"],
861 "tle1": "1 25041U 97069C 09080.87997502 .00000177 00000-0 56017-4 0 5384",825 "orbitColor": [0, 0, 0],
862 "tle2": "2 25041 86.4003 199.5053 0002277 80.7998 279.3453 14.34217086595004",826 "orbitVisible": false,
863 "draw_orbit": false,827 "tle1": "1 25041U 97069C 10301.51682757 .00000049 00000-0 10364-4 0 2285",
828 "tle2": "2 25041 86.3934 314.8434 0002403 85.3762 274.7711 14.34219119678942",
864 "visible": false829 "visible": false
865 },830 },
866 "IRIDIUM 41": 831 "IRIDIUM 41":
867 {832 {
868 "description": "Iridium 41",833 "comms": [],
869 "groups": ["iridium", "communications"],834 "groups": ["iridium", "communications"],
870 "tle1": "1 25040U 97069B 09080.85461500 .00000190 00000-0 60760-4 0 5122",835 "orbitColor": [0, 0, 0],
871 "tle2": "2 25040 86.4003 199.5463 0002248 80.0849 280.0599 14.34216855594983",836 "orbitVisible": false,
872 "draw_orbit": false,837 "tle1": "1 25040U 97069B 10301.49145091 .00000021 00000-0 37710-6 0 2024",
838 "tle2": "2 25040 86.3928 314.8920 0002308 74.9331 285.2131 14.34219357678929",
873 "visible": false839 "visible": false
874 },840 },
875 "IRIDIUM 42": 841 "IRIDIUM 42":
876 {842 {
877 "description": "Iridium 42",843 "comms": [],
878 "groups": ["iridium", "communications"],844 "groups": ["iridium", "communications"],
879 "tle1": "1 25077U 97077A 09080.94340195 .00000110 00000-0 32067-4 0 5274",845 "orbitColor": [0, 0, 0],
880 "tle2": "2 25077 86.3994 199.5528 0002240 84.0668 276.0780 14.34216755590856",846 "orbitVisible": false,
881 "draw_orbit": false,847 "tle1": "1 25077U 97077A 10301.51048518 .00000012 00000-0 -27886-5 0 2238",
848 "tle2": "2 25077 86.3933 314.9318 0002374 85.5992 274.5489 14.34219003674786",
882 "visible": false849 "visible": false
883 },850 },
884 "IRIDIUM 43": 851 "IRIDIUM 43":
885 {852 {
886 "description": "Iridium 43",853 "comms": [],
887 "groups": ["iridium", "communications"],854 "groups": ["iridium", "communications"],
888 "tle1": "1 25039U 97069A 09080.86094029 .00000205 00000-0 66131-4 0 5236",855 "orbitColor": [0, 0, 0],
889 "tle2": "2 25039 86.4004 199.6307 0002233 83.8211 276.3235 14.34217273594988",856 "orbitVisible": false,
890 "draw_orbit": false,857 "tle1": "1 25039U 97069A 10301.49779840 .00000009 00000-0 -39060-5 0 2135",
858 "tle2": "2 25039 86.3934 314.9917 0002408 81.0220 279.1261 14.34219096678924",
891 "visible": false859 "visible": false
892 },860 },
893 "IRIDIUM 44": 861 "IRIDIUM 44":
894 {862 {
895 "description": "Iridium 44",863 "comms": [],
896 "groups": ["iridium", "communications"],864 "groups": ["iridium", "communications"],
897 "tle1": "1 25078U 97077B 09080.71935762 .00000118 00000-0 33304-4 0 717",865 "orbitColor": [0, 0, 0],
898 "tle2": "2 25078 86.4006 195.3112 0003942 66.7305 293.4317 14.36538090591378",866 "orbitVisible": false,
899 "draw_orbit": false,867 "tle1": "1 25078U 97077B 10301.43391839 .00000158 00000-0 46896-4 0 7053",
868 "tle2": "2 25078 86.3948 309.6718 0001443 21.3821 338.7429 14.36659332675461",
900 "visible": false869 "visible": false
901 },870 },
902 "IRIDIUM 45": 871 "IRIDIUM 45":
903 {872 {
904 "description": "Iridium 45",873 "comms": [],
905 "groups": ["iridium", "communications"],874 "groups": ["iridium", "communications"],
906 "tle1": "1 25104U 97082A 09080.96130432 -.00000044 00000-0 -22820-4 0 4750",875 "orbitColor": [0, 0, 0],
907 "tle2": "2 25104 86.3894 73.2144 0002470 84.6910 275.4577 14.34215008589056",876 "orbitVisible": false,
908 "draw_orbit": false,877 "tle1": "1 25104U 97082A 10301.24946346 -.00001076 00000-0 -39134-3 0 1554",
878 "tle2": "2 25104 86.3988 188.5603 0002315 82.0799 278.0695 14.34212715672948",
909 "visible": false879 "visible": false
910 },880 },
911 "IRIDIUM 46": 881 "IRIDIUM 46":
912 {882 {
913 "description": "Iridium 46",883 "comms": [],
914 "groups": ["iridium", "communications"],884 "groups": ["iridium", "communications"],
915 "tle1": "1 24905U 97043C 09080.96764942 .00000030 00000-0 35050-5 0 5691",885 "orbitColor": [0, 0, 0],
916 "tle2": "2 24905 86.3912 73.4590 0002447 80.6193 279.5279 14.34215070606519",886 "orbitVisible": false,
917 "draw_orbit": false,887 "tle1": "1 24905U 97043C 10301.25580518 -.00000150 00000-0 -60680-4 0 2649",
888 "tle2": "2 24905 86.4001 188.8750 0002431 82.1446 278.0076 14.34215312690408",
918 "visible": false889 "visible": false
919 },890 },
920 "IRIDIUM 47": 891 "IRIDIUM 47":
921 {892 {
922 "description": "Iridium 47",893 "comms": [],
923 "groups": ["iridium", "communications"],894 "groups": ["iridium", "communications"],
924 "tle1": "1 25106U 97082C 09080.97398853 .00000111 00000-0 32561-4 0 4695",895 "orbitColor": [0, 0, 0],
925 "tle2": "2 25106 86.3898 73.1510 0002484 79.6182 280.5287 14.34215564589050",896 "orbitVisible": false,
926 "draw_orbit": false,897 "tle1": "1 25106U 97082C 10301.54122237 -.00000281 00000-0 -10746-3 0 1504",
898 "tle2": "2 25106 86.4001 188.3780 0002427 77.6559 282.4918 14.34214589672981",
927 "visible": false899 "visible": false
928 },900 },
929 "IRIDIUM 49": 901 "IRIDIUM 49":
930 {902 {
931 "description": "Iridium 49",903 "comms": [],
932 "groups": ["iridium", "communications"],904 "groups": ["iridium", "communications"],
933 "tle1": "1 25108U 97082E 09080.98667654 .00000065 00000-0 16281-4 0 4875",905 "orbitColor": [0, 0, 0],
934 "tle2": "2 25108 86.3903 73.1642 0002478 78.6020 281.5453 14.34215226589060",906 "orbitVisible": false,
935 "draw_orbit": false,907 "tle1": "1 25108U 97082E 10301.27483287 -.00001099 00000-0 -39961-3 0 1699",
908 "tle2": "2 25108 86.3989 188.5250 0002347 83.1310 277.0152 14.34214115672951",
936 "visible": false909 "visible": false
937 },910 },
938 "IRIDIUM 5": 911 "IRIDIUM 5":
939 {912 {
940 "description": "Iridium 5",913 "comms": [],
941 "groups": ["iridium", "communications"],914 "groups": ["iridium", "communications"],
942 "tle1": "1 24795U 97020D 09080.75255433 .00000063 00000-0 15294-4 0 6795",915 "orbitColor": [0, 0, 0],
943 "tle2": "2 24795 86.3980 136.7732 0002993 61.1224 299.0272 14.34219542621938",916 "orbitVisible": false,
944 "draw_orbit": false,917 "tle1": "1 24795U 97020D 10301.38957589 .00000124 00000-0 37398-4 0 3955",
918 "tle2": "2 24795 86.3931 251.9381 0001043 80.5962 279.5368 14.34217681705870",
945 "visible": false919 "visible": false
946 },920 },
947 "IRIDIUM 50": 921 "IRIDIUM 50":
948 {922 {
949 "description": "Iridium 50",923 "comms": [],
950 "groups": ["iridium", "communications"],924 "groups": ["iridium", "communications"],
951 "tle1": "1 25172U 98010D 09080.79408766 .00000199 00000-0 63929-4 0 5098",925 "orbitColor": [0, 0, 0],
952 "tle2": "2 25172 86.4035 168.0271 0002291 84.7609 275.3846 14.34216501580429",926 "orbitVisible": false,
953 "draw_orbit": false,927 "tle1": "1 25172U 98010D 10301.50072644 .00000034 00000-0 52070-5 0 2010",
928 "tle2": "2 25172 86.3915 283.2603 0002516 84.0356 276.1131 14.34216379664372",
954 "visible": false929 "visible": false
955 },930 },
956 "IRIDIUM 51": 931 "IRIDIUM 51":
957 {932 {
958 "description": "Iridium 51",933 "comms": [],
959 "groups": ["iridium", "communications"],934 "groups": ["iridium", "communications"],
960 "tle1": "1 25262U 98018A 09080.96019622 .00000083 00000-0 18843-4 0 6047",935 "orbitColor": [0, 0, 0],
961 "tle2": "2 25262 86.4521 136.5459 0002506 88.2627 271.8861 14.42963543578794",936 "orbitVisible": false,
962 "draw_orbit": false,937 "tle1": "1 25262U 98018A 10301.38405275 .00000217 00000-0 58884-4 0 2981",
938 "tle2": "2 25262 86.4450 251.8827 0002519 77.4188 282.7311 14.42949049663219",
963 "visible": false939 "visible": false
964 },940 },
965 "IRIDIUM 52": 941 "IRIDIUM 52":
966 {942 {
967 "description": "Iridium 52",943 "comms": [],
968 "groups": ["iridium", "communications"],944 "groups": ["iridium", "communications"],
969 "tle1": "1 25169U 98010A 09080.73700209 .00000123 00000-0 36961-4 0 2624",945 "orbitColor": [0, 0, 0],
970 "tle2": "2 25169 86.4038 168.0762 0002354 85.6372 274.5081 14.34216423580436",946 "orbitVisible": false,
971 "draw_orbit": false,947 "tle1": "1 25169U 98010A 10301.51340845 -.00000026 00000-0 -16458-4 0 9512",
948 "tle2": "2 25169 86.3919 283.2800 0002428 86.1036 274.0443 14.34216393664392",
972 "visible": false949 "visible": false
973 },950 },
974 "IRIDIUM 53": 951 "IRIDIUM 53":
975 {952 {
976 "description": "Iridium 53",953 "comms": [],
977 "groups": ["iridium", "communications"],954 "groups": ["iridium", "communications"],
978 "tle1": "1 25173U 98010E 09080.74334661 .00000213 00000-0 68921-4 0 4965",955 "orbitColor": [0, 0, 0],
979 "tle2": "2 25173 86.4038 168.0584 0002328 85.4274 274.7179 14.34216418580426",956 "orbitVisible": false,
980 "draw_orbit": false,957 "tle1": "1 25173U 98010E 10301.38021403 -.00000015 00000-0 -12587-4 0 1854",
958 "tle2": "2 25173 86.3913 283.3189 0002495 82.8733 277.2753 14.34216408664366",
981 "visible": false959 "visible": false
982 },960 },
983 "IRIDIUM 54": 961 "IRIDIUM 54":
984 {962 {
985 "description": "Iridium 54",963 "comms": [],
986 "groups": ["iridium", "communications"],964 "groups": ["iridium", "communications"],
987 "tle1": "1 25171U 98010C 09080.83214435 .00000162 00000-0 50776-4 0 4950",965 "orbitColor": [0, 0, 0],
988 "tle2": "2 25171 86.4034 168.0396 0002357 83.7922 276.3539 14.34216177580592",966 "orbitVisible": false,
989 "draw_orbit": false,967 "tle1": "1 25171U 98010C 10301.39924441 -.00000011 00000-0 -11061-4 0 1769",
968 "tle2": "2 25171 86.3919 283.3345 0002424 83.5338 276.6130 14.34216421664520",
990 "visible": false969 "visible": false
991 },970 },
992 "IRIDIUM 55": 971 "IRIDIUM 55":
993 {972 {
994 "description": "Iridium 55",973 "comms": [],
995 "groups": ["iridium", "communications"],974 "groups": ["iridium", "communications"],
996 "tle1": "1 25272U 98019A 09080.65396145 -.00000055 00000-0 -26585-4 0 4460",975 "orbitColor": [0, 0, 0],
997 "tle2": "2 25272 86.3929 104.9099 0002443 82.6744 277.4726 14.34217346574706",976 "orbitVisible": false,
998 "draw_orbit": false,977 "tle1": "1 25272U 98019A 10301.29093539 -.00000972 00000-0 -35442-3 0 1320",
978 "tle2": "2 25272 86.3977 220.0601 0002338 82.5159 277.6284 14.34211332658646",
999 "visible": false979 "visible": false
1000 },980 },
1001 "IRIDIUM 56": 981 "IRIDIUM 56":
1002 {982 {
1003 "description": "Iridium 56",983 "comms": [],
1004 "groups": ["iridium", "communications"],984 "groups": ["iridium", "communications"],
1005 "tle1": "1 25170U 98010B 09080.93996768 .00000090 00000-0 25013-4 0 4042",985 "orbitColor": [0, 0, 0],
1006 "tle2": "2 25170 86.4019 168.0354 0002303 83.3803 276.7656 14.34215986580448",986 "orbitVisible": false,
1007 "draw_orbit": false,987 "tle1": "1 25170U 98010B 10301.43729637 -.00000028 00000-0 -17004-4 0 5746",
988 "tle2": "2 25170 86.3908 283.3687 0002487 85.4859 274.6628 14.34216414664368",
1008 "visible": false989 "visible": false
1009 },990 },
1010 "IRIDIUM 57": 991 "IRIDIUM 57":
1011 {992 {
1012 "description": "Iridium 57",993 "comms": [],
1013 "groups": ["iridium", "communications"],994 "groups": ["iridium", "communications"],
1014 "tle1": "1 25273U 98019B 09080.97743384 .00000010 00000-0 -34515-5 0 4842",995 "orbitColor": [0, 0, 0],
1015 "tle2": "2 25273 86.3938 104.9487 0002488 81.4053 278.7428 14.34217528574757",996 "orbitVisible": false,
1016 "draw_orbit": false,997 "tle1": "1 25273U 98019B 10301.33533499 -.00001235 00000-0 -44805-3 0 1775",
998 "tle2": "2 25273 86.3978 220.2411 0002411 79.3416 280.8052 14.34209304658657",
1017 "visible": false999 "visible": false
1018 },1000 },
1019 "IRIDIUM 58": 1001 "IRIDIUM 58":
1020 {1002 {
1021 "description": "Iridium 58",1003 "comms": [],
1022 "groups": ["iridium", "communications"],1004 "groups": ["iridium", "communications"],
1023 "tle1": "1 25274U 98019C 09080.56516741 -.00000072 00000-0 -32690-4 0 2919",1005 "orbitColor": [0, 0, 0],
1024 "tle2": "2 25274 86.3927 105.2286 0002529 81.2320 278.9159 14.34216858574699",1006 "orbitVisible": false,
1025 "draw_orbit": false,1007 "tle1": "1 25274U 98019C 10301.34167667 -.00001005 00000-0 -36595-3 0 9834",
1008 "tle2": "2 25274 86.3983 220.3638 0002407 77.7622 282.3841 14.34211663658656",
1026 "visible": false1009 "visible": false
1027 },1010 },
1028 "IRIDIUM 59": 1011 "IRIDIUM 59":
1029 {1012 {
1030 "description": "Iridium 59",1013 "comms": [],
1031 "groups": ["iridium", "communications"],1014 "groups": ["iridium", "communications"],
1032 "tle1": "1 25275U 98019D 09080.92035227 -.00000093 00000-0 -40264-4 0 1373",1015 "orbitColor": [0, 0, 0],
1033 "tle2": "2 25275 86.3948 105.0965 0002450 63.6517 296.4931 14.34216674574745",1016 "orbitVisible": false,
1034 "draw_orbit": false,1017 "tle1": "1 25275U 98019D 10301.48755396 -.00000215 00000-0 -83874-4 0 8195",
1018 "tle2": "2 25275 86.3977 220.2862 0002621 62.6138 297.5324 14.34212109658673",
1035 "visible": false1019 "visible": false
1036 },1020 },
1037 "IRIDIUM 6": 1021 "IRIDIUM 6":
1038 {1022 {
1039 "description": "Iridium 6",1023 "comms": [],
1040 "groups": ["iridium", "communications"],1024 "groups": ["iridium", "communications"],
1041 "tle1": "1 24794U 97020C 09080.68913056 .00000120 00000-0 35767-4 0 3460",1025 "orbitColor": [0, 0, 0],
1042 "tle2": "2 24794 86.4005 136.6398 0002655 84.7222 275.4275 14.34219576621845",1026 "orbitVisible": false,
1043 "draw_orbit": false,1027 "tle1": "1 24794U 97020C 10301.32607453 .00000055 00000-0 12715-4 0 338",
1028 "tle2": "2 24794 86.3937 251.8254 0002324 72.0200 288.1255 14.34218653705788",
1044 "visible": false1029 "visible": false
1045 },1030 },
1046 "IRIDIUM 60": 1031 "IRIDIUM 60":
1047 {1032 {
1048 "description": "Iridium 60",1033 "comms": [],
1049 "groups": ["iridium", "communications"],1034 "groups": ["iridium", "communications"],
1050 "tle1": "1 25276U 98019E 09080.57785244 -.00000075 00000-0 -33997-4 0 5140",1035 "orbitColor": [0, 0, 0],
1051 "tle2": "2 25276 86.3925 104.9765 0002456 85.4836 274.6635 14.34216941574699",1036 "orbitVisible": false,
1052 "draw_orbit": false,1037 "tle1": "1 25276U 98019E 10301.28459325 -.00000994 00000-0 -36204-3 0 2144",
1038 "tle2": "2 25276 86.3968 220.0866 0002365 82.9570 277.1859 14.34211540658648",
1053 "visible": false1039 "visible": false
1054 },1040 },
1055 "IRIDIUM 61": 1041 "IRIDIUM 61":
1056 {1042 {
1057 "description": "Iridium 61",1043 "comms": [],
1058 "groups": ["iridium", "communications"],1044 "groups": ["iridium", "communications"],
1059 "tle1": "1 25263U 98018B 09080.65107557 .00000022 00000-0 88117-6 0 4504",1045 "orbitColor": [0, 0, 0],
1060 "tle2": "2 25263 86.4005 136.6114 0002427 83.6921 276.4543 14.34219094575509",1046 "orbitVisible": false,
1061 "draw_orbit": false,1047 "tle1": "1 25263U 98018B 10301.35780410 .00000113 00000-0 33114-4 0 1428",
1048 "tle2": "2 25263 86.3928 251.7666 0002448 80.9880 279.1602 14.34218616659452",
1062 "visible": false1049 "visible": false
1063 },1050 },
1064 "IRIDIUM 62": 1051 "IRIDIUM 62":
1065 {1052 {
1066 "description": "Iridium 62",1053 "comms": [],
1067 "groups": ["iridium", "communications"],1054 "groups": ["iridium", "communications"],
1068 "tle1": "1 25285U 98021A 09080.95798294 .00000157 00000-0 49153-4 0 4806",1055 "orbitColor": [0, 0, 0],
1069 "tle2": "2 25285 86.3937 41.6021 0002403 80.9094 279.2370 14.34213398573703",1056 "orbitVisible": false,
1070 "draw_orbit": false,1057 "tle1": "1 25285U 98021A 10301.17622834 .00000069 00000-0 17456-4 0 1792",
1058 "tle2": "2 25285 86.3970 157.0768 0002305 82.5068 277.6381 14.34223177657589",
1071 "visible": false1059 "visible": false
1072 },1060 },
1073 "IRIDIUM 63": 1061 "IRIDIUM 63":
1074 {1062 {
1075 "description": "Iridium 63",1063 "comms": [],
1076 "groups": ["iridium", "communications"],1064 "groups": ["iridium", "communications"],
1077 "tle1": "1 25286U 98021B 09080.96432934 .00000129 00000-0 39109-4 0 4926",1065 "orbitColor": [0, 0, 0],
1078 "tle2": "2 25286 86.3940 41.6827 0002432 80.3005 279.8464 14.34213273573702",1066 "orbitVisible": false,
1079 "draw_orbit": false,1067 "tle1": "1 25286U 98021B 10301.53141413 .00000143 00000-0 44086-4 0 1918",
1068 "tle2": "2 25286 86.3968 157.0252 0002277 82.8855 277.2605 14.34223540657635",
1080 "visible": false1069 "visible": false
1081 },1070 },
1082 "IRIDIUM 64": 1071 "IRIDIUM 64":
1083 {1072 {
1084 "description": "Iridium 64",1073 "comms": [],
1085 "groups": ["iridium", "communications"],1074 "groups": ["iridium", "communications"],
1086 "tle1": "1 25287U 98021C 09080.97067364 .00000097 00000-0 27550-4 0 4403",1075 "orbitColor": [0, 0, 0],
1087 "tle2": "2 25287 86.3941 41.6185 0002444 79.6780 280.4691 14.34213124573687",1076 "orbitVisible": false,
1088 "draw_orbit": false,1077 "tle1": "1 25287U 98021C 10301.53775312 .00000146 00000-0 45003-4 0 1384",
1078 "tle2": "2 25287 86.3969 156.9492 0002225 78.7498 281.3965 14.34223729657613",
1089 "visible": false1079 "visible": false
1090 },1080 },
1091 "IRIDIUM 65": 1081 "IRIDIUM 65":
1092 {1082 {
1093 "description": "Iridium 65",1083 "comms": [],
1094 "groups": ["iridium", "communications"],1084 "groups": ["iridium", "communications"],
1095 "tle1": "1 25288U 98021D 09080.97701561 .00000123 00000-0 36733-4 0 4883",1085 "orbitColor": [0, 0, 0],
1096 "tle2": "2 25288 86.3937 41.5700 0002779 77.2145 282.9359 14.34213117573708",1086 "orbitVisible": false,
1097 "draw_orbit": false,1087 "tle1": "1 25288U 98021D 10301.54410206 .00000118 00000-0 35048-4 0 1741",
1088 "tle2": "2 25288 86.3961 156.8925 0002160 70.7095 289.4345 14.34223186657639",
1098 "visible": false1089 "visible": false
1099 },1090 },
1100 "IRIDIUM 66": 1091 "IRIDIUM 66":
1101 {1092 {
1102 "description": "Iridium 66",1093 "comms": [],
1103 "groups": ["iridium", "communications"],1094 "groups": ["iridium", "communications"],
1104 "tle1": "1 25289U 98021E 09080.91358909 .00000122 00000-0 36428-4 0 4444",1095 "orbitColor": [0, 0, 0],
1105 "tle2": "2 25289 86.3935 41.5254 0002463 80.4519 279.6944 14.34213230573699",1096 "orbitVisible": false,
1106 "draw_orbit": false,1097 "tle1": "1 25289U 98021E 10301.55043804 .00000160 00000-0 49961-4 0 1262",
1098 "tle2": "2 25289 86.3966 156.8141 0002326 77.3563 282.7910 14.34223829657630",
1107 "visible": false1099 "visible": false
1108 },1100 },
1109 "IRIDIUM 67": 1101 "IRIDIUM 67":
1110 {1102 {
1111 "description": "Iridium 67",1103 "comms": [],
1112 "groups": ["iridium", "communications"],1104 "groups": ["iridium", "communications"],
1113 "tle1": "1 25290U 98021F 09080.91993107 .00000097 00000-0 27599-4 0 2674",1105 "orbitColor": [0, 0, 0],
1114 "tle2": "2 25290 86.3939 41.6124 0002412 79.5456 280.6007 14.34213091573704",1106 "orbitVisible": false,
1115 "draw_orbit": false,1107 "tle1": "1 25290U 98021F 10301.55678822 .00000157 00000-0 49065-4 0 9571",
1108 "tle2": "2 25290 86.3966 156.9105 0002292 81.8706 278.2758 14.34222482657649",
1116 "visible": false1109 "visible": false
1117 },1110 },
1118 "IRIDIUM 68": 1111 "IRIDIUM 68":
1119 {1112 {
1120 "description": "Iridium 68",1113 "comms": [],
1121 "groups": ["iridium", "communications"],1114 "groups": ["iridium", "communications"],
1122 "tle1": "1 25291U 98021G 09080.92627825 .00000159 00000-0 49798-4 0 4808",1115 "orbitColor": [0, 0, 0],
1123 "tle2": "2 25291 86.3939 41.6734 0002409 78.9035 281.2421 14.34213167573671",1116 "orbitVisible": false,
1124 "draw_orbit": false,1117 "tle1": "1 25291U 98021G 10301.21428558 .00000022 00000-0 93324-6 0 1701",
1118 "tle2": "2 25291 86.3975 157.1273 0002379 80.9438 279.2019 14.34222910657565",
1125 "visible": false1119 "visible": false
1126 },1120 },
1127 "IRIDIUM 69": 1121 "IRIDIUM 69":
1128 {1122 {
1129 "description": "Iridium 69",1123 "comms": [],
1130 "groups": ["iridium", "communications"],1124 "groups": ["iridium", "communications"],
1131 "tle1": "1 25319U 98026A 09080.49486789 .00000092 00000-0 24359-4 0 3146",1125 "orbitColor": [0, 0, 0],
1132 "tle2": "2 25319 86.3922 69.9726 0004196 68.2945 291.8696 14.37077443570581",1126 "orbitVisible": false,
1133 "draw_orbit": false,1127 "tle1": "1 25319U 98026A 10301.20092608 .00000175 00000-0 52209-4 0 9992",
1128 "tle2": "2 25319 86.4028 184.2023 0001667 27.0848 333.0433 14.37186299654700",
1134 "visible": false1129 "visible": false
1135 },1130 },
1136 "IRIDIUM 7": 1131 "IRIDIUM 7":
1137 {1132 {
1138 "description": "Iridium 7",1133 "comms": [],
1139 "groups": ["iridium", "communications"],1134 "groups": ["iridium", "communications"],
1140 "tle1": "1 24793U 97020B 09080.69547303 .00000099 00000-0 28351-4 0 5488",1135 "orbitColor": [0, 0, 0],
1141 "tle2": "2 24793 86.4007 136.6478 0002405 86.1825 273.9642 14.34219478621845",1136 "orbitVisible": false,
1142 "draw_orbit": false,1137 "tle1": "1 24793U 97020B 10301.40220610 .00000141 00000-0 43379-4 0 2318",
1138 "tle2": "2 24793 86.3940 251.8136 0002461 78.4314 281.7157 14.34218416705796",
1143 "visible": false1139 "visible": false
1144 },1140 },
1145 "IRIDIUM 70": 1141 "IRIDIUM 70":
1146 {1142 {
1147 "description": "Iridium 70",1143 "comms": [],
1148 "groups": ["iridium", "communications"],1144 "groups": ["iridium", "communications"],
1149 "tle1": "1 25342U 98032A 09080.95163750 .00000131 00000-0 39568-4 0 5009",1145 "orbitColor": [0, 0, 0],
1150 "tle2": "2 25342 86.3942 41.7657 0002391 79.7340 280.4119 14.34213490567784",1146 "orbitVisible": false,
1151 "draw_orbit": false,1147 "tle1": "1 25342U 98032A 10301.51872847 .00000058 00000-0 13786-4 0 1900",
1148 "tle2": "2 25342 86.3972 157.1287 0002384 75.3883 284.7578 14.34223132651711",
1152 "visible": false1149 "visible": false
1153 },1150 },
1154 "IRIDIUM 71": 1151 "IRIDIUM 71":
1155 {1152 {
1156 "description": "Iridium 71",1153 "comms": [],
1157 "groups": ["iridium", "communications"],1154 "groups": ["iridium", "communications"],
1158 "tle1": "1 25320U 98026B 09080.50288721 .00000073 00000-0 17612-4 0 528",1155 "orbitColor": [0, 0, 0],
1159 "tle2": "2 25320 86.3912 67.4298 0003490 107.5106 252.6473 14.37667721570864",1156 "orbitVisible": false,
1160 "draw_orbit": false,1157 "tle1": "1 25320U 98026B 10301.38830995 .00000167 00000-0 48786-4 0 7008",
1158 "tle2": "2 25320 86.4015 181.2578 0003918 53.2779 306.8772 14.37762656655044",
1161 "visible": false1159 "visible": false
1162 },1160 },
1163 "IRIDIUM 72": 1161 "IRIDIUM 72":
1164 {1162 {
1165 "description": "Iridium 72",1163 "comms": [],
1166 "groups": ["iridium", "communications"],1164 "groups": ["iridium", "communications"],
1167 "tle1": "1 25343U 98032B 09080.93895920 .00000118 00000-0 35034-4 0 4894",1165 "orbitColor": [0, 0, 0],
1168 "tle2": "2 25343 86.3940 41.5784 0002432 76.1741 283.9715 14.34213267567786",1166 "orbitVisible": false,
1169 "draw_orbit": false,1167 "tle1": "1 25343U 98032B 10301.36650689 .00000036 00000-0 57202-5 0 1786",
1168 "tle2": "2 25343 86.3968 156.9630 0002284 83.2424 276.9033 14.34222857651693",
1170 "visible": false1169 "visible": false
1171 },1170 },
1172 "IRIDIUM 73": 1171 "IRIDIUM 73":
1173 {1172 {
1174 "description": "Iridium 73",1173 "comms": [],
1175 "groups": ["iridium", "communications"],1174 "groups": ["iridium", "communications"],
1176 "tle1": "1 25344U 98032C 09080.78187609 .00000124 00000-0 28464-4 0 3655",1175 "orbitColor": [0, 0, 0],
1177 "tle2": "2 25344 86.4423 32.4179 0003011 59.8565 300.2935 14.47114841572085",1176 "orbitVisible": false,
1178 "draw_orbit": false,1177 "tle1": "1 25344U 98032C 10301.50767954 .00000224 00000-0 55764-4 0 684",
1178 "tle2": "2 25344 86.4424 145.7382 0001667 87.6700 272.4703 14.47231315656795",
1179 "visible": false1179 "visible": false
1180 },1180 },
1181 "IRIDIUM 74": 1181 "IRIDIUM 74":
1182 {1182 {
1183 "description": "Iridium 74",1183 "comms": [],
1184 "groups": ["iridium", "communications"],1184 "groups": ["iridium", "communications"],
1185 "tle1": "1 25345U 98032D 09080.98077926 .00000138 00000-0 35328-4 0 5135",1185 "orbitColor": [0, 0, 0],
1186 "tle2": "2 25345 86.4451 41.7016 0002432 79.4303 280.7170 14.42945639568815",1186 "orbitVisible": false,
1187 "draw_orbit": false,1187 "tle1": "1 25345U 98032D 10301.19597976 .00000138 00000-0 35333-4 0 2063",
1188 "tle2": "2 25345 86.4476 157.2241 0002407 81.1807 278.9657 14.42972666653203",
1188 "visible": false1189 "visible": false
1189 },1190 },
1190 "IRIDIUM 75": 1191 "IRIDIUM 75":
1191 {1192 {
1192 "description": "Iridium 75",1193 "comms": [],
1193 "groups": ["iridium", "communications"],1194 "groups": ["iridium", "communications"],
1194 "tle1": "1 25346U 98032E 09080.94529799 .00000116 00000-0 34491-4 0 5150",1195 "orbitColor": [0, 0, 0],
1195 "tle2": "2 25346 86.3944 41.7207 0002402 79.7335 280.4124 14.34213264568357",1196 "orbitVisible": false,
1196 "draw_orbit": false,1197 "tle1": "1 25346U 98032E 10301.16354397 .00000141 00000-0 43140-4 0 2068",
1198 "tle2": "2 25346 86.3971 157.2134 0002294 79.7958 280.3486 14.34223438652234",
1197 "visible": false1199 "visible": false
1198 },1200 },
1199 "IRIDIUM 76": 1201 "IRIDIUM 76":
1200 {1202 {
1201 "description": "Iridium 76",1203 "comms": [],
1202 "groups": ["iridium", "communications"],1204 "groups": ["iridium", "communications"],
1203 "tle1": "1 25432U 98048B 09080.94861862 .00000054 00000-0 12145-4 0 3738",1205 "orbitColor": [0, 0, 0],
1204 "tle2": "2 25432 86.3906 73.1863 0002300 98.0699 262.0767 14.34215369554286",1206 "orbitVisible": false,
1205 "draw_orbit": false,1207 "tle1": "1 25432U 98048B 10301.44608460 -.00000329 00000-0 -12444-3 0 616",
1208 "tle2": "2 25432 86.3996 188.4685 0003065 78.4615 281.6922 14.34214482638206",
1206 "visible": false1209 "visible": false
1207 },1210 },
1208 "IRIDIUM 77": 1211 "IRIDIUM 77":
1209 {1212 {
1210 "description": "Iridium 77",1213 "comms": [],
1211 "groups": ["iridium", "communications"],1214 "groups": ["iridium", "communications"],
1212 "tle1": "1 25471U 98051E 09080.82923891 .00000100 00000-0 28744-4 0 6088",1215 "orbitColor": [0, 0, 0],
1213 "tle2": "2 25471 86.3997 199.4609 0003163 99.7025 260.4521 14.34216514556700",1216 "orbitVisible": false,
1214 "draw_orbit": false,1217 "tle1": "1 25471U 98051E 10301.53585330 -.00000042 00000-0 -22019-4 0 2987",
1218 "tle2": "2 25471 86.3933 314.7363 0003080 66.1707 293.9816 14.34218805640653",
1215 "visible": false1219 "visible": false
1216 },1220 },
1217 "IRIDIUM 8": 1221 "IRIDIUM 8":
1218 {1222 {
1219 "description": "Iridium 8",1223 "comms": [],
1220 "groups": ["iridium", "communications"],1224 "groups": ["iridium", "communications"],
1221 "tle1": "1 24792U 97020A 09080.70181317 .00000069 00000-0 17647-4 0 5504",1225 "orbitColor": [0, 0, 0],
1222 "tle2": "2 24792 86.3985 136.5160 0002379 81.7440 278.4023 14.34219493621849",1226 "orbitVisible": false,
1223 "draw_orbit": false,1227 "tle1": "1 24792U 97020A 10301.33878008 .00000175 00000-0 55255-4 0 2367",
1228 "tle2": "2 24792 86.3929 251.6847 0002468 83.0522 277.0969 14.34218759705787",
1224 "visible": false1229 "visible": false
1225 },1230 },
1226 "IRIDIUM 80": 1231 "IRIDIUM 80":
1227 {1232 {
1228 "description": "Iridium 80",1233 "comms": [],
1229 "groups": ["iridium", "communications"],1234 "groups": ["iridium", "communications"],
1230 "tle1": "1 25469U 98051C 09080.96243436 .00000071 00000-0 18286-4 0 4399",1235 "orbitColor": [0, 0, 0],
1231 "tle2": "2 25469 86.4008 199.5241 0002317 83.5362 276.6098 14.34216358551528",1236 "orbitVisible": false,
1232 "draw_orbit": false,1237 "tle1": "1 25469U 98051C 10301.45974671 .00000026 00000-0 23231-5 0 1296",
1238 "tle2": "2 25469 86.3934 314.9459 0002420 84.6040 275.5434 14.34218863635448",
1233 "visible": false1239 "visible": false
1234 },1240 },
1235 "IRIDIUM 81": 1241 "IRIDIUM 81":
1236 {1242 {
1237 "description": "Iridium 81",1243 "comms": [],
1238 "groups": ["iridium", "communications"],1244 "groups": ["iridium", "communications"],
1239 "tle1": "1 25468U 98051B 09080.84189280 .00000175 00000-0 55498-4 0 4370",1245 "orbitColor": [0, 0, 0],
1240 "tle2": "2 25468 86.4000 199.4552 0002193 77.7791 282.3646 14.34217895551504",1246 "orbitVisible": false,
1241 "draw_orbit": false,1247 "tle1": "1 25468U 98051B 10301.33921626 .00000059 00000-0 14111-4 0 1229",
1248 "tle2": "2 25468 86.3933 314.8350 0002397 90.0757 270.0723 14.34221465635425",
1242 "visible": false1249 "visible": false
1243 },1250 },
1244 "IRIDIUM 82": 1251 "IRIDIUM 82":
1245 {1252 {
1246 "description": "Iridium 82",1253 "comms": [],
1247 "groups": ["iridium", "communications"],1254 "groups": ["iridium", "communications"],
1248 "tle1": "1 25467U 98051A 09080.84826518 .00000139 00000-0 42421-4 0 6061",1255 "orbitColor": [0, 0, 0],
1249 "tle2": "2 25467 86.3999 199.5966 0003026 75.7695 284.3832 14.34216930555283",1256 "orbitVisible": false,
1250 "draw_orbit": false,1257 "tle1": "1 25467U 98051A 10301.48511420 .00000014 00000-0 -21688-5 0 2996",
1258 "tle2": "2 25467 86.3932 314.9807 0001788 65.6330 294.5064 14.34218947639221",
1251 "visible": false1259 "visible": false
1252 },1260 },
1253 "IRIDIUM 83": 1261 "IRIDIUM 83":
1254 {1262 {
1255 "description": "Iridium 83",1263 "comms": [],
1256 "groups": ["iridium", "communications"],1264 "groups": ["iridium", "communications"],
1257 "tle1": "1 25531U 98066E 09080.92094038 .00000145 00000-0 44885-4 0 4298",1265 "orbitColor": [0, 0, 0],
1258 "tle2": "2 25531 86.4034 167.8505 0002327 86.2880 273.8578 14.34216119543038",1266 "orbitVisible": false,
1259 "draw_orbit": false,1267 "tle1": "1 25531U 98066E 10301.48804132 .00000035 00000-0 56045-5 0 1344",
1268 "tle2": "2 25531 86.3909 283.1112 0002508 84.1587 275.9902 14.34216451626963",
1260 "visible": false1269 "visible": false
1261 },1270 },
1262 "IRIDIUM 84": 1271 "IRIDIUM 84":
1263 {1272 {
1264 "description": "Iridium 84",1273 "comms": [],
1265 "groups": ["iridium", "communications"],1274 "groups": ["iridium", "communications"],
1266 "tle1": "1 25530U 98066D 09080.74968891 .00000167 00000-0 52727-4 0 3189",1275 "orbitColor": [0, 0, 0],
1267 "tle2": "2 25530 86.4031 167.9111 0002365 84.5906 275.5553 14.34216529545657",1276 "orbitVisible": false,
1268 "draw_orbit": false,1277 "tle1": "1 25530U 98066D 10301.38654792 -.00000022 00000-0 -15073-4 0 35",
1278 "tle2": "2 25530 86.3904 283.1224 0002478 80.5376 279.6109 14.34216504629594",
1269 "visible": false1279 "visible": false
1270 },1280 },
1271 "IRIDIUM 86": 1281 "IRIDIUM 86":
1272 {1282 {
1273 "description": "Iridium 86",1283 "comms": [],
1274 "groups": ["iridium", "communications"],1284 "groups": ["iridium", "communications"],
1275 "tle1": "1 25528U 98066B 09080.78774334 .00000154 00000-0 47880-4 0 6551",1285 "orbitColor": [0, 0, 0],
1276 "tle2": "2 25528 86.4010 167.7890 0003121 91.2601 268.8949 14.34216774548021",1286 "orbitVisible": false,
1277 "draw_orbit": false,1287 "tle1": "1 25528U 98066B 10301.49439995 -.00000076 00000-0 -34290-4 0 3494",
1288 "tle2": "2 25528 86.3905 282.9585 0002584 64.3260 295.8203 14.34214517631971",
1278 "visible": false1289 "visible": false
1279 },1290 },
1280 "IRIDIUM 90": 1291 "IRIDIUM 90":
1281 {1292 {
1282 "description": "Iridium 90",1293 "comms": [],
1283 "groups": ["iridium", "communications"],1294 "groups": ["iridium", "communications"],
1284 "tle1": "1 27373U 02005B 09080.75759552 .00000204 00000-0 54978-4 0 9905",1295 "orbitColor": [1.33587057158802e-32, 1.33611037243559e-32, 1.33635017328316e-32],
1285 "tle2": "2 27373 86.4545 167.7383 0002768 294.7036 65.3870 14.42961102377382",1296 "orbitVisible": false,
1286 "draw_orbit": false,1297 "tle1": "1 27373U 02005B 10301.38944945 .00000018 00000-0 -61500-6 0 6928",
1298 "tle2": "2 27373 86.4418 283.0115 0006587 122.1221 238.0642 14.42944996461831",
1287 "visible": false1299 "visible": false
1288 },1300 },
1289 "IRIDIUM 91": 1301 "IRIDIUM 91":
1290 {1302 {
1291 "description": "Iridium 91",1303 "comms": [],
1292 "groups": ["iridium", "communications"],1304 "groups": ["iridium", "communications"],
1293 "tle1": "1 27372U 02005A 09080.97109062 -.00000020 00000-0 -14335-4 0 297",1305 "orbitColor": [0, 0, 0],
1294 "tle2": "2 27372 86.3944 105.0683 0004458 24.2179 335.9227 14.34217272380315",1306 "orbitVisible": false,
1295 "draw_orbit": false,1307 "tle1": "1 27372U 02005A 10301.32898421 -.00000869 00000-0 -31743-3 0 7196",
1308 "tle2": "2 27372 86.3994 220.4433 0001622 210.6079 149.5009 14.34212504464217",
1296 "visible": false1309 "visible": false
1297 },1310 },
1298 "IRIDIUM 911": 1311 "IRIDIUM 911":
1299 {1312 {
1300 "description": "Iridium 911",1313 "comms": [],
1301 "groups": ["iridium", "communications"],1314 "groups": ["iridium", "communications"],
1302 "tle1": "1 24842U 97030G 09080.72568503 .00000103 00000-0 24569-4 0 2539",1315 "orbitColor": [0, 0, 0],
1303 "tle2": "2 24842 86.4523 170.7526 0015237 358.4789 1.6370 14.43158132618677",1316 "orbitVisible": false,
1304 "draw_orbit": false,1317 "tle1": "1 24842U 97030G 10301.39019954 .00000179 00000-0 47092-4 0 9100",
1318 "tle2": "2 24842 86.4409 285.8639 0013360 202.2380 157.8254 14.43279006703147",
1305 "visible": false1319 "visible": false
1306 },1320 },
1307 "IRIDIUM 914": 1321 "IRIDIUM 914":
1308 {1322 {
1309 "description": "Iridium 914",1323 "comms": [],
1310 "groups": ["iridium", "communications"],1324 "groups": ["iridium", "communications"],
1311 "tle1": "1 24836U 97030A 09080.76183671 .00000072 00000-0 17532-4 0 1698",1325 "orbitColor": [0, 0, 0],
1312 "tle2": "2 24836 86.3996 160.9874 0000845 77.3318 282.7979 14.37427546616467",1326 "orbitVisible": false,
1313 "draw_orbit": false,1327 "tle1": "1 24836U 97030A 10301.47064822 .00000123 00000-0 34337-4 0 8180",
1314 "draw_orbit": false,1328 "tle2": "2 24836 86.3878 274.7253 0003518 99.8978 260.2622 14.37508507700605",
1315 "visible": false1329 "visible": false
1316 },1330 },
1317 "IRIDIUM 920": 1331 "IRIDIUM 920":
1318 {1332 {
1319 "description": "Iridium 920",1333 "comms": [],
1320 "groups": ["iridium", "communications"],1334 "groups": ["iridium", "communications"],
1321 "tle1": "1 24871U 97034C 09080.95778183 -.00000024 00000-0 -14712-4 0 1999",1335 "orbitColor": [0, 0, 0],
1322 "tle2": "2 24871 86.4029 192.6800 0013043 137.8990 222.3210 14.38055586613699",1336 "orbitVisible": false,
1323 "draw_orbit": false,1337 "tle1": "1 24871U 97034C 10301.47784503 .00000156 00000-0 44992-4 0 8654",
1338 "tle2": "2 24871 86.3924 306.5829 0013278 34.5535 325.6538 14.38145628697843",
1324 "visible": false1339 "visible": false
1325 },1340 },
1326 "IRIDIUM 921": 1341 "IRIDIUM 921":
1327 {1342 {
1328 "description": "Iridium 921",1343 "comms": [],
1329 "groups": ["iridium", "communications"],1344 "groups": ["iridium", "communications"],
1330 "tle1": "1 24873U 97034E 09080.91559410 .00000320 00000-0 24960-4 0 5208",1345 "orbitColor": [0, 0, 0],
1331 "tle2": "2 24873 86.3865 31.4638 0010185 126.4679 233.7489 14.97110247636150",1346 "orbitVisible": false,
1332 "draw_orbit": false,1347 "tle1": "1 24873U 97034E 10301.42548635 .00000748 00000-0 61428-4 0 2503",
1348 "tle2": "2 24873 86.3825 120.3525 0007896 173.3973 186.7336 14.97579698723763",
1333 "visible": false1349 "visible": false
1334 },1350 },
1335 "IRIDIUM 94": 1351 "IRIDIUM 94":
1336 {1352 {
1337 "description": "Iridium 94",1353 "comms": [],
1338 "groups": ["iridium", "communications"],1354 "groups": ["iridium", "communications"],
1339 "tle1": "1 27374U 02005C 09080.75273894 -.00000019 00000-0 -75926-5 0 618",1355 "orbitColor": [0, 0, 0],
1340 "tle2": "2 27374 86.5746 104.7593 0002666 84.3214 275.8306 14.66608250380349",1356 "orbitVisible": false,
1341 "draw_orbit": false,1357 "tle1": "1 27374U 02005C 10301.52437384 .00000386 00000-0 65943-4 0 7997",
1358 "tle2": "2 27374 86.5797 219.8733 0002532 81.5994 278.5499 14.66262166466187",
1342 "visible": false1359 "visible": false
1343 },1360 },
1344 "IRIDIUM 95": 1361 "IRIDIUM 95":
1345 {1362 {
1346 "description": "Iridium 95",1363 "comms": [],
1347 "groups": ["iridium", "communications"],1364 "groups": ["iridium", "communications"],
1348 "tle1": "1 27375U 02005D 09080.66030253 -.00000059 00000-0 -28000-4 0 84",1365 "orbitColor": [0, 0, 0],
1349 "tle2": "2 27375 86.3944 105.0032 0002427 89.9724 270.1749 14.34217381379558",1366 "orbitVisible": false,
1350 "draw_orbit": false,1367 "tle1": "1 27375U 02005D 10301.36704777 -.00001097 00000-0 -39903-3 0 6945",
1368 "tle2": "2 27375 86.3990 220.2275 0002513 83.6665 276.4819 14.34210058463509",
1351 "visible": false1369 "visible": false
1352 },1370 },
1353 "IRIDIUM 96": 1371 "IRIDIUM 96":
1354 {1372 {
1355 "description": "Iridium 96",1373 "comms": [],
1356 "groups": ["iridium", "communications"],1374 "groups": ["iridium", "communications"],
1357 "tle1": "1 27376U 02005E 09080.56026923 -.00000015 00000-0 -69572-5 0 546",1375 "orbitColor": [0, 0, 0],
1358 "tle2": "2 27376 86.5756 104.7982 0002697 80.6016 279.5497 14.66608347380313",1376 "orbitVisible": false,
1359 "draw_orbit": false,1377 "tle1": "1 27376U 02005E 10301.32586491 .00000427 00000-0 73309-4 0 7868",
1378 "tle2": "2 27376 86.5797 219.8961 0002513 78.1701 281.9792 14.66261825466151",
1360 "visible": false1379 "visible": false
1361 },1380 },
1362 "IRIDIUM 97": 1381 "IRIDIUM 97":
1363 {1382 {
1364 "description": "Iridium 97",1383 "comms": [],
1365 "groups": ["iridium", "communications"],1384 "groups": ["iridium", "communications"],
1366 "tle1": "1 27450U 02031A 09080.67644149 .00000069 00000-0 17482-4 0 9207",1385 "orbitColor": [0, 0, 0],
1367 "tle2": "2 27450 86.4000 136.7814 0003464 21.9907 338.1435 14.34219520358872",1386 "orbitVisible": false,
1368 "draw_orbit": false,1387 "tle1": "1 27450U 02031A 10301.52269454 .00000150 00000-0 46368-4 0 6013",
1388 "tle2": "2 27450 86.3936 251.8511 0001794 177.8890 182.2321 14.34219456442849",
1369 "visible": false1389 "visible": false
1370 },1390 },
1371 "IRIDIUM 98": 1391 "IRIDIUM 98":
1372 {1392 {
1373 "description": "Iridium 98",1393 "comms": [],
1374 "groups": ["iridium", "communications"],1394 "groups": ["iridium", "communications"],
1375 "tle1": "1 27451U 02031B 09080.85265633 .00000211 00000-0 57105-4 0 9389",1395 "orbitColor": [0, 0, 0],
1376 "tle2": "2 27451 86.4540 199.6827 0005377 49.1145 311.0517 14.42947974358258",1396 "orbitVisible": false,
1377 "draw_orbit": false,1397 "tle1": "1 27451U 02031B 10301.48412638 .00000083 00000-0 18806-4 0 6496",
1398 "tle2": "2 27451 86.4467 315.2431 0001379 229.4044 130.7062 14.42954671442709",
1378 "visible": false1399 "visible": false
1379 },1400 },
1380 "ISS (ZARYA)": 1401 "ISS (ZARYA)":
@@ -1408,81 +1429,117 @@
1408 "description": "ARISS packet uplink",1429 "description": "ARISS packet uplink",
1409 "frequency": 145.8251430 "frequency": 145.825
1410 }],1431 }],
1432 "groups": [],
1411 "hintColor": [0.899999976158142, 0.899999976158142, 0.899999976158142],1433 "hintColor": [0.899999976158142, 0.899999976158142, 0.899999976158142],
1412 "tle1": "1 25544U 98067A 10011.92371058 .00012181 00000-0 76107-4 0 3541",1434 "orbitColor": [0, 0, 0],
1413 "tle2": "2 25544 51.6465 313.4924 0007635 171.1951 233.5729 15.77327898638859",1435 "orbitVisible": true,
1414 "draw_orbit": true,1436 "tle1": "1 25544U 98067A 10302.36561338 .00017353 00000-0 13399-3 0 1686",
1437 "tle2": "2 25544 51.6470 264.0662 0008627 133.4449 11.1436 15.72003660684578",
1438 "visible": true
1439 },
1440 "ITAMSAT (IO-26)":
1441 {
1442 "comms": [],
1443 "groups": ["amateur", "non-operational"],
1444 "orbitColor": [0, 0, 0],
1445 "orbitVisible": false,
1446 "tle1": "1 22826U 93061D 10301.97235919 .00000031 00000-0 28853-4 0 3997",
1447 "tle2": "2 22826 98.4957 247.1079 0008234 226.7778 133.2713 14.29571240891272",
1448 "visible": false
1449 },
1450 "JAS-1 (FO-12)":
1451 {
1452 "comms": [],
1453 "groups": ["amateur", "non-operational"],
1454 "orbitColor": [0, 0, 0],
1455 "orbitVisible": false,
1456 "tle1": "1 16909U 86061B 10301.81520572 -.00000083 00000-0 10000-3 0 8008",
1457 "tle2": "2 16909 50.0140 68.9849 0011238 37.6411 322.5189 12.44454413101068",
1458 "visible": false
1459 },
1460 "JAS-1B (FO-20)":
1461 {
1462 "comms": [],
1463 "groups": ["amateur", "non-operational"],
1464 "orbitColor": [0, 0, 0],
1465 "orbitVisible": false,
1466 "tle1": "1 20480U 90013C 10301.57246602 -.00000016 00000-0 26752-4 0 6029",
1467 "tle2": "2 20480 99.0171 133.7011 0540746 121.5591 243.9482 12.83366127970837",
1468 "visible": false
1469 },
1470 "JAS-2 (FO-29)":
1471 {
1472 "comms": [
1473 {
1474 "description": "uplink",
1475 "frequency": 145.95,
1476 "modulation": "SSB/CW"
1477 },
1478 {
1479 "description": "downlink",
1480 "frequency": 435.85,
1481 "modulation": "SSB/CW"
1482 }],
1483 "groups": ["amateur"],
1484 "orbitColor": [0, 0, 0],
1485 "orbitVisible": false,
1486 "tle1": "1 24278U 96046B 10301.66195490 .00000024 00000-0 57446-4 0 4253",
1487 "tle2": "2 24278 98.5182 112.3778 0351102 137.5077 225.3818 13.52953723701152",
1415 "visible": true1488 "visible": true
1416 },1489 },
1417 "KITSAT 1 (KO-23)": 1490 "KITSAT 1 (KO-23)":
1418 {1491 {
1419 "description": "Amateur satellite",1492 "comms": [],
1420 "groups": ["amateur", "non-operational"],1493 "groups": ["amateur", "non-operational"],
1421 "tle1": "1 22077U 92052B 09080.68175229 -.00000037 00000-0 10000-3 0 6995",1494 "orbitColor": [0, 0, 0],
1422 "tle2": "2 22077 66.0847 149.9211 0013023 300.4010 59.5723 12.86447618780266",1495 "orbitVisible": false,
1423 "draw_orbit": false,1496 "tle1": "1 22077U 92052B 10301.69375558 -.00000037 00000-0 10000-3 0 805",
1497 "tle2": "2 22077 66.0880 2.5985 0003219 352.4177 7.6789 12.86454782855643",
1424 "visible": false1498 "visible": false
1425 },1499 },
1426 "KITSAT 2 (KO-25)": 1500 "KITSAT 2 (KO-25)":
1427 {1501 {
1428 "description": "Amateur satellite",1502 "comms": [],
1429 "groups": ["amateur", "non-operational"],1503 "groups": ["amateur", "non-operational"],
1430 "tle1": "1 22828U 93061F 09080.83613139 -.00000007 00000-0 13561-4 0 1385",1504 "orbitColor": [0, 0, 0],
1431 "tle2": "2 22828 98.4126 37.7648 0010637 129.0987 231.1150 14.29813121775804",1505 "orbitVisible": false,
1432 "draw_orbit": false,1506 "tle1": "1 22828U 93061F 10301.06364579 .00000062 00000-0 40708-4 0 5982",
1507 "tle2": "2 22828 98.4900 246.0066 0009608 201.4547 158.6238 14.29863591859434",
1433 "visible": false1508 "visible": false
1434 },1509 },
1435 "LUSAT (LO-19)": 1510 "LUSAT (LO-19)":
1436 {1511 {
1437 "description": "Amateur satellite",1512 "comms": [],
1438 "groups": ["amateur", "non-operational"],1513 "groups": ["amateur", "non-operational"],
1439 "tle1": "1 20442U 90005G 09080.85379851 .00000101 00000-0 52762-4 0 4846",1514 "orbitColor": [0, 0, 0],
1440 "tle2": "2 20442 98.2328 60.8676 0012920 67.8229 292.4325 14.32055802 813",1515 "orbitVisible": false,
1441 "draw_orbit": false,1516 "tle1": "1 20442U 90005G 10301.84364414 .00000038 00000-0 29355-4 0 9398",
1442 "visible": false1517 "tle2": "2 20442 98.3130 259.8718 0012739 121.7305 238.5120 14.32109553 84689",
1443 },1518 "visible": false
1444 "UNAMSAT-2 (MO-30)": 1519 },
1445 {1520 "MOZHAYETS 4 (RS-22)":
1446 "description": "Amateur satellite",1521 {
1447 "groups": ["amateur", "non-operational"],1522 "comms": [
1448 "tle1": "1 24305U 96052B 09080.47219106 .00000009 00000-0 -65784-5 0 696",1523 {
1449 "tle2": "2 24305 82.9323 58.9099 0030942 136.0160 224.3468 13.73567811628634",1524 "description": "downlink",
1450 "draw_orbit": false,1525 "frequency": 435.352,
1451 "visible": false1526 "modulation": "CW"
1452 },1527 }],
1453 "TIUNGSAT-1 (MO-46)": 1528 "groups": ["amateur"],
1454 {1529 "orbitColor": [0, 0, 0],
1455 "description": "Amateur satellite",1530 "orbitVisible": false,
1456 "groups": ["amateur", "non-operational"],1531 "tle1": "1 27939U 03042A 10302.06642910 .00000227 00000-0 52443-4 0 6735",
1457 "tle1": "1 26548U 00057D 09080.87169003 -.00000081 00000-0 87572-5 0 3491",1532 "tle2": "2 27939 97.8700 161.7284 0013634 1.4874 358.6385 14.63469503378538",
1458 "tle2": "2 26548 64.5595 350.9689 0050062 285.2131 74.3419 14.83347625459005",1533 "visible": true
1459 "draw_orbit": false,
1460 "visible": false
1461 },1534 },
1462 "NCUBE-2": 1535 "NCUBE-2":
1463 {1536 {
1464 "comms": [],1537 "comms": [],
1465 "tle1": "1 28897U 05043H 10010.64548338 .00000118 00000-0 34050-4 0 457",1538 "groups": [],
1466 "tle2": "2 28897 98.0343 260.0372 0018237 60.5035 299.7985 14.60015933216294",1539 "orbitColor": [0, 0, 0],
1467 "draw_orbit": false,1540 "orbitVisible": false,
1468 "visible": false1541 "tle1": "1 28897U 05043H 10301.21380730 .00000281 00000-0 67563-4 0 2822",
1469 },1542 "tle2": "2 28897 97.9915 181.0256 0016236 227.0454 132.9375 14.60143919258699",
1470 "PCSAT (NO-44)":
1471 {
1472 "description": "Amateur satellite",
1473 "groups": ["amateur", "non-operational"],
1474 "tle1": "1 26931U 01043C 09080.69111513 -.00000245 00000-0 -63501-4 0 1278",
1475 "tle2": "2 26931 67.0529 289.7584 0005178 260.4427 99.6072 14.29549665390074",
1476 "draw_orbit": false,
1477 "visible": false
1478 },
1479 "SAPPHIRE (NO-45)":
1480 {
1481 "description": "Amateur satellite",
1482 "groups": ["amateur", "non-operational"],
1483 "tle1": "1 26932U 01043D 09080.93767055 -.00000067 00000-0 60390-5 0 1347",
1484 "tle2": "2 26932 67.0506 289.0527 0006019 240.4193 119.6306 14.29604170390158",
1485 "draw_orbit": false,
1486 "visible": false1543 "visible": false
1487 },1544 },
1488 "NOAA 15": 1545 "NOAA 15":
@@ -1493,11 +1550,11 @@
1493 "frequency": 137.5,1550 "frequency": 137.5,
1494 "modulation": "AM/APT"1551 "modulation": "AM/APT"
1495 }],1552 }],
1496 "description": "NOAA Weather Satellite 15",
1497 "groups": ["scientific", "weather"],1553 "groups": ["scientific", "weather"],
1498 "tle1": "1 25338U 98030A 09080.90089393 -.00000044 00000-0 -26503-6 0 8619",1554 "orbitColor": [0, 0, 0],
1499 "tle2": "2 25338 98.5808 72.0445 0009840 316.2506 43.7883 14.24749834564348",1555 "orbitVisible": true,
1500 "draw_orbit": true,1556 "tle1": "1 25338U 98030A 10301.29622088 .00000039 00000-0 35343-4 0 5746",
1557 "tle2": "2 25338 98.6330 285.9285 0011477 50.6187 309.6026 14.24862396647703",
1501 "visible": true1558 "visible": true
1502 },1559 },
1503 "NOAA 17": 1560 "NOAA 17":
@@ -1508,11 +1565,11 @@
1508 "frequency": 137.62,1565 "frequency": 137.62,
1509 "modulation": "AM/APT"1566 "modulation": "AM/APT"
1510 }],1567 }],
1511 "description": "NOAA Weather Satellite 17",
1512 "groups": ["scientific", "weather"],1568 "groups": ["scientific", "weather"],
1513 "tle1": "1 27453U 02032A 09080.80573152 -.00000085 00000-0 -18637-4 0 3444",1569 "orbitColor": [0, 0, 0],
1514 "tle2": "2 27453 98.4939 142.8491 0011919 24.2008 335.9717 14.24048587350311",1570 "orbitVisible": true,
1515 "draw_orbit": true,1571 "tle1": "1 27453U 02032A 10301.34155174 .00000013 00000-0 23508-4 0 406",
1572 "tle2": "2 27453 98.4151 346.3131 0012727 107.3453 252.9128 14.24202947433659",
1516 "visible": true1573 "visible": true
1517 },1574 },
1518 "NOAA 18": 1575 "NOAA 18":
@@ -1523,55 +1580,177 @@
1523 "frequency": 137.1,1580 "frequency": 137.1,
1524 "modulation": "AM/APT"1581 "modulation": "AM/APT"
1525 }],1582 }],
1526 "description": "NOAA Weather Satellite 18",
1527 "groups": ["scientific", "weather"],1583 "groups": ["scientific", "weather"],
1528 "tle1": "1 28654U 05018A 09080.77119997 .00000000 00000-0 24577-4 0 8343",1584 "orbitColor": [0, 0, 0],
1529 "tle2": "2 28654 98.8994 24.7197 0013458 248.9605 111.0150 14.11241530197625",1585 "orbitVisible": true,
1530 "draw_orbit": true,1586 "tle1": "1 28654U 05018A 10301.36432412 -.00000103 00000-0 -31919-4 0 5303",
1587 "tle2": "2 28654 98.9662 247.3312 0015092 40.2479 319.9812 14.11400503280228",
1531 "visible": true1588 "visible": true
1532 },1589 },
1533 "OPAL (OO-38)": 1590 "OPAL (OO-38)":
1534 {1591 {
1535 "description": "Amateur satellite",1592 "comms": [],
1536 "groups": ["amateur", "non-operational"],1593 "groups": ["amateur", "non-operational"],
1537 "tle1": "1 26063U 00004C 09080.77017786 -.00000011 00000-0 16522-4 0 4630",1594 "orbitColor": [0, 0, 0],
1538 "tle2": "2 26063 100.1939 211.4200 0036983 147.0349 213.3150 14.35858482479406",1595 "orbitVisible": false,
1539 "draw_orbit": false,1596 "tle1": "1 26063U 00004C 10301.79139841 .00000023 00000-0 28053-4 0 9388",
1597 "tle2": "2 26063 100.1955 184.9222 0036493 298.1072 61.6434 14.35911320563504",
1540 "visible": false1598 "visible": false
1541 },1599 },
1542 "OSCAR 3 (OSCAR III)": 1600 "OSCAR 3 (OSCAR III)":
1543 {1601 {
1544 "description": "Amateur satellite",1602 "comms": [],
1545 "groups": ["amateur", "non-operational"],1603 "groups": ["amateur", "non-operational"],
1546 "tle1": "1 01293U 65016F 09080.92578501 .00000079 00000-0 82795-4 0 4881",1604 "orbitColor": [0, 0, 0],
1547 "tle2": "2 01293 70.0694 359.9998 0020227 281.6686 78.2153 14.04694421247559",1605 "orbitVisible": false,
1548 "draw_orbit": false,1606 "tle1": "1 01293U 65016F 10301.16504886 .00000182 00000-0 14627-3 0 9293",
1607 "tle2": "2 01293 70.0742 175.0957 0020293 230.4062 129.5239 14.04822768329742",
1608 "visible": false
1609 },
1610 "OSCAR 5 (AO-5)":
1611 {
1612 "comms": [],
1613 "groups": ["amateur", "non-operational"],
1614 "orbitColor": [0, 0, 0],
1615 "orbitVisible": false,
1616 "tle1": "1 04321U 70008B 10301.91710438 -.00000031 00000-0 10000-3 0 3895",
1617 "tle2": "2 04321 102.1008 327.0014 0027516 116.1671 244.2233 12.52160958863180",
1618 "visible": false
1619 },
1620 "OSCAR 6 (AO-6)":
1621 {
1622 "comms": [],
1623 "groups": ["amateur", "non-operational"],
1624 "orbitColor": [0, 0, 0],
1625 "orbitVisible": false,
1626 "tle1": "1 06236U 72082B 10300.62660884 -.00000027 00000-0 10000-3 0 3796",
1627 "tle2": "2 06236 101.3975 298.8583 0004330 359.0525 1.0536 12.53083162739710",
1628 "visible": false
1629 },
1630 "OSCAR 7 (AO-7)":
1631 {
1632 "comms": [
1633 {
1634 "description": "200mW Beacon used with Modes B & C",
1635 "frequency": 145.972
1636 },
1637 {
1638 "description": "downlink",
1639 "frequency": 145.95,
1640 "modulation": "Modes B & C"
1641 },
1642 {
1643 "description": "uplink",
1644 "frequency": 145.9,
1645 "modulation": "Mode A"
1646 },
1647 {
1648 "description": "downlink",
1649 "frequency": 29.45,
1650 "modulation": "Mode A"
1651 },
1652 {
1653 "description": "200mW Beacon used with Mode A",
1654 "frequency": 29.502
1655 },
1656 {
1657 "frequency": 2304.1,
1658 "modulation": "40 mW Beacon - only when commanded"
1659 },
1660 {
1661 "description": "uplink",
1662 "frequency": 432.15,
1663 "modulation": "Modes B & C"
1664 }],
1665 "groups": ["amateur"],
1666 "orbitColor": [0, 0, 0],
1667 "orbitVisible": false,
1668 "tle1": "1 07530U 74089B 10301.95788337 -.00000027 00000-0 10000-3 0 9149",
1669 "tle2": "2 07530 101.3995 312.6222 0012265 12.5206 347.6162 12.53580065645217",
1670 "visible": true
1671 },
1672 "OSCAR 8 (AO-8)":
1673 {
1674 "comms": [],
1675 "groups": ["amateur", "non-operational"],
1676 "orbitColor": [0, 0, 0],
1677 "orbitVisible": false,
1678 "tle1": "1 10703U 78026B 10302.09716984 .00000360 00000-0 27885-3 0 9772",
1679 "tle2": "2 10703 98.7639 332.1837 0005434 220.9322 139.1432 13.98878843665771",
1680 "visible": false
1681 },
1682 "PACSAT (AO-16)":
1683 {
1684 "comms": [],
1685 "groups": ["amateur", "non-operational"],
1686 "orbitColor": [0, 0, 0],
1687 "orbitVisible": false,
1688 "tle1": "1 20439U 90005D 10301.79742930 .00000042 00000-0 31108-4 0 295",
1689 "tle2": "2 20439 98.3505 254.5613 0011591 126.5263 233.6991 14.31880226 84503",
1690 "visible": false
1691 },
1692 "PAN SAT (PO-34)":
1693 {
1694 "comms": [],
1695 "groups": ["amateur", "non-operational"],
1696 "orbitColor": [0, 0, 0],
1697 "orbitVisible": false,
1698 "tle1": "1 25520U 98064B 10301.70201388 .00000947 00000-0 36144-4 0 6084",
1699 "tle2": "2 25520 28.4585 155.8089 0005085 340.3000 19.7375 15.17716130664451",
1700 "visible": false
1701 },
1702 "PCSAT (NO-44)":
1703 {
1704 "comms": [],
1705 "groups": ["amateur", "non-operational"],
1706 "orbitColor": [0, 0, 0],
1707 "orbitVisible": false,
1708 "tle1": "1 26931U 01043C 10302.17766215 -.00000115 00000-0 -12460-4 0 5936",
1709 "tle2": "2 26931 67.0531 218.7490 0005616 271.5946 88.4492 14.29617215473904",
1549 "visible": false1710 "visible": false
1550 },1711 },
1551 "PEHUENSAT 1 (PO-63)": 1712 "PEHUENSAT 1 (PO-63)":
1552 {1713 {
1553 "comms": [],1714 "comms": [],
1554 "tle1": "1 29712U 07001D 09129.76442331 .00000438 00000-0 63872-4 0 4664",1715 "groups": [],
1555 "tle2": "2 29712 97.8314 187.0851 0015285 43.5600 316.6810 14.80531783125782",1716 "orbitColor": [0, 0, 0],
1556 "draw_orbit": false,1717 "orbitVisible": false,
1557 "visible": false1718 "tle1": "1 29712U 07001D 10301.18895127 .00001391 00000-0 18424-3 0 3692",
1719 "tle2": "2 29712 97.7673 349.0635 0015087 91.9833 268.3076 14.81366235205172",
1720 "visible": false
1721 },
1722 "PHASE 3B (AO-10)":
1723 {
1724 "comms": [],
1725 "groups": ["amateur", "non-operational"],
1726 "orbitColor": [0, 0, 0],
1727 "orbitVisible": false,
1728 "tle1": "1 14129U 83058B 10301.48429116 -.00000086 00000-0 10000-3 0 7774",
1729 "tle2": "2 14129 26.7917 67.8588 6039053 9.7099 357.9616 2.05867874177912",
1730 "visible": false
1731 },
1732 "PHASE 3D (AO-40)":
1733 {
1734 "comms": [
1735 {
1736 "description": "Beacon",
1737 "frequency": 145.898
1738 }],
1739 "groups": ["amateur"],
1740 "orbitColor": [0, 0, 0],
1741 "orbitVisible": false,
1742 "tle1": "1 26609U 00072B 10299.42141595 -.00000068 00000-0 10000-3 0 4325",
1743 "tle2": "2 26609 8.7380 307.8723 7952988 1.7527 359.9938 1.25586613 45867",
1744 "visible": true
1558 },1745 },
1559 "POSAT (PO-28)": 1746 "POSAT (PO-28)":
1560 {1747 {
1561 "description": "Amateur satellite",1748 "comms": [],
1562 "groups": ["amateur", "non-operational"],1749 "groups": ["amateur", "non-operational"],
1563 "tle1": "1 22829U 93061G 09080.84418226 -.00000012 00000-0 11647-4 0 1746",1750 "orbitColor": [0, 0, 0],
1564 "tle2": "2 22829 98.4087 38.9001 0010531 125.5741 234.6455 14.30211190807812",1751 "orbitVisible": false,
1565 "draw_orbit": false,1752 "tle1": "1 22829U 93061G 10302.02792415 .00000101 00000-0 55301-4 0 6131",
1566 "visible": false1753 "tle2": "2 22829 98.4857 248.1374 0009510 193.5771 166.5159 14.30264274891603",
1567 },
1568 "PAN SAT (PO-34)":
1569 {
1570 "description": "Amateur satellite",
1571 "groups": ["amateur", "non-operational"],
1572 "tle1": "1 25520U 98064B 09080.51367299 .00000409 00000-0 10351-4 0 2091",
1573 "tle2": "2 25520 28.4596 121.9419 0005186 71.4910 288.6250 15.17311364575324",
1574 "draw_orbit": false,
1575 "visible": false1754 "visible": false
1576 },1755 },
1577 "RADIO ROSTO (RS-15)": 1756 "RADIO ROSTO (RS-15)":
@@ -1595,70 +1774,41 @@
1595 "frequency": 145.878,1774 "frequency": 145.878,
1596 "modulation": "Mode A"1775 "modulation": "Mode A"
1597 }],1776 }],
1598 "description": "Radio Sputnik (RS) 15",1777 "groups": ["amateur"],
1599 "groups": ["amateur"],1778 "orbitColor": [0, 0, 0],
1600 "tle1": "1 23439U 94085A 09080.97335086 -.00000039 00000-0 10000-3 0 2029",1779 "orbitVisible": false,
1601 "tle2": "2 23439 64.8130 45.8464 0146514 68.4113 293.2342 11.27553256586281",1780 "tle1": "1 23439U 94085A 10300.89335058 -.00000039 00000-0 10000-3 0 3454",
1602 "draw_orbit": false,1781 "tle2": "2 23439 64.8172 179.9334 0163415 320.8699 38.0499 11.27554569652230",
1603 "visible": true1782 "visible": true
1604 },1783 },
1605 "MOZHAYETS 4 (RS-22)": 1784 "SAPPHIRE (NO-45)":
1606 {
1607 "comms": [
1608 {
1609 "description": "downlink",
1610 "frequency": 435.352,
1611 "modulation": "CW"
1612 }],
1613 "description": "Amateur satellite",
1614 "groups": ["amateur"],
1615 "tle1": "1 27939U 03042A 09080.74176473 .00000091 00000-0 26556-4 0 7452",
1616 "tle2": "2 27939 97.9578 318.7317 0014519 50.9541 309.2958 14.63301923292787",
1617 "draw_orbit": false,
1618 "visible": true
1619 },
1620 "SEASAT 1":
1621 {1785 {
1622 "comms": [],1786 "comms": [],
1623 "tle1": "1 10967U 78064A 10011.48877880 -.00000066 00000-0 21494-4 0 146",1787 "groups": ["amateur", "non-operational"],
1624 "tle2": "2 10967 108.0202 37.9154 0003096 275.7432 84.3363 14.42175802655204",1788 "orbitColor": [0, 0, 0],
1625 "draw_orbit": false,1789 "orbitVisible": false,
1626 "visible": true1790 "tle1": "1 26932U 01043D 10300.93680270 .00000207 00000-0 11303-3 0 6008",
1627 },1791 "tle2": "2 26932 67.0569 222.0623 0003987 282.5276 77.5383 14.29652157473776",
1628 "SEDSAT 1 (SO-33)":
1629 {
1630 "description": "Amateur satellite",
1631 "groups": ["amateur", "non-operational"],
1632 "tle1": "1 25509U 98061B 09080.68393431 .00000028 00000-0 -80808-5 0 4141",
1633 "tle2": "2 25509 31.4336 187.2850 0354956 293.3308 63.0343 14.28246349543312",
1634 "draw_orbit": false,
1635 "visible": false
1636 },
1637 "SUNSAT (SO-35)":
1638 {
1639 "description": "Amateur satellite",
1640 "groups": ["amateur", "non-operational"],
1641 "tle1": "1 25636U 99008C 09080.57259666 -.00000022 00000-0 18215-5 0 2632",
1642 "tle2": "2 25636 96.4526 285.7652 0148832 138.9281 222.3233 14.43457619530468",
1643 "draw_orbit": false,
1644 "visible": false1792 "visible": false
1645 },1793 },
1646 "SAUDISAT 1A (SO-41)": 1794 "SAUDISAT 1A (SO-41)":
1647 {1795 {
1648 "description": "Amateur satellite",1796 "comms": [],
1649 "groups": ["amateur", "non-operational"],1797 "groups": ["amateur", "non-operational"],
1650 "tle1": "1 26545U 00057A 09081.15361688 .00000047 00000-0 25135-4 0 2129",1798 "orbitColor": [0, 0, 0],
1651 "tle2": "2 26545 64.5602 25.7522 0053775 291.6905 67.8477 14.80571352458315",1799 "orbitVisible": false,
1652 "draw_orbit": false,1800 "tle1": "1 26545U 00057A 10302.21213510 .00000238 00000-0 49391-4 0 6636",
1801 "tle2": "2 26545 64.5593 19.7278 0028002 198.2244 161.7864 14.80754992545086",
1653 "visible": false1802 "visible": false
1654 },1803 },
1655 "SAUDISAT 1B (SO-42)": 1804 "SAUDISAT 1B (SO-42)":
1656 {1805 {
1657 "description": "Amateur satellite",1806 "comms": [],
1658 "groups": ["amateur", "non-operational"],1807 "groups": ["amateur", "non-operational"],
1659 "tle1": "1 26549U 00057E 09080.84595995 -.00000003 00000-0 19202-4 0 2905",1808 "orbitColor": [0, 0, 0],
1660 "tle2": "2 26549 64.5580 42.8624 0056981 296.2253 63.3012 14.79427179457945",1809 "orbitVisible": false,
1661 "draw_orbit": false,1810 "tle1": "1 26549U 00057E 10301.27703190 .00000252 00000-0 52462-4 0 7554",
1811 "tle2": "2 26549 64.5588 42.0123 0033543 196.2105 163.7950 14.79603796544554",
1662 "visible": false1812 "visible": false
1663 },1813 },
1664 "SAUDISAT 1C (SO-50)": 1814 "SAUDISAT 1C (SO-50)":
@@ -1674,73 +1824,151 @@
1674 "frequency": 436.795,1824 "frequency": 436.795,
1675 "modulation": "FM"1825 "modulation": "FM"
1676 }],1826 }],
1677 "description": "Amateur satellite",
1678 "groups": ["amateur"],1827 "groups": ["amateur"],
1679 "tle1": "1 27607U 02058C 09080.71748238 -.00000074 00000-0 10658-4 0 8438",1828 "orbitColor": [0, 0, 0],
1680 "tle2": "2 27607 64.5592 290.7496 0076162 224.5615 134.9353 14.71420878335808",1829 "orbitVisible": false,
1681 "draw_orbit": false,1830 "tle1": "1 27607U 02058C 10301.61448115 .00000083 00000-0 34786-4 0 3045",
1682 "visible": true1831 "tle2": "2 27607 64.5581 311.2303 0045303 21.9147 338.3881 14.71594408422011",
1832 "visible": true
1833 },
1834 "SEASAT 1":
1835 {
1836 "comms": [],
1837 "groups": [],
1838 "orbitColor": [0, 0, 0],
1839 "orbitVisible": false,
1840 "tle1": "1 10967U 78064A 10301.42156452 .00000021 00000-0 47716-4 0 2504",
1841 "tle2": "2 10967 108.0170 282.5360 0003008 244.5472 115.5366 14.42233989697001",
1842 "visible": true
1843 },
1844 "SEDSAT 1 (SO-33)":
1845 {
1846 "comms": [],
1847 "groups": ["amateur", "non-operational"],
1848 "orbitColor": [0, 0, 0],
1849 "orbitVisible": false,
1850 "tle1": "1 25509U 98061B 10301.54597441 .00000218 00000-0 32855-4 0 8244",
1851 "tle2": "2 25509 31.4315 114.3559 0352948 15.8890 345.2447 14.28335354627136",
1852 "visible": false
1853 },
1854 "SSETI EXPRESS (XO-53)":
1855 {
1856 "comms": [],
1857 "groups": ["amateur", "non-operational"],
1858 "orbitColor": [0, 0, 0],
1859 "orbitVisible": false,
1860 "tle1": "1 28894U 05043E 10302.16153439 .00000121 00000-0 34690-4 0 9025",
1861 "tle2": "2 28894 97.9880 181.3536 0016597 225.9524 134.0317 14.59762730266645",
1862 "visible": false
1863 },
1864 "SUNSAT (SO-35)":
1865 {
1866 "comms": [],
1867 "groups": ["amateur", "non-operational"],
1868 "orbitColor": [0, 0, 0],
1869 "orbitVisible": false,
1870 "tle1": "1 25636U 99008C 10301.17920158 .00000094 00000-0 31863-4 0 7442",
1871 "tle2": "2 25636 96.4810 11.4219 0149458 85.2411 276.5846 14.43522153614944",
1872 "visible": false
1873 },
1874 "TECHSAT 1B (GO-32)":
1875 {
1876 "comms": [],
1877 "groups": ["amateur", "non-operational"],
1878 "orbitColor": [0, 0, 0],
1879 "orbitVisible": false,
1880 "tle1": "1 25397U 98043D 10301.04803974 .00000064 00000-0 46175-4 0 3171",
1881 "tle2": "2 25397 98.3171 301.2061 0000536 187.5333 172.5857 14.23188315638945",
1882 "visible": false
1883 },
1884 "TIUNGSAT-1 (MO-46)":
1885 {
1886 "comms": [],
1887 "groups": ["amateur", "non-operational"],
1888 "orbitColor": [0, 0, 0],
1889 "orbitVisible": false,
1890 "tle1": "1 26548U 00057D 10301.43415163 .00000269 00000-0 50374-4 0 8347",
1891 "tle2": "2 26548 64.5572 338.3968 0020896 204.3629 155.6463 14.83575119545869",
1892 "visible": false
1683 },1893 },
1684 "TMSAT-1 (TO-31)": 1894 "TMSAT-1 (TO-31)":
1685 {1895 {
1686 "description": "Amateur satellite",1896 "comms": [],
1687 "groups": ["amateur", "non-operational"],1897 "groups": ["amateur", "non-operational"],
1688 "tle1": "1 25396U 98043C 09080.64556542 -.00000075 00000-0 -14722-4 0 3609",1898 "orbitColor": [0, 0, 0],
1689 "tle2": "2 25396 98.3414 113.1366 0003330 117.6494 242.5017 14.23773358555849",1899 "orbitVisible": false,
1690 "draw_orbit": false,1900 "tle1": "1 25396U 98043C 10301.66959165 .00000015 00000-0 24496-4 0 8311",
1901 "tle2": "2 25396 98.3083 307.8110 0001932 195.3696 164.7419 14.23816641639233",
1691 "visible": false1902 "visible": false
1692 },1903 },
1693 "UARS": 1904 "UARS":
1694 {1905 {
1695 "comms": [],1906 "comms": [],
1696 "tle1": "1 21701U 91063B 10011.56517379 .00007948 00000-0 10185-3 0 8632",1907 "groups": [],
1697 "tle2": "2 21701 56.9701 169.1612 0067526 215.9750 143.6756 15.57588661 11660",1908 "orbitColor": [0, 0, 0],
1698 "draw_orbit": false,1909 "orbitVisible": false,
1910 "tle1": "1 21701U 91063B 10302.26036846 .00018353 00000-0 16692-3 0 1147",
1911 "tle2": "2 21701 56.9712 322.6612 0063129 75.5188 285.2865 15.65524459 57060",
1699 "visible": true1912 "visible": true
1700 },1913 },
1914 "UNAMSAT-2 (MO-30)":
1915 {
1916 "comms": [],
1917 "groups": ["amateur", "non-operational"],
1918 "orbitColor": [0, 0, 0],
1919 "orbitVisible": false,
1920 "tle1": "1 24305U 96052B 10301.64417402 .00000050 00000-0 37693-4 0 5644",
1921 "tle2": "2 24305 82.9375 345.3896 0029043 310.0764 49.7849 13.73589184709104",
1922 "visible": false
1923 },
1924 "UOSAT 12 (UO-36)":
1925 {
1926 "comms": [],
1927 "groups": ["amateur", "non-operational"],
1928 "orbitColor": [0, 0, 0],
1929 "orbitVisible": false,
1930 "tle1": "1 25693U 99021A 10301.41097796 -.00000043 00000-0 13897-4 0 3404",
1931 "tle2": "2 25693 64.5608 25.1028 0045010 293.3862 66.2479 14.78829481621518",
1932 "visible": false
1933 },
1701 "UOSAT 2 (UO-11)": 1934 "UOSAT 2 (UO-11)":
1702 {1935 {
1703 "description": "Amateur satellite",1936 "comms": [],
1704 "groups": ["amateur", "non-operational"],1937 "groups": ["amateur", "non-operational"],
1705 "tle1": "1 14781U 84021B 09080.64423839 .00000051 00000-0 14037-4 0 9177",1938 "orbitColor": [0, 0, 0],
1706 "tle2": "2 14781 98.1180 124.2766 0008009 259.6956 100.3325 14.79700400344880",1939 "orbitVisible": false,
1707 "draw_orbit": false,1940 "tle1": "1 14781U 84021B 10301.36196208 -.00000161 00000-0 -14259-4 0 3760",
1941 "tle2": "2 14781 98.0387 353.3855 0009139 161.9114 198.2405 14.79849098431506",
1708 "visible": false1942 "visible": false
1709 },1943 },
1710 "UOSAT 3 (UO-14)": 1944 "UOSAT 3 (UO-14)":
1711 {1945 {
1712 "description": "Amateur satellite",1946 "comms": [],
1713 "groups": ["amateur", "non-operational"],1947 "groups": ["amateur", "non-operational"],
1714 "tle1": "1 20437U 90005B 09080.89917087 -.00000002 00000-0 14954-4 0 8782",1948 "orbitColor": [0, 0, 0],
1715 "tle2": "2 20437 98.3297 42.5381 0011721 66.3877 293.8534 14.31539355 562",1949 "orbitVisible": false,
1716 "draw_orbit": false,1950 "tle1": "1 20437U 90005B 10300.91152494 -.00000056 00000-0 -51411-5 0 3454",
1951 "tle2": "2 20437 98.4072 246.6446 0011266 129.9527 230.2667 14.31589070 84265",
1717 "visible": false1952 "visible": false
1718 },1953 },
1719 "UOSAT 4 (UO-15)": 1954 "UOSAT 4 (UO-15)":
1720 {1955 {
1721 "description": "Amateur satellite",1956 "comms": [],
1722 "groups": ["amateur", "non-operational"],1957 "groups": ["amateur", "non-operational"],
1723 "tle1": "1 20438U 90005C 09080.90778475 -.00000010 00000-0 12128-4 0 3731",1958 "orbitColor": [0, 0, 0],
1724 "tle2": "2 20438 98.3890 35.1941 0010802 94.4649 265.7767 14.30441006999994",1959 "orbitVisible": false,
1725 "draw_orbit": false,1960 "tle1": "1 20438U 90005C 10301.79041733 .00000022 00000-0 24893-4 0 8454",
1961 "tle2": "2 20438 98.4607 242.8951 0010217 160.3752 199.7827 14.30479448 83759",
1726 "visible": false1962 "visible": false
1727 },1963 },
1728 "UOSAT 5 (UO-22)": 1964 "UOSAT 5 (UO-22)":
1729 {1965 {
1730 "description": "Amateur satellite",1966 "comms": [],
1731 "groups": ["amateur", "non-operational"],1967 "groups": ["amateur", "non-operational"],
1732 "tle1": "1 21575U 91050B 09080.89099734 .00000050 00000-0 29842-4 0 5115",1968 "orbitColor": [0, 0, 0],
1733 "tle2": "2 21575 98.4357 31.0711 0006470 282.9876 77.0586 14.39667965928143",1969 "orbitVisible": false,
1734 "draw_orbit": false,1970 "tle1": "1 21575U 91050B 10301.83741544 .00000072 00000-0 37052-4 0 9705",
1735 "visible": false1971 "tle2": "2 21575 98.5098 250.6008 0007023 332.9581 27.1235 14.39741581 12450",
1736 },
1737 "UOSAT 12 (UO-36)":
1738 {
1739 "description": "Amateur satellite",
1740 "groups": ["amateur", "non-operational"],
1741 "tle1": "1 25693U 99021A 09080.89685166 -.00000052 00000-0 12065-4 0 8740",
1742 "tle2": "2 25693 64.5601 24.0115 0014988 205.2445 154.7951 14.78742116534931",
1743 "draw_orbit": false,
1744 "visible": false1972 "visible": false
1745 },1973 },
1746 "UWE-1": 1974 "UWE-1":
@@ -1751,42 +1979,21 @@
1751 "frequency": 437.505,1979 "frequency": 437.505,
1752 "modulation": "AFSK, 9600 baud"1980 "modulation": "AFSK, 9600 baud"
1753 }],1981 }],
1754 "tle1": "1 28892U 05043C 10011.41208966 .00000105 00000-0 31411-4 0 5277",1982 "groups": [],
1755 "tle2": "2 28892 98.0328 260.2408 0018374 58.0630 302.2350 14.59806760224221",1983 "orbitColor": [0, 0, 0],
1756 "draw_orbit": false,1984 "orbitVisible": false,
1985 "tle1": "1 28892U 05043C 10302.15932038 .00000277 00000-0 67049-4 0 7666",
1986 "tle2": "2 28892 97.9897 181.2370 0016475 223.3607 136.6293 14.59933347266640",
1757 "visible": false1987 "visible": false
1758 },1988 },
1759 "HAMSAT (VO-52)":
1760 {
1761 "comms": [
1762 {
1763 "description": "Beacon",
1764 "frequency": 145.86,
1765 "modulation": "CW"
1766 }],
1767 "description": "Amateur satellite",
1768 "groups": ["amateur"],
1769 "tle1": "1 28650U 05017B 09080.72416803 -.00000248 00000-0 -24823-4 0 1847",
1770 "tle2": "2 28650 97.7510 145.1610 0026425 317.3448 42.5717 14.81561809209694",
1771 "draw_orbit": false,
1772 "visible": true
1773 },
1774 "WEBERSAT (WO-18)": 1989 "WEBERSAT (WO-18)":
1775 {1990 {
1776 "description": "Amateur satellite",1991 "comms": [],
1777 "groups": ["amateur", "non-operational"],1992 "groups": ["amateur", "non-operational"],
1778 "tle1": "1 20441U 90005F 09080.86048996 .00000029 00000-0 26273-4 0 7816",1993 "orbitColor": [0, 0, 0],
1779 "tle2": "2 20441 98.2526 56.8316 0012586 69.9267 290.3272 14.31886901 720",1994 "orbitVisible": false,
1780 "draw_orbit": false,1995 "tle1": "1 20441U 90005F 10301.84779390 .00000035 00000-0 28489-4 0 2555",
1781 "visible": false1996 "tle2": "2 20441 98.3319 257.0049 0012093 124.2979 235.9352 14.31947554 84589",
1782 },
1783 "SSETI EXPRESS (XO-53)":
1784 {
1785 "description": "Amateur satellite",
1786 "groups": ["amateur", "non-operational"],
1787 "tle1": "1 28894U 05043E 09080.73492122 .00000020 00000-0 13815-4 0 4180",
1788 "tle2": "2 28894 98.0668 333.5116 0016556 264.1886 95.7421 14.59659039181098",
1789 "draw_orbit": false,
1790 "visible": false1997 "visible": false
1791 }1998 }
1792 },1999 },
17932000
=== modified file 'plugins/Satellites/src/CMakeLists.txt'
--- plugins/Satellites/src/CMakeLists.txt 2010-05-10 08:59:49 +0000
+++ plugins/Satellites/src/CMakeLists.txt 2010-10-30 00:49:41 +0000
@@ -1,15 +1,33 @@
1INCLUDE_DIRECTORIES(. sgp4sdp4 gui ${CMAKE_BINARY_DIR}/plugins/Satellites/src ${CMAKE_BINARY_DIR}/plugins/Satellites/src/gui)1INCLUDE_DIRECTORIES(. gsatellite gui ${CMAKE_BINARY_DIR}/plugins/Satellites/src ${CMAKE_BINARY_DIR}/plugins/Satellites/src/gui)
22
3LINK_DIRECTORIES(/src)3LINK_DIRECTORIES(/src)
44
5SET(Satellites_SRCS5SET(Satellites_SRCS
6 sgp4sdp4/sgp4sdp4.c6 gsatellite/gException.hpp
7 sgp4sdp4/sgp4sdp4.h7 gsatellite/gMatrix.cpp
8 sgp4sdp4/sgp_in.c8 gsatellite/gMatrix.hpp
9 sgp4sdp4/sgp_math.c9 gsatellite/gMatrixTempl.hpp
10 sgp4sdp4/sgp_obs.c10 gsatellite/gObserver.cpp
11 sgp4sdp4/sgp_time.c11 gsatellite/gObserver.hpp
12 sgp4sdp4/solar.c12 gsatellite/gSatTEME.cpp
13 gsatellite/gSatTEME.hpp
14 gsatellite/mathUtils.cpp
15 gsatellite/mathUtils.hpp
16 gsatellite/gTime.cpp
17 gsatellite/gTime.hpp
18 gsatellite/gTimeSpan.cpp
19 gsatellite/gVector.cpp
20 gsatellite/gVector.hpp
21 gsatellite/gVectorTempl.hpp
22 gsatellite/sgp4ext.cpp
23 gsatellite/sgp4ext.h
24 gsatellite/sgp4io.cpp
25 gsatellite/sgp4io.h
26 gsatellite/sgp4unit.cpp
27 gsatellite/sgp4unit.h
28 gsatellite/stdsat.h
29
30
13 Satellite.hpp31 Satellite.hpp
14 Satellite.cpp32 Satellite.cpp
15 Satellites.hpp33 Satellites.hpp
1634
=== modified file 'plugins/Satellites/src/Satellite.cpp'
--- plugins/Satellites/src/Satellite.cpp 2010-10-27 15:20:46 +0000
+++ plugins/Satellites/src/Satellite.cpp 2010-10-30 00:49:41 +0000
@@ -27,12 +27,22 @@
27#include "StelTexture.hpp"27#include "StelTexture.hpp"
28#include "VecMath.hpp"28#include "VecMath.hpp"
29#include "StelUtils.hpp"29#include "StelUtils.hpp"
30#include "sgp4sdp4/sgp4sdp4.h"30
31
32#include "gsatellite/gSatTEME.hpp"
33#include "gsatellite/gObserver.hpp"
34#include "gsatellite/gTime.hpp"
35#include "gsatellite/gVector.hpp"
3136
32#include <QTextStream>37#include <QTextStream>
33#include <QRegExp>38#include <QRegExp>
34#include <QDebug>39#include <QDebug>
35#include <QVariant>40#include <QVariant>
41#include <QtOpenGL>
42#include <QSettings>
43
44#include <cmath>
45#include <cstdlib>
3646
37// static data members - will be initialised in the Satallites class (the StelObjectMgr)47// static data members - will be initialised in the Satallites class (the StelObjectMgr)
38StelTextureSP Satellite::hintTexture;48StelTextureSP Satellite::hintTexture;
@@ -47,13 +57,15 @@
47 if (!map.contains("designation") || !map.contains("tle1") || !map.contains("tle2"))57 if (!map.contains("designation") || !map.contains("tle1") || !map.contains("tle2"))
48 return;58 return;
49 59
50 60 font.setPixelSize(16);
61
51 designation = map.value("designation").toString();62 designation = map.value("designation").toString();
52 strncpy(elements[0], "DUMMY", 5);63 strncpy(elements[0], "DUMMY", 5);
53 strncpy(elements[1], qPrintable(map.value("tle1").toString()), 80);64 strncpy(elements[1], qPrintable(map.value("tle1").toString()), 80);
54 strncpy(elements[2], qPrintable(map.value("tle2").toString()), 80);65 strncpy(elements[2], qPrintable(map.value("tle2").toString()), 80);
55 if (map.contains("description")) description = map.value("description").toString();66 if (map.contains("description")) description = map.value("description").toString();
56 if (map.contains("visible")) visible = map.value("visible").toBool();67 if (map.contains("visible")) visible = map.value("visible").toBool();
68 if (map.contains("orbitVisible")) orbitVisible = map.value("orbitVisible").toBool();
5769
58 if (map.contains("hintColor"))70 if (map.contains("hintColor"))
59 {71 {
@@ -87,12 +99,16 @@
87 }99 }
88 }100 }
89101
102 pSatellite = new gSatTEME( designation.toAscii().data(), elements[1], elements[2]);
103
90 setObserverLocation();104 setObserverLocation();
91 initialized = true;105 initialized = true;
92}106}
93107
94Satellite::~Satellite()108Satellite::~Satellite()
95{109{
110 if(pSatellite != NULL)
111 delete pSatellite;
96}112}
97113
98QVariantMap Satellite::getMap(void)114QVariantMap Satellite::getMap(void)
@@ -100,11 +116,14 @@
100 QVariantMap map;116 QVariantMap map;
101 map["designation"] = designation;117 map["designation"] = designation;
102 map["visible"] = visible;118 map["visible"] = visible;
119 map["orbitVisible"] = orbitVisible;
103 map["tle1"] = QString(elements[1]);120 map["tle1"] = QString(elements[1]);
104 map["tle2"] = QString(elements[2]);121 map["tle2"] = QString(elements[2]);
105 QVariantList col;122 QVariantList col, orbitCol;;
106 col << (double)hintColor[0] << (double)hintColor[1] << (double)hintColor[2];123 col << (double)hintColor[0] << (double)hintColor[1] << (double)hintColor[2];
124 orbitCol << (double)orbitColor[0] << (double)orbitColor[1] << (double)orbitColor[2];
107 map["hintColor"] = col;125 map["hintColor"] = col;
126 map["orbitColor"] = orbitCol;
108 QVariantList commList;127 QVariantList commList;
109 foreach(commLink c, comms)128 foreach(commLink c, comms)
110 {129 {
@@ -146,9 +165,23 @@
146165
147 if (flags&Extra1)166 if (flags&Extra1)
148 {167 {
168 oss << "<p>";
149 oss << QString("Range (km): <b>%1</b>").arg(range, 5, 'f', 2) << "<br>";169 oss << QString("Range (km): <b>%1</b>").arg(range, 5, 'f', 2) << "<br>";
150 oss << QString("Range rate (km/s): <b>%1</b>").arg(rangeRate, 5, 'f', 3) << "<br>";170 oss << QString("Range rate (km/s): <b>%1</b>").arg(rangeRate, 5, 'f', 3) << "<br>";
151 oss << QString("Altitude (km): <b>%1</b>").arg(height, 5, 'f', 2) << "<br>";171 oss << QString("Altitude (km): <b>%1</b>").arg(height, 5, 'f', 2) << "<br>";
172 oss << QString("SubPoint Lat/Long(Deg): <b>%1</b>").arg(LatLong[0], 5, 'f', 2) << "/";
173 oss << QString("<b>%1</b>").arg(LatLong[1], 5, 'f', 3);
174 oss << "</p>";
175
176 oss << "TEME Coordinates(km): ";
177 oss << QString("<b>X:</b> %1 ").arg(Position[0], 5, 'f', 2);
178 oss << QString("<b>Y:</b> %1 ").arg(Position[1], 5, 'f', 2);
179 oss << QString("<b>Z:</b> %1 ").arg(Position[2], 5, 'f', 2) << "<br>";
180 oss << "TEME Vel(km/s): ";
181 oss << QString("<b>X:</b> %1 ").arg(Vel[0], 5, 'f', 2);
182 oss << QString("<b>Y:</b> %1 ").arg(Vel[1], 5, 'f', 2);
183 oss << QString("<b>Z:</b> %1 ").arg(Vel[2], 5, 'f', 2) << "<br>";
184
152 }185 }
153186
154 if (flags&Extra2 && comms.size() > 0)187 if (flags&Extra2 && comms.size() > 0)
@@ -191,9 +224,10 @@
191 {224 {
192 l = *loc;225 l = *loc;
193 }226 }
194 obs_geodetic.lon = l.longitude * de2ra;227
195 obs_geodetic.lat = l.latitude * de2ra;228
196 obs_geodetic.alt = l.altitude / 1000.0;229 observer.setPosition( l.latitude, l.longitude, l.altitude / 1000.0);
230
197}231}
198232
199Vec3f Satellite::getInfoColor(void) const {233Vec3f Satellite::getInfoColor(void) const {
@@ -212,36 +246,26 @@
212246
213void Satellite::update(double)247void Satellite::update(double)
214{248{
215 ClearFlag(ALL_FLAGS);249 double jul_utc = StelApp::getInstance().getCore()->getNavigator()->getJDay();
216 Get_Next_Tle_Set(elements, &tle);250
217 memcpy(&localtle, &tle, sizeof(tle_t));251 epochTime = jul_utc;
218 select_ephemeris(&tle);252
219 double jul_epoch, jul_utc, tsince, phase;253 pSatellite->setEpoch( epochTime);
220 vector_t vel = {0,0,0,0};254 Position = pSatellite->getPos();
221 vector_t pos = {0,0,0,0};255 Vel = pSatellite->getVel();
222 vector_t obs_set;256 LatLong = pSatellite->getSubPoint( epochTime);
223 geodetic_t sat_geodetic;257 azElPos = observer.calculateLook( *pSatellite, epochTime);
224 jul_utc = StelApp::getInstance().getCore()->getNavigator()->getJDay();258
225 jul_epoch = Julian_Date_of_Epoch(tle.epoch);259
226 tsince = (jul_utc - jul_epoch) * xmnpda;260 azimuth = azElPos[ AZIMUTH]/KDEG2RAD;
227261 elevation = azElPos[ ELEVATION]/KDEG2RAD;
228 if (isFlagSet(DEEP_SPACE_EPHEM_FLAG))262 range = azElPos[ RANGE];
229 SDP4(tsince, &tle, &pos, &vel, &phase);263 rangeRate = azElPos[ RANGERATE];
230 else264 height = LatLong[2];
231 SGP4(tsince, &tle, &pos, &vel, &phase);265
232266 // Compute orbit points to draw orbit line.
233 Convert_Sat_State(&pos, &vel);267 if(orbitVisible) computeOrbitPoints();
234 SgpMagnitude(&vel); // scalar magnitude, not brightness...268
235 velocity=vel.w;
236
237 Calculate_Obs(jul_utc, &pos, &vel, &obs_geodetic, &obs_set);
238 Calculate_LatLonAlt(jul_utc, &pos, &sat_geodetic);
239
240 azimuth=Degrees(obs_set.x);
241 elevation=Degrees(obs_set.y);
242 range=obs_set.z;
243 rangeRate=obs_set.w;
244 height=sat_geodetic.alt;
245}269}
246270
247double Satellite::getDoppler(double freq) const271double Satellite::getDoppler(double freq) const
@@ -259,16 +283,164 @@
259 XYZ = core->getNavigator()->j2000ToEquinoxEqu(core->getNavigator()->altAzToEquinoxEqu(pos));283 XYZ = core->getNavigator()->j2000ToEquinoxEqu(core->getNavigator()->altAzToEquinoxEqu(pos));
260 StelApp::getInstance().getVisionModeNight() ? glColor4f(0.6,0.0,0.0,1.0) : glColor4f(hintColor[0],hintColor[1],hintColor[2], Satellite::hintBrightness);284 StelApp::getInstance().getVisionModeNight() ? glColor4f(0.6,0.0,0.0,1.0) : glColor4f(hintColor[0],hintColor[1],hintColor[2], Satellite::hintBrightness);
261285
286
262 StelProjectorP prj = core->getProjection(StelCore::FrameJ2000);287 StelProjectorP prj = core->getProjection(StelCore::FrameJ2000);
263 Vec3d xy;288 Vec3d xy;
264 if (prj->project(XYZ,xy))289 if (prj->project(XYZ,xy))
265 {290 {
291
266 if (Satellite::showLabels)292 if (Satellite::showLabels)
267 {293 {
268 painter.drawText(xy[0], xy[1], designation, 0, 10, 10, false);294 painter.drawText(xy[0], xy[1], designation, 0, 10, 10, false);
269 Satellite::hintTexture->bind();295 Satellite::hintTexture->bind();
270 }296 }
271 painter.drawSprite2dMode(xy[0], xy[1], 11);297 painter.drawSprite2dMode(xy[0], xy[1], 11);
298
299 if(orbitVisible) drawOrbit(core, prj, painter);
300 }
301}
302
303void Satellite::drawOrbit(const StelCore* core, StelProjectorP& prj, StelPainter& painter){
304 Vec3d XYZPos, xy1;
305 float a, azimth, elev;
306 QVarLengthArray<float, 1024> vertexArray;
307
308
309 glDisable(GL_TEXTURE_2D);
310 glEnable(GL_LINE_SMOOTH);
311 glEnable(GL_BLEND);
312 painter.enableClientStates(true, false, false);
313
314 QList<gVector>::iterator it= orbitPoints.begin();
315
316 for(int i=0; i<orbitPoints.size();i++)
317 {
318 azimth = it->at( AZIMUTH);
319 elev = it->at( ELEVATION);
320 a = ( (azimth/KDEG2RAD)-90)*M_PI/180;
321 Vec3d pos(sin(a),cos(a), tan( (elev/KDEG2RAD) * M_PI / 180.));
322 XYZPos = core->getNavigator()->j2000ToEquinoxEqu(core->getNavigator()->altAzToEquinoxEqu(pos));
323
324 if (prj->project(XYZPos,xy1))
325 {
326 vertexArray.append(xy1[0]);
327 vertexArray.append(xy1[1]);
328 }
329 it++;
330
331 // draw the end parts of the orbit only, since they have non-standard color
332 // We'll draw the middle segment (with all the same color) with a single
333 // call to drawFromArray after this loop closes.
334 if (i>0 && ((DRAWORBIT_SLOTS_NUMBER/2) - abs(i - (DRAWORBIT_SLOTS_NUMBER/2) % DRAWORBIT_SLOTS_NUMBER)) < DRAWORBIT_FADE_NUMBER)
335 {
336 painter.setColor(hintColor[0], hintColor[1], hintColor[2], hintBrightness * calculateOrbitSegmentIntensity(i));
337 painter.setVertexPointer(2, GL_FLOAT, vertexArray.constData());
338 painter.drawFromArray(StelPainter::LineStrip, 2, i-1, false);
339 }
340 }
341
342 // draw the middle segments of the orbit which are all the same color
343 if(!vertexArray.isEmpty())
344 {
345 if (vertexArray.count() > (2*DRAWORBIT_FADE_NUMBER))
346 {
347 painter.setColor(hintColor[0], hintColor[1], hintColor[2], hintBrightness);
348 painter.setVertexPointer(2, GL_FLOAT, vertexArray.constData());
349 painter.drawFromArray(StelPainter::LineStrip, DRAWORBIT_SLOTS_NUMBER + 1 - (2*DRAWORBIT_FADE_NUMBER), DRAWORBIT_FADE_NUMBER - 1, false);
350 }
351 vertexArray.clear();
352 }
353
354 painter.enableClientStates(false);
355 glEnable(GL_TEXTURE_2D);
356}
357
358float Satellite::calculateOrbitSegmentIntensity(int segNum)
359{
360 int endDist = (DRAWORBIT_SLOTS_NUMBER/2) - abs(segNum - (DRAWORBIT_SLOTS_NUMBER/2) % DRAWORBIT_SLOTS_NUMBER);
361 if (endDist > DRAWORBIT_FADE_NUMBER) { return 1.0; }
362 else { return (endDist + 1) / (DRAWORBIT_FADE_NUMBER + 1.0); }
363}
364
365void Satellite::computeOrbitPoints(){
366
367 gTimeSpan computeInterval(0,0,0,DRAWORBIT_SLOT_SECNUMBER); //1/2 minute
368 gTimeSpan orbitSpan(0,0,0, DRAWORBIT_SLOTS_NUMBER*DRAWORBIT_SLOT_SECNUMBER/2); //+- 15 minutes range.
369 gTime epochTm;
370 gVector azElVector;
371 int diffSlots;
372
373
374 if( orbitPoints.isEmpty())//Setup orbitPoins
375 {
376 epochTm = epochTime - orbitSpan;
377
378 for(int i=0; i< DRAWORBIT_SLOTS_NUMBER; i++)
379 {
380 pSatellite->setEpoch( epochTm);
381 azElVector = observer.calculateLook( *pSatellite, epochTm);
382 orbitPoints.append(azElVector);
383 epochTm += computeInterval;
384 }
385 lastEpochCompForOrbit = epochTime;
386 }
387 else if( epochTime > lastEpochCompForOrbit)
388 { // compute next orbit point when clock runs forward
389
390 gTimeSpan diffTime = epochTime - lastEpochCompForOrbit;
391 diffSlots = (int)(diffTime.getDblSeconds()/DRAWORBIT_SLOT_SECNUMBER);
392
393 if(diffSlots > 0)
394 {
395 if( diffSlots > DRAWORBIT_SLOTS_NUMBER)
396 {
397 diffSlots = DRAWORBIT_SLOTS_NUMBER;
398 epochTm = epochTime - orbitSpan;
399 }
400 else
401 {
402 epochTm = lastEpochCompForOrbit + orbitSpan + computeInterval;
403 }
404
405 for( int i=0; i<diffSlots;i++)
406 { //remove points at beginning of list and add points at end.
407 orbitPoints.removeFirst();
408 pSatellite->setEpoch( epochTm);
409 azElVector = observer.calculateLook( *pSatellite, epochTm);
410 orbitPoints.append(azElVector);
411 epochTm += computeInterval;
412 }
413
414 lastEpochCompForOrbit = epochTime;
415 }
416 }
417 else if(epochTime < lastEpochCompForOrbit)
418 { // compute next orbit point when clock runs backward
419 gTimeSpan diffTime = lastEpochCompForOrbit - epochTime;
420 diffSlots = (int)(diffTime.getDblSeconds()/DRAWORBIT_SLOT_SECNUMBER);
421
422 if(diffSlots > 0)
423 {
424 if( diffSlots > DRAWORBIT_SLOTS_NUMBER)
425 {
426 diffSlots = DRAWORBIT_SLOTS_NUMBER;
427 epochTm = epochTime + orbitSpan;
428 }
429 else
430 {
431 epochTm = epochTime - orbitSpan - computeInterval;
432 }
433 for( int i=0; i<diffSlots;i++)
434 { //remove points at end of list and add points at beginning.
435 orbitPoints.removeLast();
436 pSatellite->setEpoch( epochTm);
437 azElVector = observer.calculateLook( *pSatellite, epochTm);
438 orbitPoints.push_front(azElVector);
439 epochTm -= computeInterval;
440
441 }
442 lastEpochCompForOrbit = epochTime;
443 }
272 }444 }
273}445}
274446
275447
=== modified file 'plugins/Satellites/src/Satellite.hpp'
--- plugins/Satellites/src/Satellite.hpp 2010-05-17 19:24:14 +0000
+++ plugins/Satellites/src/Satellite.hpp 2010-10-30 00:49:41 +0000
@@ -23,10 +23,23 @@
23#include <QVariant>23#include <QVariant>
24#include <QString>24#include <QString>
25#include <QStringList>25#include <QStringList>
26#include <QFont>
27#include <QList>
2628
27#include "StelObject.hpp"29#include "StelObject.hpp"
28#include "StelTextureTypes.hpp"30#include "StelTextureTypes.hpp"
29#include "sgp4sdp4/sgp4sdp4.h"31
32#include "StelPainter.hpp"
33#include "gsatellite/gSatTEME.hpp"
34#include "gsatellite/gObserver.hpp"
35#include "gsatellite/gTime.hpp"
36#include "gsatellite/gVector.hpp"
37
38
39#define DRAWORBIT_SLOTS_NUMBER 131
40#define DRAWORBIT_FADE_NUMBER 10
41#define DRAWORBIT_SLOT_SECNUMBER 10
42
3043
31class StelPainter;44class StelPainter;
32class StelLocation;45class StelLocation;
@@ -82,14 +95,26 @@
82 double getDoppler(double freq) const;95 double getDoppler(double freq) const;
83 static float showLabels;96 static float showLabels;
8497
98public:
99 void enableDrawOrbit(bool b);
100
101private:
102 //draw orbits methods
103 void computeOrbitPoints();
104 void drawOrbit(const StelCore* core, StelProjectorP& prj, StelPainter& painter);
105 //! returns 0 - 1.0 for the DRAWORBIT_FADE_NUMBER segments at
106 //! each end of an orbit, with 1 in the middle.
107 float calculateOrbitSegmentIntensity(int segNum);
108
85private:109private:
86 bool initialized;110 bool initialized;
87 bool visible;111 bool visible;
112 bool orbitVisible; //draw orbit enabled/disabled
113
88 QString designation; // The ID of the satllite114 QString designation; // The ID of the satllite
89 QString description; // longer description of spacecraft115 QString description; // longer description of spacecraft
90 Vec3d XYZ; // holds J2000 position116 Vec3d XYZ; // holds J2000 position
91 char elements[3][80]; // TLE elements as char* for passing to sgp lib117 char elements[3][80]; // TLE elements as char* for passing to sgp lib
92 tle_t tle, localtle;
93 double height, velocity, azimuth, elevation, range, rangeRate;118 double height, velocity, azimuth, elevation, range, rangeRate;
94 QList<commLink> comms;119 QList<commLink> comms;
95 Vec3f hintColor;120 Vec3f hintColor;
@@ -98,10 +123,25 @@
98 static StelTextureSP hintTexture;123 static StelTextureSP hintTexture;
99 static float hintBrightness;124 static float hintBrightness;
100 static float hintScale;125 static float hintScale;
101 geodetic_t obs_geodetic; // observer location
102126
103 void draw(const StelCore* core, StelPainter& painter, float maxMagHints);127 void draw(const StelCore* core, StelPainter& painter, float maxMagHints);
104 void setObserverLocation(StelLocation* loc=NULL);128 void setObserverLocation(StelLocation* loc=NULL);
129
130 //gsatellite objects
131 gSatTEME *pSatellite;
132 gObserver observer;
133 gTime epochTime;
134 gVector Position;
135 gVector Vel;
136 gVector LatLong;
137 gVector azElPos;
138
139 //Satellite Orbit Draw
140 QFont font;
141 Vec3f orbitColor;
142 gTime lastEpochCompForOrbit;
143 QList<gVector> orbitPoints; //orbit points represented by azElPos vectors
144
105};145};
106146
107#endif // _SATELLITE_HPP_ 147#endif // _SATELLITE_HPP_
108148
=== modified file 'plugins/Satellites/src/Satellites.hpp'
--- plugins/Satellites/src/Satellites.hpp 2010-04-18 17:48:49 +0000
+++ plugins/Satellites/src/Satellites.hpp 2010-10-30 00:49:41 +0000
@@ -42,7 +42,7 @@
42typedef QSharedPointer<Satellite> SatelliteP;42typedef QSharedPointer<Satellite> SatelliteP;
4343
44//! @class Satellites44//! @class Satellites
45//! Satellites in low Earth orbith require different orbital calculations from planets, the moon45//! Satellites in low Earth orbit require different orbital calculations from planets, the moon
46//! and so on. This plugin implements the SGP4/SDP4 algorithms in Stellarium, allowing accurate46//! and so on. This plugin implements the SGP4/SDP4 algorithms in Stellarium, allowing accurate
47//! prediction of the position of artificial satellites.47//! prediction of the position of artificial satellites.
48class Satellites : public StelObjectModule48class Satellites : public StelObjectModule
4949
=== added directory 'plugins/Satellites/src/gsatellite'
=== added file 'plugins/Satellites/src/gsatellite/gException.hpp'
--- plugins/Satellites/src/gsatellite/gException.hpp 1970-01-01 00:00:00 +0000
+++ plugins/Satellites/src/gsatellite/gException.hpp 2010-10-30 00:49:41 +0000
@@ -0,0 +1,44 @@
1/***************************************************************************
2 * Copyright (C) 2006 by j. l. Canales *
3 * jlcanales@users.sourceforge.net *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
20
21#ifndef _GEXCEPTION_HPP_
22#define _GEXCEPTION_HPP_ 1
23
24#include <stdexcept>
25
26//Exception Codes
27#define EXCP_UNKNOWN 1
28#define EXCP_INCORRECTPARAM 2
29#define EXCP_OPERATIONOVERFLOW 3
30#define EXCP_MEMORYALLOCATION 4
31#define EXCP_COMPUTEOVERFLOW 5
32
33typedef unsigned int GEXCEPTIONTYPE;
34
35// Exception messages for GMatrix
36
37#define OPERATOR_X_INCOMPATIBLE_ORDER "The matrix have incompatible order to calculate its verctorial product"
38#define OPERATOR_ADD_INCOMPATIBLE_ORDER "The matrix have incompatible order to calculate the addition"
39#define OPERATOR_ADDEQUAL_INCOMPATIBLE_ORDER "The matrix have incompatible order to calculate the addition"
40#define OPERATOR_DIFF_INCOMPATIBLE_ORDER "The matrix have incompatible order to calculate the substraction"
41#define OPERATOR_DIFFEQUAL_INCOMPATIBLE_ORDER "The matrix have incompatible order to calculate the substraction"
42#define DET_INCOMPATIBLE_ORDER "The matrix is not square, the determinant can't be calculate."
43
44#endif // _GEXCEPTION_HPP_
045
=== added file 'plugins/Satellites/src/gsatellite/gMatrix.cpp'
--- plugins/Satellites/src/gsatellite/gMatrix.cpp 1970-01-01 00:00:00 +0000
+++ plugins/Satellites/src/gsatellite/gMatrix.cpp 2010-10-30 00:49:41 +0000
@@ -0,0 +1,290 @@
1/***************************************************************************
2 * Name: GMatrix.cpp
3 *
4 * Date: 2009-12-31 16:34:55 +0100 (jue, 31 dic 2009)
5 * Revision: 17
6 * HeadURL: https://gsat.svn.sourceforge.net/svnroot/gsat/trunk/src/GMatrix.cpp
7 *
8 * Description: GMatrix Definition.
9 * GMatrix class define a bidimensional GDOUBLE elements matrix
10 * and the basic matrix operations.
11 *
12 ***************************************************************************/
13
14/***************************************************************************
15 * Copyright (C) 2004 by JL Canales *
16 * ph03696@homeserver *
17 * *
18 * This program is free software; you can redistribute it and/or modify *
19 * it under the terms of the GNU General Public License as published by *
20 * the Free Software Foundation; either version 2 of the License, or *
21 * (at your option) any later version. *
22 * *
23 * This program is distributed in the hope that it will be useful, *
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
26 * GNU General Public License for more details. *
27 * *
28 * You should have received a copy of the GNU General Public License *
29 * along with this program; if not, write to the *
30 * Free Software Foundation, Inc., *
31 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
32 ***************************************************************************/
33
34// CMatrix
35#include "gMatrix.hpp"
36#include "gException.hpp"
37
38#include <cassert>
39
40// Class gMatrix
41gMatrix::gMatrix() : gMatrixTempl<double>()
42{
43}
44
45gMatrix::gMatrix(unsigned int ai_uiRowNumber, unsigned int ai_uiColumNumber)
46 : gMatrixTempl<double>(ai_uiRowNumber, ai_uiColumNumber)
47{
48
49}
50
51
52bool gMatrix::operator!=(const gMatrix &right) const
53{
54 if((*this)==(right))
55 {
56 return false;
57 }
58 else
59 {
60 return true;
61 }
62}
63
64
65
66//## Other Operations (implementation)
67
68gMatrix gMatrix::operator *(const gMatrix &ai_RightMatrix)
69{
70
71 unsigned int iRow;
72 unsigned int iColumn;
73 unsigned int uiRightColumn = ai_RightMatrix.Columns();
74 unsigned int uiRightRow = ai_RightMatrix.Rows();
75
76 unsigned int Iterator;
77 double dAuxValue = 0;
78 gMatrix ReturnedMatrix(Rows(), uiRightColumn);
79
80
81 if(Columns() != uiRightRow)
82 {
83 throw std::out_of_range(OPERATOR_X_INCOMPATIBLE_ORDER);
84 }
85 else
86 {
87 for(iRow = 0; iRow < Rows(); iRow++)
88 for(iColumn = 0; iColumn < uiRightColumn; iColumn++)
89 {
90 // Product and addition of implied elements
91 for(Iterator = 0; Iterator < uiRightRow; Iterator++)
92 {
93 dAuxValue += (operator[](iRow)[ Iterator] *
94 ai_RightMatrix[ Iterator][ iColumn]);
95 }
96
97 ReturnedMatrix[ iRow][ iColumn] = dAuxValue;
98 dAuxValue = 0;
99 }
100 }
101
102 return ReturnedMatrix;
103}
104
105
106gVector gMatrix::operator *(const gVector &ai_RightVector)
107{
108
109 unsigned int iRow;
110 unsigned int iColumn;
111
112 double dAuxValue = 0;
113 gVector ReturnedVector(Rows());
114
115 assert(Columns() == ai_RightVector.size());
116
117
118 if(Columns() != ai_RightVector.size())
119 {
120 throw std::out_of_range(OPERATOR_X_INCOMPATIBLE_ORDER);
121 }
122 else
123 {
124 for(iRow = 0; iRow < Rows(); iRow++)
125 {
126 for(iColumn = 0; iColumn < Columns(); iColumn++)
127 {
128 // Product and addition of implied elements
129 dAuxValue += (operator[](iRow)[ iColumn] *
130 ai_RightVector[ iColumn]);
131 }
132
133 ReturnedVector[ iRow] = dAuxValue;
134 dAuxValue = 0;
135
136 }
137 }
138 return ReturnedVector;
139}
140
141
142gMatrix gMatrix::operator *(double ai_dRight)
143{
144 unsigned int iRow;
145 unsigned int iColumn;
146 gMatrix ReturnedMatrix(Rows(), Columns());
147
148 try
149 {
150 for(iRow = 0; iRow < Rows(); iRow++)
151 for(iColumn = 0; iColumn < Columns(); iColumn ++)
152 ReturnedMatrix[ iRow][ iColumn] = ((*this)[ iRow][ iColumn] * ai_dRight);
153 }
154 catch(...)
155 {
156 for(iRow = 0; iRow < Rows(); iRow++)
157 for(iColumn = 0; iColumn < Columns(); iColumn ++)
158 ReturnedMatrix[ iRow][ iColumn] = 0;
159
160 throw;
161 }
162
163 return ReturnedMatrix;
164}
165
166gMatrix gMatrix::operator+(gMatrix &ai_RightMatrix) const
167{
168
169 gMatrix ReturnedMatrix(Rows(), Columns());
170
171#ifdef ENABLE_DEBUG
172 assert(Rows()==ai_RightMatrix.Rows() && Columns()==ai_RightMatrix.Columns());
173#endif
174
175 if(Rows()!=ai_RightMatrix.Rows() || Columns()!=ai_RightMatrix.Columns())
176 {
177 throw std::out_of_range(OPERATOR_ADD_INCOMPATIBLE_ORDER);
178 }
179
180
181 for(unsigned int i = 0; i<Rows(); i++)
182 for(unsigned int j = 0; j<Columns(); j++)
183 ReturnedMatrix[ i][ j] = operator[](i)[ j] + ai_RightMatrix[ i][ j];
184
185
186 return ReturnedMatrix;
187
188}
189
190const gMatrix& gMatrix::operator+=(gMatrix &ai_RightMatrix)
191{
192
193#ifdef ENABLE_DEBUG
194 assert(Rows()==ai_RightMatrix.Rows() && Columns()==ai_RightMatrix.Columns());
195#endif
196
197 if(Rows()!=ai_RightMatrix.Rows() || Columns()!=ai_RightMatrix.Columns())
198 {
199 throw std::out_of_range(OPERATOR_ADDEQUAL_INCOMPATIBLE_ORDER);
200 }
201 for(unsigned int i = 0; i<Rows(); i++)
202 for(unsigned int j = 0; j<Columns(); j++)
203 operator[](i)[ j] = operator[](i)[ j] + ai_RightMatrix[ i][ j];
204
205
206 return *this;
207
208}
209
210gMatrix gMatrix::operator-(gMatrix &ai_RightMatrix) const
211{
212
213 gMatrix ReturnedMatrix(Rows(), Columns());
214
215#ifdef ENABLE_DEBUG
216 assert(Rows()==ai_RightMatrix.Rows() && Columns()==ai_RightMatrix.Columns());
217#endif
218
219 if(Rows()!=ai_RightMatrix.Rows() || Columns()!=ai_RightMatrix.Columns())
220 {
221 throw std::out_of_range(OPERATOR_DIFF_INCOMPATIBLE_ORDER);
222 }
223 for(unsigned int i = 0; i<Rows(); i++)
224 for(unsigned int j = 0; j<Columns(); j++)
225 ReturnedMatrix[ i][ j] = operator[](i)[ j] - ai_RightMatrix[ i][ j];
226
227
228 return ReturnedMatrix;
229
230}
231
232const gMatrix& gMatrix::operator-=(gMatrix &ai_RightMatrix)
233{
234
235#ifdef ENABLE_DEBUG
236 assert(Rows()==ai_RightMatrix.Rows() && Columns()==ai_RightMatrix.Columns());
237#endif
238
239 if(Rows()!=ai_RightMatrix.Rows() || Columns()!=ai_RightMatrix.Columns())
240 {
241 throw std::out_of_range(OPERATOR_DIFFEQUAL_INCOMPATIBLE_ORDER);
242 }
243 for(unsigned int i = 0; i<Rows(); i++)
244 for(unsigned int j = 0; j<Columns(); j++)
245 operator[](i)[ j] = operator[](i)[ j] - ai_RightMatrix[ i][ j];
246
247
248 return *this;
249
250}
251
252double gMatrix::det()
253{
254
255 gMatrix aux=*this;
256 double dDet;
257 int k,l,i,j;
258 int n = Rows();
259 int m = n-1;
260
261
262 try
263 {
264 if(Columns() != Rows())
265 {
266 throw std::invalid_argument(DET_INCOMPATIBLE_ORDER);
267 }
268
269 dDet=aux[0][0];
270 for(k=0; k<m; k++)
271 {
272 l=k+1;
273 for(i=l; i<n; i++)
274 {
275 for(j=l; j<n; j++)
276 {
277 aux[i][j] = (aux[k][k]*aux[i][j]-aux[k][j]*aux[i][k])/aux[k][k];
278 }
279 }
280 dDet=dDet*aux[k+1][k+1];
281 }
282
283 return dDet;
284 }
285 catch(...)
286 {
287 throw;
288 }
289}
290
0291
=== added file 'plugins/Satellites/src/gsatellite/gMatrix.hpp'
--- plugins/Satellites/src/gsatellite/gMatrix.hpp 1970-01-01 00:00:00 +0000
+++ plugins/Satellites/src/gsatellite/gMatrix.hpp 2010-10-30 00:49:41 +0000
@@ -0,0 +1,86 @@
1/***************************************************************************
2 * Name: gMatrix.h
3 *
4 * Date: 2007-03-29 17:01:15 +0200 (jue, 29 mar 2007)
5 * Revision: 16
6 * HeadURL: https://gsat.svn.sourceforge.net/svnroot/gsat/trunk/src/GMatrix.h
7 *
8 * Description: Fichero de descripci� de la clase GMatrix.
9 * Esta clase tiene como cometido la encapsulaci� de objetos
10 * tipo matriz bidimensional de elementos GDOUBLE junto con
11 * las operaciones de matrices realizables.
12 *
13 *
14 ***************************************************************************/
15
16/***************************************************************************
17 * Copyright (C) 2004 by JL Canales *
18 * ph03696@homeserver *
19 * *
20 * This program is free software; you can redistribute it and/or modify *
21 * it under the terms of the GNU General Public License as published by *
22 * the Free Software Foundation; either version 2 of the License, or *
23 * (at your option) any later version. *
24 * *
25 * This program is distributed in the hope that it will be useful, *
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
28 * GNU General Public License for more details. *
29 * *
30 * You should have received a copy of the GNU General Public License *
31 * along with this program; if not, write to the *
32 * Free Software Foundation, Inc., *
33 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
34 ***************************************************************************/
35
36#ifndef _GMATRIX_HPP_
37#define _GMATRIX_HPP_ 1
38
39// MatrixContainer
40#include "gMatrixTempl.hpp"
41#include "gVector.hpp"
42
43//! @class: gMatrix
44//! This class implement the needed code to make matrix calculations.
45//! The GMatrix class inherit from MatrixContainer class that is created
46//! from the vector STL class givingt all the STL vector funcionality.
47//! This class has not overlapped the = operator and the copy constructor
48//! because this methods are given by the vector STL class.
49class gMatrix : public gMatrixTempl<double>
50{
51public:
52 //## Constructors (generated)
53 gMatrix();
54
55 //## Constructors (specified)
56 //## Operation:gMatrix%950961952
57 // Constructor whit row and column dimensions.
58 gMatrix ( unsigned int ai_uiRowNumber, unsigned int ai_uiColumNumber);
59
60 //## Equality Operations (generated)
61 bool operator!=( const gMatrix &right) const;
62
63 //## Other Operations (specified)
64 //## Operation: operator*%949869240
65 // This operators make the vectorial product calculation
66 gMatrix operator* ( const gMatrix &ai_RightMatrix);
67
68 //## Operation: operator*%949869240
69 // This operators make the vectorial product calculation
70 gVector operator* ( const gVector &ai_RightVector);
71
72 //## Operation: operator*%949869241
73 // This operator make the scalar product calculation.
74 gMatrix operator* ( double ai_dRight);
75
76 gMatrix operator+ ( gMatrix &ai_RightMatrix) const;
77 const gMatrix& operator+=( gMatrix &ai_RightMatrix);
78
79 gMatrix operator- ( gMatrix &ai_RightMatrix) const;
80 const gMatrix& operator-=( gMatrix &ai_RightMatrix);
81
82 // Determinant
83 double det();
84};
85
86#endif //_GMATRIX_HPP_
087
=== added file 'plugins/Satellites/src/gsatellite/gMatrixTempl.hpp'
--- plugins/Satellites/src/gsatellite/gMatrixTempl.hpp 1970-01-01 00:00:00 +0000
+++ plugins/Satellites/src/gsatellite/gMatrixTempl.hpp 2010-10-30 00:49:41 +0000
@@ -0,0 +1,117 @@
1/***************************************************************************
2 * Name: gMatrixTempl.h
3 *
4 * Description: MatrixContainer is a template to build
5 * bidimensional objects arrays.
6 ***************************************************************************/
7
8/***************************************************************************
9 * Copyright (C) 2006 by j. l. Canales *
10 * jlcanales@users.sourceforge.net *
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 * This program is distributed in the hope that it will be useful, *
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
20 * GNU General Public License for more details. *
21 * *
22 * You should have received a copy of the GNU General Public License *
23 * along with this program; if not, write to the *
24 * Free Software Foundation, Inc., *
25 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
26 ***************************************************************************/
27
28#ifndef _GMATRIXTEMPL_HPP_
29#define _GMATRIXTEMPL_HPP_ 1
30
31#include "gVectorTempl.hpp" // checked vector
32#include <iostream> // for operator<<(), see below
33
34// matrix as vector of vectors
35template<class T>
36class gMatrixTempl : public br_stl::gVectorTempl<
37 br_stl::gVectorTempl<T> >
38{
39public:
40 typedef typename std::vector<T>::size_type size_type;
41
42 gMatrixTempl(size_type x = 0, size_type y = 0)
43 : br_stl::gVectorTempl< br_stl::gVectorTempl<T> >(x, br_stl::gVectorTempl<T>(y)), rows(x), columns(y)
44 {
45 }
46
47 gMatrixTempl(const gMatrixTempl<T> &right)
48 : br_stl::gVectorTempl< br_stl::gVectorTempl<T> >(right.rows, br_stl::gVectorTempl<T>(right.columns)), rows(right.rows), columns(right.columns)
49 {
50
51 for(size_type i = 0; i < rows; ++i)
52 for(size_type j = 0; j < columns ; ++j)
53 operator[](i)[j] = right[ i][ j];
54 }
55
56 size_type Rows() const
57 {
58 return rows;
59 }
60
61 size_type Columns() const
62 {
63 return columns;
64 }
65
66 void SetSize(size_type x, size_type y)
67 {
68
69 br_stl::gVectorTempl< br_stl::gVectorTempl<T> >::resize(x);
70 for(size_type index = 0; index < x; index++)
71 operator[](index).resize(y);
72
73 rows = x;
74 columns = y;
75 }
76
77
78 void init(const T& Value)
79 {
80 for(size_type i = 0; i < rows; ++i)
81 for(size_type j = 0; j < columns ; ++j)
82 operator[](i)[j] = Value; // that is, (*this)[i][j]
83 }
84
85 // create identity matrix
86 gMatrixTempl<T>& I()
87 {
88 for(size_type i = 0; i < rows; ++i)
89 for(size_type j = 0; j < columns ; ++j)
90 operator[](i)[j] = (i==j) ? T(1) : T(0);
91 return *this;
92 }
93
94protected:
95 size_type rows;
96 size_type columns;
97
98
99}; // class Matrix
100
101
102template<class T>
103inline std::ostream& operator<<(std::ostream& s, const gMatrixTempl<T>& m)
104{
105 typedef typename gMatrixTempl<T>::size_type size_type;
106
107 for(size_type i = 0; i < m.Rows(); ++i)
108 {
109 s << std::endl << i <<" : ";
110 for(size_type j = 0; j < m.Columns(); ++j)
111 s << m[i][j] <<" ";
112 }
113 s << std::endl;
114 return s;
115}
116
117#endif // _GMATRIXTEMPL_HPP_
0118
=== added file 'plugins/Satellites/src/gsatellite/gObserver.cpp'
--- plugins/Satellites/src/gsatellite/gObserver.cpp 1970-01-01 00:00:00 +0000
+++ plugins/Satellites/src/gsatellite/gObserver.cpp 2010-10-30 00:49:41 +0000
@@ -0,0 +1,88 @@
1/*
2 * gObserver.cpp
3 *
4 * Created on: 05/08/2010
5 * Author: cdeveloper
6 */
7
8#include "stdsat.h"
9#include "gVector.hpp"
10#include "gObserver.hpp"
11#include "gTime.hpp"
12#include "mathUtils.hpp"
13#include <math.h>
14
15//! Definition: This operation compute the observer ECI coordinates for the ai_epoch time
16void gObserver::getECIPosition(gTime ai_epoch, gVector& ao_position, gVector& ao_vel)
17{
18 ao_position.resize(3);
19 ao_vel.resize(3);
20 double radLatitude = m_latitude * KDEG2RAD;
21 double theta = ai_epoch.toThetaLMST(m_longitude * KDEG2RAD);
22 double r;
23 double c,sq;
24
25 /* Reference: The 1992 Astronomical Almanac, page K11. */
26 c = 1/sqrt(1 + __f*(__f - 2)*Sqr(sin(radLatitude)));
27 sq = Sqr(1 - __f)*c;
28
29 r = (KEARTHRADIUS*c + m_attitude)*cos(radLatitude);
30 ao_position[0] = r * cos(theta);/*kilometers*/
31 ao_position[1] = r * sin(theta);
32 ao_position[2] = (KEARTHRADIUS*sq + m_attitude)*sin(radLatitude);
33 ao_vel[0] = -KMFACTOR*ao_position[1];/*kilometers/second*/
34 ao_vel[1] = KMFACTOR*ao_position[0];
35 ao_vel[2] = 0;
36}
37
38gVector gObserver::calculateLook(gSatTEME ai_Sat, gTime ai_epoch)
39{
40
41 gVector returnVector(4);
42 gVector topoSatPos(3);
43 gVector observerECIPos;
44 gVector observerECIVel;
45
46
47 double radLatitude = m_latitude * KDEG2RAD;
48 double theta = ai_epoch.toThetaLMST(m_longitude * KDEG2RAD);
49
50 getECIPosition(ai_epoch, observerECIPos, observerECIVel);
51 ai_Sat.setEpoch(ai_epoch);
52
53 gVector satECIPos = ai_Sat.getPos();
54 gVector satECIVel = ai_Sat.getVel();
55 gVector slantRange = satECIPos - observerECIPos;
56 gVector rangeVel = satECIVel - observerECIVel;
57
58 //top_s
59 topoSatPos[0] = sin(radLatitude) * cos(theta)*slantRange[0]
60 + sin(radLatitude)* sin(theta)*slantRange[1]
61 - cos(radLatitude)* slantRange[2];
62 //top_e
63 topoSatPos[1] = (-1.0)* sin(theta)*slantRange[0]
64 + cos(theta)*slantRange[1];
65
66 //top_z
67 topoSatPos[2] = cos(radLatitude) * cos(theta)*slantRange[0]
68 + cos(radLatitude) * sin(theta)*slantRange[1]
69 + sin(radLatitude) *slantRange[2];
70
71 returnVector[ AZIMUTH] = atan((-1.0)*topoSatPos[1]/topoSatPos[0]);
72 if(topoSatPos[0] > 0)
73 returnVector[ AZIMUTH] += KPI;
74 if(returnVector[ AZIMUTH] < 0)
75 returnVector[ AZIMUTH] += K2PI;
76
77 returnVector[ RANGE] = slantRange.Magnitude();
78 returnVector[ ELEVATION] = asin(topoSatPos[2]/returnVector[ RANGE]);
79 returnVector[ RANGERATE] = slantRange.Dot(rangeVel)/returnVector[ RANGE];
80 return returnVector;
81
82
83 // Corrections for atmospheric refraction
84 // Reference: Astronomical Algorithms by Jean Meeus, pp. 101-104
85 // Correction is meaningless when apparent elevation is below horizon
86 // obs_set->y = obs_set->y + Radians((1.02/tan(Radians(Degrees(el)+
87 // 10.3/(Degrees(el)+5.11))))/60);
88}
089
=== added file 'plugins/Satellites/src/gsatellite/gObserver.hpp'
--- plugins/Satellites/src/gsatellite/gObserver.hpp 1970-01-01 00:00:00 +0000
+++ plugins/Satellites/src/gsatellite/gObserver.hpp 2010-10-30 00:49:41 +0000
@@ -0,0 +1,114 @@
1/***************************************************************************
2 * Name: gObserver.hpp
3 ***************************************************************************/
4
5/***************************************************************************
6 * Copyright (C) 2006 by J. L. Canales *
7 * jlcanales@users.sourceforge.net *
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 * This program is distributed in the hope that it will be useful, *
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
17 * GNU General Public License for more details. *
18 * *
19 * You should have received a copy of the GNU General Public License *
20 * along with this program; if not, write to the *
21 * Free Software Foundation, Inc., *
22 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
23 ***************************************************************************/
24#ifndef _GOBSERVER_HPP_
25#define _GOBSERVER_HPP_ 1
26
27// stdsat
28#include "stdsat.h"
29#include "gVector.hpp"
30#include "gTime.hpp"
31#include "gSatTEME.hpp"
32
33#define AZIMUTH 0
34#define ELEVATION 1
35#define RANGE 2
36#define RANGERATE 3
37
38//! @class gObserver
39//! This class implements the need functionality to change
40//! coordinates from Geographic Reference System to Observer Reference System
41class gObserver
42{
43public:
44 //## Constructors (generated)
45 //! @brief Default class gObserver constructor
46 //! @param[in] ai_latitude Observer Geographic latitude
47 //! @param[in] ai_longitude Observer Geographic longitude
48 //! @param[in] ai_attitude Observer Geographic attitude
49 gObserver(double ai_latitude=0, double ai_longitude=0 , double ai_attitude=0):
50 m_latitude(ai_latitude),m_longitude(ai_longitude), m_attitude(ai_attitude)
51 {
52 ;
53 }
54
55 //! Method used to get observer latitude.
56 //!
57 double getLatitude()
58 {
59 return m_latitude;
60 }
61
62 //! Method used to get observer object longitude.
63 //!
64 double getLongitude()
65 {
66 return m_longitude;
67 }
68
69 //! Method used to set Observer geographic position.
70 //!
71 void setPosition(double ai_latitude, double ai_longitude, double ai_attitude)
72 {
73 m_latitude = ai_latitude;
74 m_longitude = ai_longitude;
75 m_attitude = ai_attitude;
76 }
77
78
79
80 // Operation getECIPosition
81 //! @brief This operation compute the observer ECI coordinates for the
82 //! ai_epoch time
83 //! @details
84 //! References:
85 //! Orbital Coordinate Systems, Part II
86 //! Dr. T.S. Kelso
87 //! http://www.celestrak.com/columns/v02n02/
88 //! @param[in] ai_epoch Epoch for the ECI reference system calculation
89 //! @param[out] ao_position Observer position vector
90 //! @param[out] ao_vel Observer velocity vector
91 //! gVector Vector including X,Y,Z ECI Coordinates
92 void getECIPosition(gTime ai_epoch, gVector& ao_position, gVector& ao_vel);
93
94 // Operation calculateLook
95 //! @brief This operation compute the Azimuth, Elevation and Range of
96 //! a satellite from the observer site.
97 //! @param[in] ai_Sat Sat TEME object to be looked.
98 //! @param[in] ai_epoch Epoch for the ECI reference system calculation
99 //! @return gVector Vector including Az, El, Range coordinates
100 //! References:
101 //! Orbital Coordinate Systems, Part II
102 //! Dr. T.S. Kelso
103 //! http://www.celestrak.com/columns/v02n02/
104 gVector calculateLook(gSatTEME ai_Sat, gTime ai_epoch);
105
106private: //## implementation
107
108 double m_latitude; //meassured in degrees
109 double m_longitude; //meassured in degrees
110 double m_attitude;
111
112};
113
114#endif // _GOBSERVER_HPP_
0115
=== added file 'plugins/Satellites/src/gsatellite/gSatTEME.cpp'
--- plugins/Satellites/src/gsatellite/gSatTEME.cpp 1970-01-01 00:00:00 +0000
+++ plugins/Satellites/src/gsatellite/gSatTEME.cpp 2010-10-30 00:49:41 +0000
@@ -0,0 +1,156 @@
1/***************************************************************************
2 * Name: gSatTEME.cpp
3 *
4 * Description: gSatTEME class implementation.
5 * This class abstract all the SGP4 complexity. It uses the
6 * David. A. Vallado code for SGP4 Calculation.
7 *
8 * Reference:
9 * Revisiting Spacetrack Report #3 AIAA 2006-6753
10 * Vallado, David A., Paul Crawford, Richard Hujsak, and T.S.
11 * Kelso, "Revisiting Spacetrack Report #3,"
12 * presented at the AIAA/AAS Astrodynamics Specialist
13 * Conference, Keystone, CO, 2006 August 21–24.
14 * http://celestrak.com/publications/AIAA/2006-6753/
15 ***************************************************************************/
16
17/***************************************************************************
18 * Copyright (C) 2004 by J.L. Canales *
19 * ph03696@homeserver *
20 * *
21 * This program is free software; you can redistribute it and/or modify *
22 * it under the terms of the GNU General Public License as published by *
23 * the Free Software Foundation; either version 2 of the License, or *
24 * (at your option) any later version. *
25 * *
26 * This program is distributed in the hope that it will be useful, *
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
29 * GNU General Public License for more details. *
30 * *
31 * You should have received a copy of the GNU General Public License *
32 * along with this program; if not, write to the *
33 * Free Software Foundation, Inc., *
34 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
35 ***************************************************************************/
36
37// GKepFile
38#include "gSatTEME.hpp"
39#include <iostream>
40#include <iomanip>
41
42#include "stdsat.h"
43#include "mathUtils.hpp"
44
45#include "sgp4io.h"
46
47#define CONSTANTS_SET wgs72
48#define TYPERUN_SET 'c'
49#define OPSMODE_SET 'i'
50#define TYPEINPUT_SET 'm'
51
52#define LATITUDE 0
53#define LONGITUDE 1
54#define ALTITUDE 2
55
56// Constructors
57gSatTEME::gSatTEME(const char *pstrName, char *pstrTleLine1, char *pstrTleLine2)
58{
59
60 double startmfe, stopmfe, deltamin;
61 double ro[3];
62 double vo[3];
63
64 m_Position.resize(3);
65 m_Vel.resize(3);
66
67 m_SatName = pstrName;
68
69 //set gravitational constants
70 getgravconst(CONSTANTS_SET, tumin, mu, radiusearthkm, xke, j2, j3, j4, j3oj2);
71
72 //Parsing TLE_Files and sat variables setting
73 twoline2rv(pstrTleLine1, pstrTleLine2, TYPERUN_SET, TYPEINPUT_SET, OPSMODE_SET, CONSTANTS_SET,
74 startmfe, stopmfe, deltamin, satrec);
75
76 // call the propagator to get the initial state vector value
77 sgp4(CONSTANTS_SET, satrec, 0.0, ro, vo);
78
79 m_Position[ 0]= ro[ 0];
80 m_Position[ 1]= ro[ 1];
81 m_Position[ 2]= ro[ 2];
82 m_Vel[ 0] = vo[ 0];
83 m_Vel[ 1] = vo[ 1];
84 m_Vel[ 2] = vo[ 2];
85}
86
87void gSatTEME::setEpoch(gTime ai_time)
88{
89
90 gTime kepEpoch(satrec.jdsatepoch);
91 gTimeSpan tSince = ai_time - kepEpoch;
92
93 double ro[3];
94 double vo[3];
95 double dtsince = tSince.getDblSeconds()/KSEC_PER_MIN;
96 // call the propagator to get the initial state vector value
97 sgp4(CONSTANTS_SET, satrec, dtsince, ro, vo);
98
99 m_Position[ 0]= ro[ 0];
100 m_Position[ 1]= ro[ 1];
101 m_Position[ 2]= ro[ 2];
102 m_Vel[ 0] = vo[ 0];
103 m_Vel[ 1] = vo[ 1];
104 m_Vel[ 2] = vo[ 2];
105}
106
107void gSatTEME::setEpoch(double ai_minSinceKepEpoch)
108{
109
110 double ro[3];
111 double vo[3];
112 // call the propagator to get the initial state vector value
113 sgp4(CONSTANTS_SET, satrec, ai_minSinceKepEpoch, ro, vo);
114
115 m_Position[ 0]= ro[ 0];
116 m_Position[ 1]= ro[ 1];
117 m_Position[ 2]= ro[ 2];
118 m_Vel[ 0] = vo[ 0];
119 m_Vel[ 1] = vo[ 1];
120 m_Vel[ 2] = vo[ 2];
121}
122
123gVector gSatTEME::getSubPoint(gTime ai_Time)
124{
125
126 gVector resultVector(3); // (0) Latitude, (1) Longitude, (2) altitude
127 double theta, r, e2, phi, c;
128
129 theta = AcTan(m_Position[1], m_Position[0]); // radians
130 resultVector[ LONGITUDE] = fmod((theta - ai_Time.toThetaGMST()), K2PI); //radians
131
132
133 r = sqrt(Sqr(m_Position[0]) + Sqr(m_Position[1]));
134 e2 = __f*(2 - __f);
135 resultVector[ LATITUDE] = AcTan(m_Position[2],r); /*radians*/
136
137 do
138 {
139 phi = resultVector[ LATITUDE];
140 c = 1/sqrt(1 - e2*Sqr(sin(phi)));
141 resultVector[ LATITUDE] = AcTan(m_Position[2] + KEARTHRADIUS*c*e2*sin(phi),r);
142 }
143 while(fabs(resultVector[ LATITUDE] - phi) >= 1E-10);
144
145 resultVector[ ALTITUDE] = r/cos(resultVector[ LATITUDE]) - KEARTHRADIUS*c;/*kilometers*/
146
147 if(resultVector[ LATITUDE] > (KPI/2.0)) resultVector[ LATITUDE] -= K2PI;
148
149 resultVector[LATITUDE] = resultVector[LATITUDE]/KDEG2RAD;
150 resultVector[LONGITUDE] = resultVector[LONGITUDE]/KDEG2RAD;
151 if(resultVector[LONGITUDE] < -180.0) resultVector[LONGITUDE] +=360;
152 else if(resultVector[LONGITUDE] > 180.0) resultVector[LONGITUDE] -= 360;
153
154
155 return resultVector;
156}
0157
=== added file 'plugins/Satellites/src/gsatellite/gSatTEME.hpp'
--- plugins/Satellites/src/gsatellite/gSatTEME.hpp 1970-01-01 00:00:00 +0000
+++ plugins/Satellites/src/gsatellite/gSatTEME.hpp 2010-10-30 00:49:41 +0000
@@ -0,0 +1,128 @@
1/***************************************************************************
2 * Name: gSatTeme.hpp
3 *
4 * Description: gSatTEME classes declaration.
5 * This class abstract all the SGP4 complexity. It uses the
6 * revised David. A. Vallado code for SGP4 Calculation.
7 *
8 * Reference:
9 * Revisiting Spacetrack Report #3 AIAA 2006-6753
10 * Vallado, David A., Paul Crawford, Richard Hujsak, and T.S.
11 * Kelso, "Revisiting Spacetrack Report #3,"
12 * presented at the AIAA/AAS Astrodynamics Specialist
13 * Conference, Keystone, CO, 2006 August 21–24.
14 * http://celestrak.com/publications/AIAA/2006-6753/
15 ***************************************************************************/
16
17/***************************************************************************
18 * Copyright (C) 2006 by J.L. Canales *
19 * jlcanales@users.sourceforge.net *
20 * *
21 * This program is free software; you can redistribute it and/or modify *
22 * it under the terms of the GNU General Public License as published by *
23 * the Free Software Foundation; either version 2 of the License, or *
24 * (at your option) any later version. *
25 * *
26 * This program is distributed in the hope that it will be useful, *
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
29 * GNU General Public License for more details. *
30 * *
31 * You should have received a copy of the GNU General Public License *
32 * along with this program; if not, write to the *
33 * Free Software Foundation, Inc., *
34 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
35 ***************************************************************************/
36
37#ifndef _GSATTEME_HPP_
38#define _GSATTEME_HPP_ 1
39
40#include "gTime.hpp"
41#include "gVector.hpp"
42
43#include "sgp4unit.h"
44#include "sgp4ext.h"
45
46
47//! @class gSatTEME
48//! @brief Sat position and velocity predictions over TEME reference system.
49//! @details
50//! Class to abstract all the SGP4 complexity.
51//! It implementation wrap whit an object oriented class the revised David. A. Vallado
52//! code for SGP4 Calculation. (Spacetrack report #6 revised AIAA-2006-6753-rev1)
53class gSatTEME
54{
55public:
56
57 // Operation: gSatTEME(const char *pstrName, char *pstrTleLine1, char *pstrTleLine2)
58 //! @brief Default class gSatTEME constructor
59 //! @param[in] pstrName Pointer to a null end string with the Sat. Name
60 //! @param[in] pstrTleLine1 Pointer to a null end string with the
61 //! first TLE Kep. data line
62 //! @param[in] pstrTleLine2 Pointer to a null end string with the
63 //! second TLE Kep. data line
64 gSatTEME(const char *pstrName, char *pstrTleLine1, char *pstrTleLine2);
65
66 // Operation: setEpoch( gTime ai_time)
67 //! @brief Set compute epoch for prediction
68 //! @param[in] ai_time gTime object storing the compute epoch time.
69 void setEpoch(gTime ai_time);
70
71 // Operation: setEpoch( double ai_minSinceKepEpoch)
72 //! @brief Set compute epoch for prediction in minutes since Keplerian data Epoch
73 //! @param[in] ai_minSinceKepEpoch Time since Keplerian Epoch measured in minutes
74 //! and fraction of minutes.
75 void setEpoch(double ai_minSinceKepEpoch);
76
77 // Operation: getPos()
78 //! @brief Get the TEME satellite position Vector
79 //! @return gVector
80 //! Satellite position vector.
81 //! x: position[0]
82 //! y: position[1]
83 //! z: position[2]
84 gVector getPos()
85 {
86 return m_Position;
87 }
88
89 // Operation: getVel()
90 //! @brief Get the TEME satellite Velocity Vector
91 //! @return gVector Satellite Velocity Vector\n
92 //! x: Vel[0]\n
93 //! y: Vel[1]\n
94 //! z: Vel[2]\n
95 gVector getVel()
96 {
97 return m_Vel;
98 }
99
100 // Operation: getSubPoint
101 //! @brief Get the Geographic satellite subpoint Vector
102 //! @details To implement this operation, next references has been used:
103 //! Orbital Coordinate Systems, Part III By Dr. T.S. Kelso
104 //! http://www.celestrak.com/columns/v02n03/
105 //! @param[in] ai_Time Epoch time for subpoint calculation. (of course, this must be
106 //! refactorized to be computed in the setEpoch function)
107 //! @return gVector Geographical coordinates\n
108 //! Latitude: Coord[0] measured in degrees\n
109 //! Longitude: Coord[1] measured in degrees\n
110 //! Altitude: Coord[2] measured in Km.\n
111 gVector getSubPoint(gTime ai_Time);
112
113 int getErrorCode()
114 {
115 return satrec.error;
116 }
117
118private:
119 // sgp4 proceses variables
120 double tumin, mu, radiusearthkm, xke, j2, j3, j4, j3oj2;
121 elsetrec satrec;
122
123 std::string m_SatName;
124 gVector m_Position;
125 gVector m_Vel;
126};
127
128#endif // _GSATTEME_HPP_
0129
=== added file 'plugins/Satellites/src/gsatellite/gTime.cpp'
--- plugins/Satellites/src/gsatellite/gTime.cpp 1970-01-01 00:00:00 +0000
+++ plugins/Satellites/src/gsatellite/gTime.cpp 2010-10-30 00:49:41 +0000
@@ -0,0 +1,347 @@
1/***************************************************************************
2 * Name: gTime.cpp
3 *
4 * Description:
5 ***************************************************************************/
6
7/***************************************************************************
8 * Copyright (C) 2004 by JL Trabajo *
9 * ph03696@homeserver *
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * GNU General Public License for more details. *
20 * *
21 * You should have received a copy of the GNU General Public License *
22 * along with this program; if not, write to the *
23 * Free Software Foundation, Inc., *
24 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 ***************************************************************************/
26
27
28#include <cassert>
29// gtime
30#include "gTime.hpp"
31// GExcpt
32#include "gException.hpp"
33#include "stdsat.h"
34#include <math.h>
35
36#include <stdio.h>
37#include <stdlib.h>
38
39// Class GTimeSpan
40
41//////////////////////////////////////////////////////////////////////////////
42// Referencies:
43// Astronomical Formulae for Calculators.
44// Jean Meeus
45// Chapter 3: Julian Day and Calendar Date. PG's 23, 24, 25
46//
47void gTime::setTime(int year, double day)
48{
49 assert((day >= 0.0) && (day < 367.0));
50
51 // Now calculate Julian date
52
53 year--;
54
55 int A = (year / 100);
56 int B = 2 - A + (A / 4);
57
58 double JDforYear = (int)(365.25 * year) +
59 (int)(30.6001 * 14) + //MM = 1 then MM=12 + 1 for the expresion (30.6001 * (mm +1))
60 1720994.5 + B;
61
62 m_time = JDforYear + day;
63}
64
65
66// Constructors
67
68gTime gTime::getCurrentTime()
69{
70
71 time_t rawtime;
72 struct tm * timeinfo;
73
74 time(&rawtime);
75 timeinfo = gmtime(&rawtime);
76
77 return gTime(*timeinfo);
78}
79
80
81
82gTime::gTime(int year, double day)
83{
84 setTime(year, day);
85}
86
87gTime::gTime(double ai_jDays)
88{
89 m_time= ai_jDays;
90}
91
92gTime::gTime(int nYear, int nMonth, int nDay, int nHour, int nMin, double nSec)
93{
94 // Calculate N, the day of the year (1..366)
95 int N;
96 int F1 = (int)((275.0 * nMonth) / 9.0);
97 int F2 = (int)((nMonth + 9.0) / 12.0);
98
99 if(isLeapYear(nYear))
100 {
101 // Leap year
102 N = F1 - F2 + nDay - 30;
103 }
104 else
105 {
106 // Common year
107 N = F1 - (2 * F2) + nDay - 30;
108 }
109
110 double dDay = N + (nHour + (nMin + (nSec / 60.0)) / 60.0) / 24.0;
111
112
113 setTime(nYear, dDay);
114
115}
116
117
118gTime::gTime(const gTime& timeSrc):m_time(timeSrc.m_time)
119{
120
121}
122
123gTime::gTime(struct tm ai_timestruct)
124{
125
126 int year = ai_timestruct.tm_year + 1900;
127
128 double day = ai_timestruct.tm_yday + 1;
129 day += (ai_timestruct.tm_hour + (ai_timestruct.tm_min + (ai_timestruct.tm_sec / 60.0)) / 60.0) / 24.0;
130
131 setTime(year, day);
132}
133
134gTimeSpan gTime::getTimeToUTC()
135{
136
137 //Time to utc calculation.
138 time_t when = time(NULL);
139 struct tm utc = *gmtime(&when);
140 struct tm lcl = *localtime(&when);
141 gTimeSpan tUTCDiff;
142
143
144 int delta_h = lcl.tm_hour - utc.tm_hour;
145 tUTCDiff = (time_t) delta_h*3600;
146
147 return(tUTCDiff);
148}
149
150
151const gTime& gTime::operator=(const gTime& timeSrc)
152{
153 m_time = timeSrc.m_time;
154 return (*this);
155}
156
157const gTime& gTime::operator=(time_t t)
158{
159 struct tm *ptm = gmtime(&t);
160 assert(ptm);
161
162 int year = ptm->tm_year + 1900;
163
164 double day = ptm->tm_yday + 1;
165 day += (ptm->tm_hour + (ptm->tm_min + (ptm->tm_sec / 60.0)) / 60.0) / 24.0;
166
167 setTime(year, day);
168
169 return (*this);
170
171}
172
173
174// Attributes
175double gTime::getGmtTm() const
176{
177 return m_time;
178}
179
180double gTime::getLocalTm() const
181{
182 return (m_time + getTimeToUTC().getDblSeconds());
183}
184
185
186time_t gTime::toTime() const
187{
188 return ((m_time - JDAY_JAN1_00H_1970)*KSEC_PER_DAY);
189
190
191}
192
193void gTime::toCalendarDate(int *pYear, int *pMonth , double *pDom) const
194{
195
196 assert(pYear != NULL);
197 assert(pMonth != NULL);
198 assert(pDom != NULL);
199
200 double jdAdj, F, alpha, A, B, DOM;
201 int Z, C, D, E, month, year;
202
203 jdAdj = m_time + 0.5;
204 Z = (int)jdAdj; // integer part
205 F = jdAdj - Z; // fractional part
206
207 if(Z < 2299161)
208 {
209 A = Z;
210 }
211 else
212 {
213 alpha = (int)((Z - 1867216.25) / 36524.25);
214 A = Z + 1 + alpha - (int)(alpha / 4.0);
215 }
216
217 B = A + 1524.0;
218 C = (int)((B - 122.1) / 365.25);
219 D = (int)(C * 365.25);
220 E = (int)((B - D) / 30.6001);
221
222 DOM = B - D - (int)(E * 30.6001) + F;
223 month = (E < 13.5) ? (E - 1) : (E - 13);
224 year = (month > 2.5) ? (C - 4716) : (C - 4715);
225
226 *pYear = year;
227 *pMonth = month;
228 *pDom = DOM;
229}
230
231
232// @method toThetaGMST();
233// Definition: Calculate Theta Angle at Greenwich Mean Time for the Julian date. The return value
234// is the angle, in radians, measuring eastward from the Vernal Equinox to the
235// prime meridian.
236double gTime::toThetaGMST() const
237{
238
239 double jd, Theta_JD;
240 double UT = fmod((m_time + 0.5), 1.0);
241 jd = m_time - UT;
242 double TU = (jd- JDAY_JAN1_12H_2000) / 36525.0;
243
244 double GMST = 24110.54841 + TU *
245 (8640184.812866 + TU * (0.093104 - TU * 6.2e-06));
246
247 GMST = fmod((GMST + KSEC_PER_DAY * OMEGA_E * UT),KSEC_PER_DAY);
248 Theta_JD=(K2PI * (GMST / KSEC_PER_DAY));
249
250 if(Theta_JD <0.0)
251 Theta_JD+=K2PI;
252
253 return Theta_JD;
254}
255
256// @method toThetaLMST();
257// Definition: Calculate Theta Angle at Local Mean Time for the Julian date.
258double gTime::toThetaLMST(double longitude) const
259{
260 return fmod(toThetaGMST() + longitude, K2PI);
261}
262
263
264
265// Operations
266// time math
267gTimeSpan gTime::operator-(gTime ai_time) const
268{
269 return (gTimeSpan((m_time - ai_time.m_time)));
270}
271
272gTime gTime::operator-(gTimeSpan ai_timeSpan) const
273{
274 return (gTime((m_time - ai_timeSpan.getDblDays())));
275}
276
277gTime gTime::operator+(gTimeSpan ai_timeSpan) const
278{
279 return (gTime((m_time + ai_timeSpan.getDblDays())));
280}
281
282const gTime& gTime::operator+=(gTimeSpan ai_timeSpan)
283{
284 m_time += ai_timeSpan.getDblDays();
285 return (*this);
286
287}
288
289const gTime& gTime::operator-=(gTimeSpan ai_timeSpan)
290{
291 m_time -= ai_timeSpan.getDblDays();
292 return (*this);
293}
294
295bool gTime::operator==(gTime ai_time) const
296{
297
298 if(m_time == ai_time.m_time)
299 return true;
300 else
301 return false;
302}
303
304bool gTime::operator!=(gTime ai_time) const
305{
306
307 if(m_time != ai_time.m_time)
308 return true;
309 else
310 return false;
311}
312
313bool gTime::operator<(gTime ai_time) const
314{
315
316 if(m_time < ai_time.m_time)
317 return true;
318 else
319 return false;
320}
321
322bool gTime::operator>(gTime ai_time) const
323{
324
325 if(m_time > ai_time.m_time)
326 return true;
327 else
328 return false;
329}
330
331bool gTime::operator<=(gTime ai_time) const
332{
333
334 if(m_time <= ai_time.m_time)
335 return true;
336 else
337 return false;
338}
339
340bool gTime::operator>=(gTime ai_time) const
341{
342
343 if(m_time >= ai_time.m_time)
344 return true;
345 else
346 return false;
347}
0348
=== added file 'plugins/Satellites/src/gsatellite/gTime.hpp'
--- plugins/Satellites/src/gsatellite/gTime.hpp 1970-01-01 00:00:00 +0000
+++ plugins/Satellites/src/gsatellite/gTime.hpp 2010-10-30 00:49:41 +0000
@@ -0,0 +1,329 @@
1/****************************************************************************
2 * Name: gTime.hpp
3 *
4 * Description: gTime y gTimeSpan classes declaration.
5 * This classes implement the method and operators to manage
6 * calculation over dates and timestamps.
7 *
8 *
9 ***************************************************************************/
10
11/***************************************************************************
12 * Copyright (C) 2006 by J. L. Canales *
13 * jlcanales@users.sourceforge.net *
14 * *
15 * This program is free software; you can redistribute it and/or modify *
16 * it under the terms of the GNU General Public License as published by *
17 * the Free Software Foundation; either version 2 of the License, or *
18 * (at your option) any later version. *
19 * *
20 * This program is distributed in the hope that it will be useful, *
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
23 * GNU General Public License for more details. *
24 * *
25 * You should have received a copy of the GNU General Public License *
26 * along with this program; if not, write to the *
27 * Free Software Foundation, Inc., *
28 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
29 ***************************************************************************/
30
31/////////////////////////////////////////////////////////////////////////////
32// gTimeSpan and gTime
33#ifndef _GTIME_HPP_
34#define _GTIME_HPP_ 1
35
36#include <time.h>
37#include <iostream> // for operator<<(), see below
38
39static const double JDAY_JAN1_00H_1900 = 2415019.5; // Jan 1.0 1900 = Jan 1 1900 00h UTC
40static const double JDAY_JAN1_12H_1900 = 2415020.0; // Jan 1.5 1900 = Jan 1 1900 12h UTC
41static const double JDAY_JAN1_12H_2000 = 2451545.0; // Jan 1.5 2000 = Jan 1 2000 12h UTC
42static const double JDAY_JAN1_00H_1970 = 2440587.5;
43
44static const double OMEGA_E = 1.002737909350795; // earth rotation per sideral day
45
46static const int KSEC_PER_MIN = 60;
47static const int KSEC_PER_HR = 3600;
48static const int KSEC_PER_DAY = 86400;
49static const int KMIN_PER_HR = 60;
50static const int KMIN_PER_DAY = 1440;
51static const int KHR_PER_DAY = 60;
52
53class gTimeSpan
54{
55public:
56 // Constructors
57 gTimeSpan(double timeSpanSrc = 0); // timeSpanSrc is mesured in days and fraction of day
58 gTimeSpan(long lDays, int nHours, int nMins, double nSecs);
59
60 gTimeSpan(const gTimeSpan& timeSpanSrc);
61 const gTimeSpan& operator=(const gTimeSpan& timeSpanSrc);
62
63 // Equal to time in Julian Days
64 const gTimeSpan& operator=(const double& timeSpanSrc)
65 {
66 m_timeSpan=timeSpanSrc*KSEC_PER_DAY;
67 return *this;
68 }
69
70 // Attributes
71 // extract parts
72
73 //! Operation: getDays()
74 //! This method returns the integer days number stored in the gTimeSpan object.
75 //! @return
76 //! long Total number of days
77 long getDays() const;
78
79 //! Operation: getHours()
80 //! This method returns the integer hours number stored in the gTimeSpan object.
81 //! @return
82 //! int This is a value between 0 and 23 hours
83 int getHours() const;
84
85 //! Operation: getMinutes()
86 //! This method returns the integer Minutes number stored in the gTimeSpan object.
87 //! @return
88 //! int This is a value between 0 and 59 minutes.
89 int getMinutes() const;
90
91 //! Operation: getSeconds()
92 //! This method returns the integer seconds number stored in the gTimeSpan object.
93 //! @return
94 //! int This is a value between 0 and 59 seconds
95 int getSeconds() const;
96
97 //! Operation: getDblSeconds()
98 //! This method returns the total seconds number stored in the gTimeSpan
99 //! object.
100 //! @return
101 //! double Total number of seconds in seconds and fraction of second.
102 double getDblSeconds() const;
103
104
105 //! Operation: getDblDays()
106 //! This method returns the total days number stored in the gTimeSpan
107 //! object.
108 //! @return
109 //! double Total number of days in days and fraction of day.
110 double getDblDays() const;
111 // Operations
112
113 //////////////////////////////////////
114 // TimeSpan Object Math operations
115 //////////////////////////////////////
116 gTimeSpan operator-(gTimeSpan timeSpan) const;
117 gTimeSpan operator+(gTimeSpan timeSpan) const;
118 const gTimeSpan& operator+=(gTimeSpan timeSpan);
119 const gTimeSpan& operator-=(gTimeSpan timeSpan);
120 bool operator==(gTimeSpan timeSpan) const;
121 bool operator!=(gTimeSpan timeSpan) const;
122 bool operator<(gTimeSpan timeSpan) const;
123 bool operator>(gTimeSpan timeSpan) const;
124 bool operator<=(gTimeSpan timeSpan) const;
125 bool operator>=(gTimeSpan timeSpan) const;
126
127private:
128 double m_timeSpan; //time span in julian days
129
130};
131
132
133
134
135
136//! @class gTime
137//! This class implements time calculations.
138//! Time is stored in julian days
139//! - Time getting in GMT, Local and Sidereal (earth rotational angle)
140//! - Time Math operations.
141
142class gTime
143{
144public:
145
146 // Constructors
147 gTime(double ai_jDays = 0);
148 gTime(int year, double day);
149 gTime(int nYear, int nMonth, int nDay, int nHour, int nMin, double nSec);
150 gTime(struct tm ai_timestruct);
151
152 // copy constructor
153 gTime(const gTime& timeSrc);
154
155 //////////////////////////////////////
156 // Time Object setting operations
157 //////////////////////////////////////
158
159 // Operation setTime
160 //! @brief Set the time value of the time object to the julian day of
161 //! year, day.
162 //! @details
163 //! References:\n
164 //! Astronomical Formulae for Calculators.\n
165 //! Jean Meeus\n
166 //! Chapter 3: Julian Day and Calendar Date. PG's 23, 24, 25\n
167 //! @param[in] year date year
168 //! @param[in] day date day and day fraction. Notice: 1 Jan is day=0 (not 1)
169 void setTime(int year, double day);
170
171 // Operation operator=
172 //! @brief overload de = operator to assign time values to he object.
173 //! @param timeSrc Time to be assigned
174 //! @return const gTime& Reference to *this object modified after operation
175 const gTime& operator=(const gTime& timeSrc);
176
177 // Operation operator=
178 //! @brief overload de = operator to assign time values to he object in
179 //! time_t (operating system) format.
180 //! @param[in] t Time to be assigned
181 //! @return
182 //! const gTime& Reference to *this object modified after operation
183 const gTime& operator=(time_t t);
184
185
186 // Operation operator=
The diff has been truncated for viewing.