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: 12641 lines (+7295/-4004)
49 files modified
data/gui/nightStyle.css (+32/-61)
data/gui/normalStyle.css (+28/-54)
doc/builtinScriptFunctions.doxygen (+37/-0)
doc/scripting.doxygen (+8/-1)
plugins/Satellites/nightStyle.css (+0/-75)
plugins/Satellites/normalStyle.css (+0/-75)
plugins/Satellites/satellites.json (+1117/-910)
plugins/Satellites/src/CMakeLists.txt (+26/-8)
plugins/Satellites/src/Satellite.cpp (+224/-37)
plugins/Satellites/src/Satellite.hpp (+43/-3)
plugins/Satellites/src/Satellites.cpp (+1/-1)
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 (+13/-0)
plugins/Satellites/src/gui/SatellitesDialog.hpp (+1/-0)
plugins/Satellites/src/gui/satellitesDialog.ui (+14/-3)
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
Matthew Gates Pending
J.L. Canales Pending
Bogdan Marinov Pending
Review via email: mp+39671@code.launchpad.net

This proposal supersedes a proposal from 2010-10-09.

This proposal has been superseded by a proposal from 2010-11-04.

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 : Posted in a previous version of this proposal

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
Revision history for this message
J.L. Canales (jlcanales-gasco) wrote : Posted in a previous version of this proposal

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 : Posted in a previous version of this proposal

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 : Posted in a previous version of this proposal

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 : Posted in a previous version of this proposal

I look forward to seeing your changes.

Revision history for this message
Matthew Gates (matthew-porpoisehead) wrote : Posted in a previous version of this proposal

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 : Posted in a previous version of this proposal

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

Revision history for this message
J.L. Canales (jlcanales-gasco) wrote : Posted in a previous version of this proposal

> 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.

Revision history for this message
J.L. Canales (jlcanales-gasco) wrote : Posted in a previous version of this proposal

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 : Posted in a previous version of this proposal

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 : Posted in a previous version of this proposal

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 :-)

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
1=== modified file 'data/gui/nightStyle.css'
2--- data/gui/nightStyle.css 2010-11-02 20:01:10 +0000
3+++ data/gui/nightStyle.css 2010-11-04 00:01:48 +0000
4@@ -382,74 +382,45 @@
5
6 /********************************************TabWidget*****************************************************/
7
8-QTabWidget {
9- background: rgba(0, 0, 0, 0%);
10-}
11-
12-QTabWidget::pane {
13- margin-top: 12px;
14- border-top: 1px solid rgb(0, 0, 0);
15- background: rgba(0, 0, 0, 0%);
16-}
17-
18 QTabWidget::tab-bar {
19- background: rgba(0, 0, 0, 0%);
20- width: 1000px;
21+ /*width: 1000px;*/
22+ /* Used as a workaround to set the background of
23+ the space between the last tab (normally the rightmost one
24+ and the end of the window. Not necessary if
25+ QTabWidget::documentMode is set to 'true'.*/
26 }
27
28 QTabBar {
29- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(23, 0, 0), stop: 1 rgb(0, 0, 0));
30+ margin: 0px;
31+ padding: 0px;
32+ font-weight: bold;
33+ color: rgb(120, 0, 0);
34+ background-color: rgb(22, 0, 0);
35+ font-size: 14px;
36+ /* Don't put font-size in QTabBar::tab, as it causes the tab
37+ labels to be cut by the frame. */
38 }
39
40 QTabBar::tab {
41- font: bold;
42- background: rgba(0, 0, 0, 0%);
43- border: 1px solid rgba(0, 0, 0, 0%);
44- border-top: none;
45- border-bottom: none;
46- min-width: 10ex;
47- min-height: 56px;
48- padding: 6px 0px 0px 0px;
49- color: rgb(122, 0, 0);
50- font-size: 12px;
51- margin-left: 5px;
52- margin-right: 5px;
53-}
54-
55-/*QTabWidget::left-corner {
56-
57-}*/
58-
59-QTabBar::tab:hover {
60-
61-}
62-
63-QTabBar::tab:selected {
64- background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(70, 0, 0, 0%), stop: 1 rgba(88, 0, 0, 0%));
65- border: 1px solid qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(0, 0, 0, 0%), stop: 0.5 rgb(136, 0, 0), stop: 1 rgba(0, 0, 0, 0%));
66- border-top: none;
67- border-bottom: none;
68-}
69-
70-/*QTabBar::tab:!selected {
71-
72-}
73-
74-QTabBar::tab:selected {
75-
76-}*/
77-
78-QTabBar::tab:first {
79- margin-left: 11;
80-}
81-
82-QTabBar::tab:last {
83- margin-right: 0;
84-}
85-
86-/*QTabBar::tab:only-one {
87-
88-}*/
89+ border: none;
90+ margin: 0px;
91+ padding: 1ex 2ex;
92+ min-height: 28px;
93+}
94+
95+QTabBar::tab:selected {
96+ border: none;
97+ margin: 0px;
98+ border-top-left-radius: 10px;
99+ border-top-right-radius: 10px;
100+ color: rgb(220, 0, 0);
101+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(86, 0, 0), stop: 1 rgb(61, 0, 0));
102+}
103+
104+QTabBar QToolButton {
105+ border: none;
106+ background-color: rgb(22, 0, 0);
107+}
108
109 QListView {
110 font-size: 14px;
111
112=== modified file 'data/gui/normalStyle.css'
113--- data/gui/normalStyle.css 2010-11-02 20:01:10 +0000
114+++ data/gui/normalStyle.css 2010-11-04 00:01:48 +0000
115@@ -382,70 +382,44 @@
116
117 /********************************************TabWidget*****************************************************/
118
119-QTabWidget {
120- background: rgba(0, 0, 0, 0%);
121-}
122-
123-QTabWidget::pane {
124- margin-top: 12px;
125- border-top: 1px solid rgb(0, 0, 0);
126- background: rgba(0, 0, 0, 0%);
127-}
128-
129 QTabWidget::tab-bar {
130- background: rgba(0, 0, 0, 0%);
131- width: 1000px;
132+ /*width: 1000px;*/
133+ /* Used as a workaround to set the background of
134+ the space between the last tab (normally the rightmost one
135+ and the end of the window. Not necessary if
136+ QTabWidget::documentMode is set to 'true'.*/
137 }
138
139 QTabBar {
140- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(31, 33, 36), stop: 1 rgb(0, 0, 0));
141+ margin: 0px;
142+ padding: 0px;
143+ font-weight: bold;
144+ color: rgb(170, 173, 164);
145+ background-color: rgb(31, 31, 31);
146+ font-size: 14px;
147+ /* Don't put font-size in QTabBar::tab, as it causes the tab
148+ labels to be cut by the frame. */
149 }
150
151 QTabBar::tab {
152- font: bold;
153- background: rgba(0, 0, 0, 0%);
154- border: 1px solid rgba(0, 0, 0, 0%);
155- border-top: none;
156- border-bottom: none;
157- min-width: 10ex;
158- min-height: 56px;
159- padding: 1px 5px 1px -3px;
160- color: rgb(174, 174, 175);
161- font-size: 12px;
162- margin-left: 5px;
163- margin-right: 5px;
164-}
165-
166-/*QTabWidget::left-corner {
167-
168-}*/
169-
170-QTabBar::tab:hover {
171-
172+ border: none;
173+ margin: 0px;
174+ padding: 1ex 2ex;
175+ min-height: 28px;
176 }
177
178 QTabBar::tab:selected {
179- background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(100, 101, 102, 0%), stop: 1 rgba(124, 126, 127, 0%));
180- border: 1px solid qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(0, 0, 0, 0%), stop: 0.5 rgb(188, 196, 201), stop: 1 rgba(0, 0, 0, 0%));
181- border-top: none;
182- border-bottom: none;
183-}
184-
185-/*QTabBar::tab:!selected {
186-
187-}*/
188-
189-QTabBar::tab:first {
190- margin-left: 11;
191-}
192-
193-QTabBar::tab:last {
194- margin-right: 0;
195-}
196-
197-/*QTabBar::tab:only-one {
198-
199-}*/
200+ border: none;
201+ margin: 0px;
202+ border-top-left-radius: 10px;
203+ border-top-right-radius: 10px;
204+ color: rgb(220, 223, 214);
205+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(68, 69, 72), stop: 1 rgb(86, 87, 90));
206+}
207+
208+QTabBar QToolButton {
209+ background-color: rgb(31, 31, 31);
210+}
211
212 QListView {
213 font-size: 14px;
214
215=== added file 'doc/builtinScriptFunctions.doxygen'
216--- doc/builtinScriptFunctions.doxygen 1970-01-01 00:00:00 +0000
217+++ doc/builtinScriptFunctions.doxygen 2010-11-04 00:01:48 +0000
218@@ -0,0 +1,37 @@
219+/*
220+ * Stellarium
221+ * Copyright (C) 2010 Matthew Gates
222+ *
223+ * This program is free software; you can redistribute it and/or
224+ * modify it under the terms of the GNU General Public License
225+ * as published by the Free Software Foundation; either version 2
226+ * of the License, or (at your option) any later version.
227+ *
228+ * This program is distributed in the hope that it will be useful,
229+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
230+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
231+ * GNU General Public License for more details.
232+ *
233+ * You should have received a copy of the GNU General Public License
234+ * along with this program; if not, write to the Free Software
235+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
236+ */
237+
238+/*!
239+
240+@page builtinScriptFunctions Built in Script Functions
241+
242+<B>waitFor(dt, spec="utc")</B>
243+
244+Waits until a specified simulation date/time.
245+
246+This function will take into account the rate (and direction) in which simulation
247+time is passing. e.g. if a future date is specified and the time is moving backwards,
248+the function will return immediately. If the time rate is 0, the function will not
249+wait. This is to prevent infinite wait time.
250+
251+Parameters:
252+ - dt : the date string to use
253+ - spec : "local" or "utc".
254+
255+*/
256
257=== modified file 'doc/scripting.doxygen'
258--- doc/scripting.doxygen 2010-05-19 06:40:34 +0000
259+++ doc/scripting.doxygen 2010-11-04 00:01:48 +0000
260@@ -1,6 +1,6 @@
261 /*
262 * Stellarium
263- * Copyright (C) 2009 Matthew Gates
264+ * Copyright (C) 2010 Matthew Gates
265 *
266 * This program is free software; you can redistribute it and/or
267 * modify it under the terms of the GNU General Public License
268@@ -75,6 +75,13 @@
269 - StelSkyDrawer
270 - StelSkyLayerMgr
271
272+@section built_in_script_functions Built in Script Functions
273+
274+In addition to the public slots of the classes described above, some functionality
275+is provided by functions implemented within the scripting language. These are
276+made available from the core object, and are similar in operation to the
277+public slots of StelMainScriptAPI. See @ref builtinScriptFunctions for details.
278+
279 @section script_console Script Console
280
281 Note: The Script Console has been enabled by default since version 0.10.5.
282
283=== modified file 'plugins/Satellites/nightStyle.css'
284--- plugins/Satellites/nightStyle.css 2010-03-26 22:32:05 +0000
285+++ plugins/Satellites/nightStyle.css 2010-11-04 00:01:48 +0000
286@@ -9,78 +9,3 @@
287 alternate-background-color: rgba(150, 0, 0, 20%)
288 }
289
290-QToolBox {
291- margin-right: 10px;
292- margin-left: 10px;
293- margin-top: 10px;
294- margin-bottom: 10px;
295- background-color: transparent;
296- font-weight: bold;
297-}
298-
299-QToolBox > QWidget {
300- background-color: rgba(105, 0, 0, 20%);
301-}
302-
303-QToolBox::tab {
304- padding-left: 10px;
305- background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgb(32, 0, 0), stop:1 rgb(23, 0, 0));
306-}
307-
308-QToolBox::tab:first {
309- border-top-left-radius: 10px;
310- border-top-right-radius: 10px;
311-}
312-
313-QToolBox::tab:middle {
314- /*border-radius: 10px;*/
315-}
316-
317-QToolBox::tab:last {
318- border-bottom-left-radius: 10px;
319- border-bottom-right-radius: 10px;
320-}
321-
322-QToolBox::tab:selected {
323- border-bottom-left-radius: 0px;
324- border-bottom-right-radius: 0px;
325-}
326-
327-QToolBox::tab::title {
328- image: none;
329- subcontrol-position: top left;
330- subcontrol-origin: margin;
331- color: rgb(122, 0, 0);
332-}
333-
334-QTabBar {
335- border: none;
336- margin: 0px;
337- padding: 0px;
338- font-weight: bold;
339- color: rgb(120, 0, 0);
340- background-color: rgb(22, 0, 0);
341-}
342-
343-QTabBar::tab {
344- border: none;
345- margin: 0px;
346- padding: 4px;
347- min-height: 24px;
348- min-width: 0px;
349- font-size: 14px;
350-}
351-
352-QTabBar::tab:selected {
353- border: none;
354- margin: 0px;
355- border-top-left-radius: 10px;
356- border-top-right-radius: 10px;
357- color: rgb(220, 0, 0);
358- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(68, 0, 0), stop: 1 rgb(86, 0, 0));
359-}
360-
361-QTabWidget::pane {
362- margin-top: 0px;
363- border-top: none;
364-}
365
366=== modified file 'plugins/Satellites/normalStyle.css'
367--- plugins/Satellites/normalStyle.css 2010-03-26 22:32:05 +0000
368+++ plugins/Satellites/normalStyle.css 2010-11-04 00:01:48 +0000
369@@ -9,78 +9,3 @@
370 alternate-background-color: rgba(149, 150, 152, 20%)
371 }
372
373-QToolBox {
374- margin-right: 10px;
375- margin-left: 10px;
376- margin-top: 10px;
377- margin-bottom: 10px;
378- background-color: transparent;
379- font-weight: bold;
380-}
381-
382-QToolBox > QWidget {
383- background-color: rgba(149, 150, 152, 20%);
384-}
385-
386-QToolBox::tab {
387- padding-left: 10px;
388- background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgb(41, 47, 50), stop:1 rgb(31, 33, 36));
389-}
390-
391-QToolBox::tab:first {
392- border-top-left-radius: 10px;
393- border-top-right-radius: 10px;
394-}
395-
396-QToolBox::tab:middle {
397- /*border-radius: 10px;*/
398-}
399-
400-QToolBox::tab:last {
401- border-bottom-left-radius: 10px;
402- border-bottom-right-radius: 10px;
403-}
404-
405-QToolBox::tab:selected {
406- border-bottom-left-radius: 0px;
407- border-bottom-right-radius: 0px;
408-}
409-
410-QToolBox::tab::title {
411- image: none;
412- subcontrol-position: top left;
413- subcontrol-origin: margin;
414- color: rgb(174, 174, 175);
415-}
416-
417-QTabBar {
418- border: none;
419- margin: 0px;
420- padding: 0px;
421- font-weight: bold;
422- color: rgb(170, 173, 164);
423- background-color: rgb(31, 31, 31);
424-}
425-
426-QTabBar::tab {
427- border: none;
428- margin: 0px;
429- padding: 4px;
430- min-height: 24px;
431- min-width: 0px;
432- font-size: 14px;
433-}
434-
435-QTabBar::tab:selected {
436- border: none;
437- margin: 0px;
438- border-top-left-radius: 10px;
439- border-top-right-radius: 10px;
440- color: rgb(220, 223, 214);
441- background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(68, 69, 72), stop: 1 rgb(86, 87, 90));
442-}
443-
444-QTabWidget::pane {
445- margin-top: 0px;
446- border-top: none;
447-}
448
449=== modified file 'plugins/Satellites/satellites.json'
450--- plugins/Satellites/satellites.json 2010-10-27 15:28:33 +0000
451+++ plugins/Satellites/satellites.json 2010-11-04 00:01:48 +0000
452@@ -1,187 +1,39 @@
453 {
454 "creator": "Satellites plugin (update)",
455 "hintColor": [0, 0.5, 0.5],
456+ "orbitColor": [0, 0.5, 0.5],
457 "satellites":
458 {
459 "AAU CUBESAT":
460 {
461 "comms": [],
462- "tle1": "1 27846U 03031G 10010.54313843 .00000017 00000-0 28199-4 0 6580",
463- "tle2": "2 27846 98.7035 22.6880 0008761 245.5711 114.4553 14.21010978338790",
464- "draw_orbit": false,
465- "visible": false
466- },
467- "PHASE 3B (AO-10)":
468- {
469- "description": "Amateur satellite",
470- "groups": ["amateur", "non-operational"],
471- "tle1": "1 14129U 83058B 09080.32998673 -.00000327 00000-0 10000-3 0 6360",
472- "tle2": "2 14129 25.9652 165.8235 5982871 207.6161 100.7646 2.05871463165845",
473- "draw_orbit": false,
474- "visible": false
475- },
476- "PACSAT (AO-16)":
477- {
478- "description": "Amateur satellite",
479- "groups": ["amateur", "non-operational"],
480- "tle1": "1 20439U 90005D 09080.85236265 .00000014 00000-0 20602-4 0 5632",
481- "tle2": "2 20439 98.2700 53.2702 0011918 71.1776 289.0705 14.31818920 653",
482- "draw_orbit": false,
483+ "groups": [],
484+ "orbitColor": [0, 0.5, 0.5],
485+ "orbitVisible": false,
486+ "tle1": "1 27846U 03031G 10303.03016006 .00000072 00000-0 53111-4 0 8620",
487+ "tle2": "2 27846 98.7018 310.8864 0009831 116.6931 243.5240 14.21061067380335",
488 "visible": false
489 },
490 "ARSENE (AO-24)":
491 {
492- "description": "Amateur satellite",
493- "groups": ["amateur", "non-operational"],
494- "tle1": "1 22654U 93031B 09078.43825483 -.00000132 00000-0 10000-3 0 2462",
495- "tle2": "2 22654 5.1398 339.1447 2877460 155.4874 221.3758 1.42205192 77846",
496- "draw_orbit": false,
497- "visible": false
498- },
499- "EYESAT-1 (AO-27)":
500- {
501- "comms": [
502- {
503- "description": "uplink",
504- "frequency": 145.85
505- },
506- {
507- "description": "downlink",
508- "frequency": 145.2
509- }],
510- "description": "Amateur satellite",
511- "groups": ["amateur"],
512- "tle1": "1 22825U 93061C 09080.84794649 .00000017 00000-0 23242-4 0 2051",
513- "tle2": "2 22825 98.4253 37.0634 0008629 156.2036 203.9551 14.29261103807439",
514- "draw_orbit": false,
515- "visible": true
516- },
517- "PHASE 3D (AO-40)":
518- {
519- "comms": [
520- {
521- "description": "Beacon",
522- "frequency": 145.898
523- }],
524- "description": "AMSAT-OSCAR 40 (Phase 3D)",
525- "groups": ["amateur"],
526- "tle1": "1 26609U 00072B 09080.26545799 -.00000301 00000-0 10000-3 0 2044",
527- "tle2": "2 26609 8.9892 27.3596 7956558 186.7198 145.1448 1.25584591 38523",
528- "draw_orbit": false,
529- "visible": true
530- },
531- "OSCAR 5 (AO-5)":
532- {
533- "description": "Amateur satellite",
534- "groups": ["amateur", "non-operational"],
535- "tle1": "1 04321U 70008B 09080.96250683 -.00000031 00000-0 10000-3 0 1420",
536- "tle2": "2 04321 102.1329 90.4257 0027646 145.0891 215.1997 12.52156131789847",
537- "draw_orbit": false,
538- "visible": false
539- },
540- "ECHO (AO-51)":
541- {
542- "comms": [
543- {
544- "description": "uplink",
545- "frequency": 145.92,
546- "modulation": "FM/Voice"
547- },
548- {
549- "description": "downlink",
550- "frequency": 435.15,
551- "modulation": "FM/Voice"
552- }],
553- "description": "Amateur satellite",
554- "groups": ["amateur"],
555- "tle1": "1 28375U 04025K 09080.66057599 .00000001 00000-0 12813-4 0 3455",
556- "tle2": "2 28375 98.0561 95.3557 0085140 31.1071 329.5121 14.40636066248352",
557- "draw_orbit": false,
558- "visible": true
559- },
560- "OSCAR 6 (AO-6)":
561- {
562- "description": "Amateur satellite",
563- "groups": ["amateur", "non-operational"],
564- "tle1": "1 06236U 72082B 09080.97286453 -.00000027 00000-0 10000-3 0 1476",
565- "tle2": "2 06236 101.4018 97.8648 0004124 61.3429 298.8059 12.53076701666485",
566- "draw_orbit": false,
567- "visible": false
568- },
569- "OSCAR 7 (AO-7)":
570- {
571- "comms": [
572- {
573- "description": "200mW Beacon used with Modes B & C",
574- "frequency": 145.972
575- },
576- {
577- "description": "downlink",
578- "frequency": 145.95,
579- "modulation": "Modes B & C"
580- },
581- {
582- "description": "uplink",
583- "frequency": 145.9,
584- "modulation": "Mode A"
585- },
586- {
587- "description": "downlink",
588- "frequency": 29.45,
589- "modulation": "Mode A"
590- },
591- {
592- "description": "200mW Beacon used with Mode A",
593- "frequency": 29.502
594- },
595- {
596- "frequency": 2304.1,
597- "modulation": "40 mW Beacon - only when commanded"
598- },
599- {
600- "description": "uplink",
601- "frequency": 432.15,
602- "modulation": "Modes B & C"
603- }],
604- "description": "AMSAT-OSCAR 7 (Phase-IIB)",
605- "groups": ["amateur"],
606- "tle1": "1 07530U 74089B 09081.09982174 -.00000027 00000-0 10000-3 0 4327",
607- "tle2": "2 07530 101.4356 108.9488 0012080 79.3798 280.8632 12.53575454571800",
608- "draw_orbit": false,
609- "visible": true
610- },
611- "OSCAR 8 (AO-8)":
612- {
613- "description": "Amateur satellite",
614- "groups": ["amateur", "non-operational"],
615- "tle1": "1 10703U 78026B 09081.15228109 .00000030 00000-0 50534-4 0 4427",
616- "tle2": "2 10703 98.8443 129.5050 0007638 50.2967 309.8869 13.98840358583855",
617- "draw_orbit": false,
618+ "comms": [],
619+ "groups": ["amateur", "non-operational"],
620+ "orbitColor": [0, 0.5, 0.5],
621+ "orbitVisible": false,
622+ "tle1": "1 22654U 93031B 10296.29188703 -.00000103 00000-0 10000-3 0 4131",
623+ "tle2": "2 22654 4.6448 327.4414 2846429 190.3502 161.8369 1.42205681 86138",
624 "visible": false
625 },
626 "CANX-1":
627 {
628 "comms": [],
629- "tle1": "1 27847U 03031H 10010.55450479 .00000005 00000-0 22661-4 0 6786",
630- "tle2": "2 27847 98.7031 22.6860 0008813 243.1062 116.9211 14.20990414338740",
631- "draw_orbit": false,
632+ "groups": [],
633+ "orbitColor": [0, 0.5, 0.5],
634+ "orbitVisible": false,
635+ "tle1": "1 27847U 03031H 10301.49689319 .00000073 00000-0 53616-4 0 8814",
636+ "tle2": "2 27847 98.7006 309.3586 0009858 121.5158 238.6993 14.21038584380060",
637 "visible": false
638 },
639- "CUTE-1 (CO-55)":
640- {
641- "comms": [
642- {
643- "description": "downlink",
644- "frequency": 437.4,
645- "modulation": "AFSK 1200 bps"
646- }],
647- "description": "Amateur satellite",
648- "groups": ["amateur"],
649- "tle1": "1 27844U 03031E 09080.51717845 .00000023 00000-0 31209-4 0 5380",
650- "tle2": "2 27844 98.7159 90.9149 0010677 40.0025 320.1937 14.20627455296817",
651- "draw_orbit": false,
652- "visible": true
653- },
654 "CUBESAT XI-IV (CO-57)":
655 {
656 "comms": [
657@@ -190,11 +42,11 @@
658 "frequency": 437.49,
659 "modulation": "AFSK 1200 bps"
660 }],
661- "description": "Amateur satellite",
662 "groups": ["amateur"],
663- "tle1": "1 27848U 03031J 09080.55297394 .00000015 00000-0 27156-4 0 4858",
664- "tle2": "2 27848 98.7176 90.0128 0010577 41.9374 318.2624 14.20430987296783",
665- "draw_orbit": false,
666+ "orbitColor": [0, 0.5, 0.5],
667+ "orbitVisible": false,
668+ "tle1": "1 27848U 03031J 10302.02471669 .00000092 00000-0 63155-4 0 9149",
669+ "tle2": "2 27848 98.7153 308.2095 0009735 145.0105 215.1692 14.20530401380042",
670 "visible": true
671 },
672 "CUBESAT XI-V (CO-58)":
673@@ -205,21 +57,27 @@
674 "frequency": 437.345,
675 "modulation": "AFSK 1200 bps"
676 }],
677- "description": "Amateur satellite",
678 "groups": ["amateur"],
679- "tle1": "1 28895U 05043F 09080.73753781 .00000170 00000-0 45254-4 0 2627",
680- "tle2": "2 28895 98.0694 333.7523 0016860 260.8704 99.0653 14.59751404180971",
681- "draw_orbit": false,
682+ "orbitColor": [0, 0.5, 0.5],
683+ "orbitVisible": false,
684+ "tle1": "1 28895U 05043F 10303.20603507 -.00000035 00000-0 20959-5 0 7171",
685+ "tle2": "2 28895 97.9929 183.0586 0017263 218.8164 141.1799 14.59953882266683",
686 "visible": true
687 },
688- "DOVE (DO-17)":
689+ "CUTE-1 (CO-55)":
690 {
691- "description": "Amateur satellite",
692- "groups": ["amateur", "non-operational"],
693- "tle1": "1 20440U 90005E 09080.52227667 .00000009 00000-0 18438-4 0 2752",
694- "tle2": "2 20440 98.2451 57.8863 0011973 67.7463 292.4996 14.32122011 741",
695- "draw_orbit": false,
696- "visible": false
697+ "comms": [
698+ {
699+ "description": "downlink",
700+ "frequency": 437.4,
701+ "modulation": "AFSK 1200 bps"
702+ }],
703+ "groups": ["amateur"],
704+ "orbitColor": [0, 0.5, 0.5],
705+ "orbitVisible": false,
706+ "tle1": "1 27844U 03031E 10301.55293538 .00000112 00000-0 72257-4 0 9662",
707+ "tle2": "2 27844 98.7101 308.6233 0009948 142.0283 218.1605 14.20740927380020",
708+ "visible": true
709 },
710 "DELFI-C3 (DO-64)":
711 {
712@@ -229,1152 +87,1315 @@
713 "frequency": 145.87,
714 "modulation": "BPSK 1200 bps"
715 }],
716- "description": "Amateur satellite",
717 "groups": ["amateur"],
718- "tle1": "1 32789U 08021G 09080.84012653 .00000106 00000-0 20301-4 0 3267",
719- "tle2": "2 32789 97.9568 145.5256 0014665 318.8670 41.1422 14.81641404 48513",
720- "draw_orbit": false,
721+ "orbitColor": [0, 0.5, 0.5],
722+ "orbitVisible": false,
723+ "tle1": "1 32789U 08021G 10303.19103710 .00000516 00000-0 70963-4 0 8247",
724+ "tle2": "2 32789 97.8870 6.7848 0015076 201.6521 158.4055 14.82392833135504",
725 "visible": true
726 },
727+ "DOVE (DO-17)":
728+ {
729+ "comms": [],
730+ "groups": ["amateur", "non-operational"],
731+ "orbitColor": [0, 0.5, 0.5],
732+ "orbitVisible": false,
733+ "tle1": "1 20440U 90005E 10302.46080120 .00000050 00000-0 33921-4 0 7480",
734+ "tle2": "2 20440 98.3265 258.6847 0011756 118.4239 241.8135 14.32187412 84754",
735+ "visible": false
736+ },
737 "DTUSAT":
738 {
739 "comms": [],
740- "tle1": "1 27842U 03031C 10010.89561892 .00000007 00000-0 23258-4 0 7359",
741- "tle2": "2 27842 98.7047 23.0441 0008526 245.7454 114.2832 14.21010898338847",
742- "draw_orbit": false,
743+ "groups": [],
744+ "orbitColor": [0, 0.5, 0.5],
745+ "orbitVisible": false,
746+ "tle1": "1 27842U 03031C 10302.04462644 .00000081 00000-0 57327-4 0 9601",
747+ "tle2": "2 27842 98.7019 309.9250 0009996 120.0473 240.1690 14.21063113380192",
748 "visible": false
749 },
750+ "ECHO (AO-51)":
751+ {
752+ "comms": [
753+ {
754+ "description": "uplink",
755+ "frequency": 145.92,
756+ "modulation": "FM/Voice"
757+ },
758+ {
759+ "description": "downlink",
760+ "frequency": 435.15,
761+ "modulation": "FM/Voice"
762+ }],
763+ "groups": ["amateur"],
764+ "orbitColor": [0, 0.5, 0.5],
765+ "orbitVisible": false,
766+ "tle1": "1 28375U 04025K 10302.53759805 .00000053 00000-0 28310-4 0 8113",
767+ "tle2": "2 28375 98.0737 288.4713 0085112 49.6786 311.1800 14.40705975332858",
768+ "visible": true
769+ },
770 "ENVISAT":
771 {
772 "comms": [],
773 "groups": ["scientific"],
774 "hintColor": [0.400000005960464, 0.800000011920929, 1],
775- "tle1": "1 27386U 02009A 10011.73639675 .00000071 00000-0 42510-4 0 6762",
776- "tle2": "2 27386 98.5484 81.1001 0001030 91.3585 61.9740 14.32248909411344",
777- "draw_orbit": true,
778+ "orbitColor": [0.400000005960464, 0.800000011920929, 1],
779+ "orbitVisible": true,
780+ "tle1": "1 27386U 02009A 10303.00313459 -.00000192 00000-0 -49512-4 0 5725",
781+ "tle2": "2 27386 98.5363 8.1819 0000997 106.7882 253.3428 14.37439661453043",
782 "visible": true
783 },
784- "JAS-1 (FO-12)":
785- {
786- "description": "Amateur satellite",
787- "groups": ["amateur", "non-operational"],
788- "tle1": "1 16909U 86061B 09080.94650626 -.00000083 00000-0 10000-3 0 5465",
789- "tle2": "2 16909 50.0155 70.0871 0010887 345.8622 14.1906 12.44452849 28116",
790- "draw_orbit": false,
791- "visible": false
792- },
793- "JAS-1B (FO-20)":
794- {
795- "description": "Amateur satellite",
796- "groups": ["amateur", "non-operational"],
797- "tle1": "1 20480U 90013C 09080.79147234 -.00000010 00000-0 50788-4 0 941",
798- "tle2": "2 20480 99.0681 17.7100 0540652 8.2393 352.7149 12.83361326895695",
799- "draw_orbit": false,
800- "visible": false
801- },
802- "JAS-2 (FO-29)":
803+ "EYESAT-1 (AO-27)":
804 {
805 "comms": [
806 {
807 "description": "uplink",
808- "frequency": 145.95,
809- "modulation": "SSB/CW"
810+ "frequency": 145.85
811 },
812 {
813 "description": "downlink",
814- "frequency": 435.85,
815- "modulation": "SSB/CW"
816+ "frequency": 145.2
817 }],
818- "description": "Amateur satellite",
819 "groups": ["amateur"],
820- "tle1": "1 24278U 96046B 09080.73870134 -.00000063 00000-0 -26229-4 0 41",
821- "tle2": "2 24278 98.5666 326.4736 0350089 216.8408 140.8210 13.52942306621921",
822- "draw_orbit": false,
823+ "orbitColor": [0, 0.5, 0.5],
824+ "orbitVisible": false,
825+ "tle1": "1 22825U 93061C 10302.91096676 -.00000105 00000-0 -24578-4 0 6623",
826+ "tle2": "2 22825 98.5014 247.4714 0007624 230.3370 129.7143 14.29312747891290",
827 "visible": true
828 },
829 "GENESIS 1":
830 {
831 "comms": [],
832- "tle1": "1 29252U 06029A 10011.52793667 .00000091 00000-0 19479-4 0 9551",
833- "tle2": "2 29252 64.5138 48.6502 0005838 166.2231 193.9045 15.03489848192237",
834- "draw_orbit": false,
835+ "groups": [],
836+ "orbitColor": [0, 0.5, 0.5],
837+ "orbitVisible": false,
838+ "tle1": "1 29252U 06029A 10302.83842608 .00000523 00000-0 50634-4 0 1817",
839+ "tle2": "2 29252 64.5130 196.5801 0033113 326.7162 33.1870 15.03781513236039",
840 "visible": true
841 },
842 "GENESIS 2":
843 {
844 "comms": [],
845- "tle1": "1 31789U 07028A 10011.52925320 .00000135 00000-0 23184-4 0 7041",
846- "tle2": "2 31789 64.5059 80.0205 0048307 232.0058 127.6690 15.03160429139449",
847- "draw_orbit": false,
848+ "groups": [],
849+ "orbitColor": [0, 0.5, 0.5],
850+ "orbitVisible": false,
851+ "tle1": "1 31789U 07028A 10302.90243647 .00000623 00000-0 58451-4 0 9253",
852+ "tle2": "2 31789 64.5101 228.1646 0015066 184.5476 175.5499 15.03454641183240",
853 "visible": true
854 },
855- "TECHSAT 1B (GO-32)":
856- {
857- "description": "Amateur satellite",
858- "groups": ["amateur", "non-operational"],
859- "tle1": "1 25397U 98043D 09080.75202847 -.00000043 00000-0 -91654-6 0 8508",
860- "tle2": "2 25397 98.3353 107.7463 0001898 121.8466 238.2885 14.23155927555696",
861- "draw_orbit": false,
862- "visible": false
863- },
864 "GPS BIIA-10 (PRN 32)":
865 {
866 "comms": [],
867- "tle1": "1 20959U 90103A 10010.99755647 -.00000036 00000-0 10000-3 0 5262",
868- "tle2": "2 20959 55.0535 274.6290 0132765 299.3343 59.4131 2.00568641140074",
869- "draw_orbit": false,
870+ "groups": [],
871+ "orbitColor": [0, 0.5, 0.5],
872+ "orbitVisible": false,
873+ "tle1": "1 20959U 90103A 10302.16744991 -.00000003 00000-0 10000-3 0 8992",
874+ "tle2": "2 20959 54.8500 262.8703 0127943 307.6490 51.1922 2.00571598145919",
875 "visible": false
876 },
877 "GPS BIIA-11 (PRN 24)":
878 {
879 "comms": [],
880- "tle1": "1 21552U 91047A 10009.70414824 .00000092 00000-0 10000-3 0 5313",
881- "tle2": "2 21552 54.4144 212.6800 0062160 326.3598 33.2642 2.00563397135632",
882- "draw_orbit": false,
883+ "groups": [],
884+ "orbitColor": [0, 0.5, 0.5],
885+ "orbitVisible": false,
886+ "tle1": "1 21552U 91047A 10302.06748089 .00000011 00000-0 10000-3 0 8887",
887+ "tle2": "2 21552 54.3572 200.9343 0057923 338.3772 21.4482 2.00436756141496",
888 "visible": false
889 },
890 "GPS BIIA-14 (PRN 26)":
891 {
892 "comms": [],
893- "tle1": "1 22014U 92039A 10010.93278189 -.00000105 00000-0 10000-3 0 4649",
894- "tle2": "2 22014 56.8181 333.2692 0195319 59.8919 302.0021 2.00570105121807",
895- "draw_orbit": false,
896+ "groups": [],
897+ "orbitColor": [0, 0.5, 0.5],
898+ "orbitVisible": false,
899+ "tle1": "1 22014U 92039A 10301.46919992 -.00000036 00000-0 10000-3 0 7853",
900+ "tle2": "2 22014 56.6851 321.9816 0196330 63.6918 298.3560 2.00568037127630",
901 "visible": false
902 },
903 "GPS BIIA-15 (PRN 27)":
904 {
905 "comms": [],
906- "tle1": "1 22108U 92058A 10010.90400221 -.00000067 00000-0 10000-3 0 3539",
907- "tle2": "2 22108 55.9801 26.5719 0219290 274.8295 82.7079 2.00561618126981",
908- "draw_orbit": false,
909+ "groups": [],
910+ "orbitColor": [0, 0.5, 0.5],
911+ "orbitVisible": false,
912+ "tle1": "1 22108U 92058A 10302.06723595 -.00000064 00000-0 10000-3 0 6835",
913+ "tle2": "2 22108 56.1270 15.0686 0219084 282.0627 75.5478 2.00576345132827",
914 "visible": false
915 },
916 "GPS BIIA-21 (PRN 09)":
917 {
918 "comms": [],
919- "tle1": "1 22700U 93042A 10010.42349068 -.00000067 00000-0 10000-3 0 7005",
920- "tle2": "2 22700 56.0930 27.9954 0203907 87.3193 275.0601 2.00570795121138",
921- "draw_orbit": false,
922+ "groups": [],
923+ "orbitColor": [0, 0.5, 0.5],
924+ "orbitVisible": false,
925+ "tle1": "1 22700U 93042A 10301.59780814 -.00000062 00000-0 10000-3 0 237",
926+ "tle2": "2 22700 56.2590 16.5409 0168019 88.7929 273.1805 2.00561057126970",
927 "visible": false
928 },
929 "GPS BIIA-23 (PRN 04)":
930 {
931 "comms": [],
932- "tle1": "1 22877U 93068A 10010.06604071 .00000093 00000-0 10000-3 0 197",
933- "tle2": "2 22877 53.8346 209.9413 0090336 32.3870 328.2140 2.00570796118779",
934- "draw_orbit": false,
935+ "groups": [],
936+ "orbitColor": [0, 0.5, 0.5],
937+ "orbitVisible": false,
938+ "tle1": "1 22877U 93068A 10300.74029013 .00000022 00000-0 10000-3 0 3703",
939+ "tle2": "2 22877 53.7782 198.0703 0092885 37.1146 323.5923 2.00552150124602",
940 "visible": false
941 },
942 "GPS BIIA-24 (PRN 06)":
943 {
944 "comms": [],
945- "tle1": "1 23027U 94016A 10010.76960448 .00000006 00000-0 10000-3 0 283",
946- "tle2": "2 23027 53.5254 146.9361 0060541 291.8296 67.4883 2.00564113116098",
947- "draw_orbit": false,
948+ "groups": [],
949+ "orbitColor": [0, 0.5, 0.5],
950+ "orbitVisible": false,
951+ "tle1": "1 23027U 94016A 10302.43501524 .00000078 00000-0 10000-3 0 3403",
952+ "tle2": "2 23027 53.5629 134.9456 0063120 304.8457 54.6225 2.00565245121941",
953 "visible": false
954 },
955 "GPS BIIA-25 (PRN 03)":
956 {
957 "comms": [],
958- "tle1": "1 23833U 96019A 10011.28117265 -.00000009 00000-0 10000-3 0 2176",
959- "tle2": "2 23833 53.1057 142.9368 0125981 55.7020 305.4397 2.00562273101088",
960- "draw_orbit": false,
961+ "groups": [],
962+ "orbitColor": [0, 0.5, 0.5],
963+ "orbitVisible": false,
964+ "tle1": "1 23833U 96019A 10302.45211687 .00000079 00000-0 10000-3 0 5349",
965+ "tle2": "2 23833 53.1595 130.8246 0141049 57.5228 303.8974 2.00570083106928",
966 "visible": false
967 },
968 "GPS BIIA-26 (PRN 10)":
969 {
970 "comms": [],
971- "tle1": "1 23953U 96041A 10011.18603747 -.00000025 00000-0 10000-3 0 6866",
972- "tle2": "2 23953 54.7294 271.0433 0088058 35.3384 325.3007 2.00592554 98874",
973- "draw_orbit": false,
974+ "groups": [],
975+ "orbitColor": [0, 0.5, 0.5],
976+ "orbitVisible": false,
977+ "tle1": "1 23953U 96041A 10301.82803178 -.00000002 00000-0 10000-3 0 295",
978+ "tle2": "2 23953 54.5199 259.2130 0093725 37.2396 323.3915 2.00580465104703",
979 "visible": false
980 },
981 "GPS BIIA-27 (PRN 30)":
982 {
983 "comms": [],
984- "tle1": "1 24320U 96056A 10010.55267325 -.00000068 00000-0 10000-3 0 4257",
985- "tle2": "2 24320 54.6846 87.2451 0117066 83.4925 277.8682 2.00567811 97528",
986- "draw_orbit": false,
987+ "groups": [],
988+ "orbitColor": [0, 0.5, 0.5],
989+ "orbitVisible": false,
990+ "tle1": "1 24320U 96056A 10301.75887462 .00000028 00000-0 00000+0 0 7581",
991+ "tle2": "2 24320 54.8857 75.4568 0129144 89.0802 272.3950 2.00368470103364",
992 "visible": false
993 },
994 "GPS BIIA-28 (PRN 08)":
995 {
996 "comms": [],
997- "tle1": "1 25030U 97067A 10010.28331492 -.00000064 00000-0 10000-3 0 1002",
998- "tle2": "2 25030 56.8069 33.5854 0109830 177.7126 182.3861 2.00557057 89283",
999- "draw_orbit": false,
1000+ "groups": [],
1001+ "orbitColor": [0, 0.5, 0.5],
1002+ "orbitVisible": false,
1003+ "tle1": "1 25030U 97067A 10301.45797889 -.00000056 00000-0 10000-3 0 4295",
1004+ "tle2": "2 25030 56.9805 22.3425 0114906 181.8600 178.1436 2.00565959 95126",
1005 "visible": false
1006 },
1007 "GPS BIIR-02 (PRN 13)":
1008 {
1009 "comms": [],
1010- "tle1": "1 24876U 97035A 10011.15261365 -.00000105 00000-0 10000-3 0 1907",
1011- "tle2": "2 24876 56.9425 333.4309 0037352 94.7690 265.6519 2.00571727 91409",
1012- "draw_orbit": false,
1013+ "groups": [],
1014+ "orbitColor": [0, 0.5, 0.5],
1015+ "orbitVisible": false,
1016+ "tle1": "1 24876U 97035A 10301.32605098 -.00000036 00000-0 10000-3 0 5023",
1017+ "tle2": "2 24876 56.8189 322.2161 0040823 104.7475 255.7519 2.00561702 97225",
1018 "visible": false
1019 },
1020 "GPS BIIR-03 (PRN 11)":
1021 {
1022 "comms": [],
1023- "tle1": "1 25933U 99055A 10010.92537465 .00000081 00000-0 10000-3 0 6410",
1024- "tle2": "2 25933 50.9220 196.7469 0102582 44.1197 316.7153 2.00557696 75219",
1025- "draw_orbit": false,
1026+ "groups": [],
1027+ "orbitColor": [0, 0.5, 0.5],
1028+ "orbitVisible": false,
1029+ "tle1": "1 25933U 99055A 10301.60364195 .00000024 00000-0 10000-3 0 9494",
1030+ "tle2": "2 25933 50.8872 184.0513 0111230 49.1965 311.8490 2.00586061 81045",
1031 "visible": false
1032 },
1033 "GPS BIIR-04 (PRN 20)":
1034 {
1035 "comms": [],
1036- "tle1": "1 26360U 00025A 10011.52706440 -.00000016 00000-0 10000-3 0 7344",
1037- "tle2": "2 26360 53.7974 268.0575 0039769 72.6509 287.8497 2.00559568 70923",
1038- "draw_orbit": false,
1039+ "groups": [],
1040+ "orbitColor": [0, 0.5, 0.5],
1041+ "orbitVisible": false,
1042+ "tle1": "1 26360U 00025A 10301.69293456 -.00000003 00000-0 10000-3 0 408",
1043+ "tle2": "2 26360 53.5997 255.9924 0040843 71.7419 288.6978 2.00547909 76749",
1044 "visible": false
1045 },
1046 "GPS BIIR-05 (PRN 28)":
1047 {
1048 "comms": [],
1049- "tle1": "1 26407U 00040A 10010.36440597 -.00000066 00000-0 10000-3 0 6829",
1050- "tle2": "2 26407 55.5104 91.6427 0157978 246.2508 112.1090 2.00565206 69571",
1051- "draw_orbit": false,
1052+ "groups": [],
1053+ "orbitColor": [0, 0.5, 0.5],
1054+ "orbitVisible": false,
1055+ "tle1": "1 26407U 00040A 10301.53469852 .00000000 00000-0 10000-3 0 9882",
1056+ "tle2": "2 26407 55.6937 80.1082 0165329 248.9835 109.2466 2.00562548 75417",
1057 "visible": false
1058 },
1059 "GPS BIIR-06 (PRN 14)":
1060 {
1061 "comms": [],
1062- "tle1": "1 26605U 00071A 10010.96064742 -.00000106 00000-0 10000-3 0 6884",
1063- "tle2": "2 26605 56.5635 332.2378 0052732 241.2746 118.1865 2.00562276 67186",
1064- "draw_orbit": false,
1065+ "groups": [],
1066+ "orbitColor": [0, 0.5, 0.5],
1067+ "orbitVisible": false,
1068+ "tle1": "1 26605U 00071A 10301.63842618 -.00000035 00000-0 10000-3 0 9993",
1069+ "tle2": "2 26605 56.4294 320.8999 0059105 240.4878 118.9601 2.00574791 73016",
1070 "visible": false
1071 },
1072 "GPS BIIR-07 (PRN 18)":
1073 {
1074 "comms": [],
1075- "tle1": "1 26690U 01004A 10011.32818609 -.00000026 00000-0 10000-3 0 5740",
1076- "tle2": "2 26690 53.8131 271.1512 0110582 226.2030 132.9381 2.00565198 65607",
1077- "draw_orbit": false,
1078+ "groups": [],
1079+ "orbitColor": [0, 0.5, 0.5],
1080+ "orbitVisible": false,
1081+ "tle1": "1 26690U 01004A 10301.50411650 -.00000003 00000-0 10000-3 0 8789",
1082+ "tle2": "2 26690 53.5999 259.0875 0120359 229.8170 129.1163 2.00556033 71421",
1083 "visible": false
1084 },
1085 "GPS BIIR-08 (PRN 16)":
1086 {
1087 "comms": [],
1088- "tle1": "1 27663U 03005A 10010.18241212 -.00000066 00000-0 10000-3 0 9453",
1089- "tle2": "2 27663 55.6126 91.1957 0054149 342.9474 16.8941 2.00562319 50933",
1090- "draw_orbit": false,
1091+ "groups": [],
1092+ "orbitColor": [0, 0.5, 0.5],
1093+ "orbitVisible": false,
1094+ "tle1": "1 27663U 03005A 10301.36091234 .00000036 00000-0 10000-3 0 2878",
1095+ "tle2": "2 27663 55.7963 79.6867 0058151 349.0165 10.8527 2.00563675 56774",
1096 "visible": false
1097 },
1098 "GPS BIIR-09 (PRN 21)":
1099 {
1100 "comms": [],
1101- "tle1": "1 27704U 03010A 10010.75198163 .00000090 00000-0 10000-3 0 8437",
1102- "tle2": "2 27704 53.4558 210.5815 0154862 213.4823 145.5286 2.00557110 49738",
1103- "draw_orbit": false,
1104+ "groups": [],
1105+ "orbitColor": [0, 0.5, 0.5],
1106+ "orbitVisible": false,
1107+ "tle1": "1 27704U 03010A 10301.91975628 .00000012 00000-0 10000-3 0 1681",
1108+ "tle2": "2 27704 53.4072 198.5784 0172100 221.0933 137.6720 2.00568590 55579",
1109 "visible": false
1110 },
1111 "GPS BIIR-10 (PRN 22)":
1112 {
1113 "comms": [],
1114- "tle1": "1 28129U 03058A 10010.87364204 -.00000030 00000-0 10000-3 0 4548",
1115- "tle2": "2 28129 53.6784 271.4646 0053797 253.0522 106.4165 2.00564472 44446",
1116- "draw_orbit": false,
1117+ "groups": [],
1118+ "orbitColor": [0, 0.5, 0.5],
1119+ "orbitVisible": false,
1120+ "tle1": "1 28129U 03058A 10302.04591207 -.00000006 00000-0 10000-3 0 7654",
1121+ "tle2": "2 28129 53.4681 259.3240 0057215 250.8266 108.5467 2.00557710 50288",
1122 "visible": false
1123 },
1124 "GPS BIIR-11 (PRN 19)":
1125 {
1126 "comms": [],
1127- "tle1": "1 28190U 04009A 10011.32018064 .00000015 00000-0 10000-3 0 4007",
1128- "tle2": "2 28190 54.8708 154.0770 0060512 347.4292 12.3771 2.00562181 42623",
1129- "draw_orbit": false,
1130+ "groups": [],
1131+ "orbitColor": [0, 0.5, 0.5],
1132+ "orbitVisible": false,
1133+ "tle1": "1 28190U 04009A 10302.49753813 .00000077 00000-0 10000-3 0 7423",
1134+ "tle2": "2 28190 54.9006 142.5276 0067200 356.0750 3.9363 2.00574545 48462",
1135 "visible": false
1136 },
1137 "GPS BIIR-12 (PRN 23)":
1138 {
1139 "comms": [],
1140- "tle1": "1 28361U 04023A 10011.11001436 -.00000108 00000-0 10000-3 0 2210",
1141- "tle2": "2 28361 55.5233 330.1407 0063091 175.1654 184.8914 2.00555994 40706",
1142- "draw_orbit": false,
1143+ "groups": [],
1144+ "orbitColor": [0, 0.5, 0.5],
1145+ "orbitVisible": false,
1146+ "tle1": "1 28361U 04023A 10302.28272402 -.00000035 00000-0 10000-3 0 5610",
1147+ "tle2": "2 28361 55.3816 318.4790 0070499 181.0661 178.9571 2.00568581 46546",
1148 "visible": false
1149 },
1150 "GPS BIIR-13 (PRN 02)":
1151 {
1152 "comms": [],
1153- "tle1": "1 28474U 04045A 10010.60958177 .00000092 00000-0 10000-3 0 1103",
1154- "tle2": "2 28474 53.8831 208.8835 0092214 169.6917 190.5412 2.00553740 38050",
1155- "draw_orbit": false,
1156+ "groups": [],
1157+ "orbitColor": [0, 0.5, 0.5],
1158+ "orbitVisible": false,
1159+ "tle1": "1 28474U 04045A 10302.27512922 .00000012 00000-0 10000-3 0 4424",
1160+ "tle2": "2 28474 53.8285 196.9909 0097149 181.3885 178.6865 2.00565777 43901",
1161 "visible": false
1162 },
1163 "GPS BIIRM-1 (PRN 17)":
1164 {
1165 "comms": [],
1166- "tle1": "1 28874U 05038A 10010.46611155 .00000020 00000-0 10000-3 0 3749",
1167- "tle2": "2 28874 55.0076 150.9355 0050579 211.6273 148.0313 2.00552416 31470",
1168- "draw_orbit": false,
1169+ "groups": [],
1170+ "orbitColor": [0, 0.5, 0.5],
1171+ "orbitVisible": false,
1172+ "tle1": "1 28874U 05038A 10301.62882477 .00000075 00000-0 10000-3 0 7189",
1173+ "tle2": "2 28874 55.0370 139.4265 0058202 217.5021 142.1554 2.00563952 37314",
1174 "visible": false
1175 },
1176 "GPS BIIRM-2 (PRN 31)":
1177 {
1178 "comms": [],
1179- "tle1": "1 29486U 06042A 10011.06942763 -.00000065 00000-0 10000-3 0 6815",
1180- "tle2": "2 29486 55.8943 29.7669 0076878 294.8151 64.4195 2.00574313 24189",
1181- "draw_orbit": false,
1182+ "groups": [],
1183+ "orbitColor": [0, 0.5, 0.5],
1184+ "orbitVisible": false,
1185+ "tle1": "1 29486U 06042A 10301.24773966 -.00000060 00000-0 10000-3 0 329",
1186+ "tle2": "2 29486 56.0514 18.2945 0076258 299.0060 60.2772 2.00551655 30001",
1187 "visible": false
1188 },
1189 "GPS BIIRM-3 (PRN 12)":
1190 {
1191 "comms": [],
1192- "tle1": "1 29601U 06052A 10010.51493068 -.00000066 00000-0 10000-3 0 7387",
1193- "tle2": "2 29601 55.5346 90.1935 0034161 324.4761 35.3273 2.00550794 23085",
1194- "draw_orbit": false,
1195+ "groups": [],
1196+ "orbitColor": [0, 0.5, 0.5],
1197+ "orbitVisible": false,
1198+ "tle1": "1 29601U 06052A 10301.68663780 .00000035 00000-0 10000-3 0 960",
1199+ "tle2": "2 29601 55.7149 78.6666 0033514 338.2316 21.6255 2.00573529 28927",
1200 "visible": false
1201 },
1202 "GPS BIIRM-4 (PRN 15)":
1203 {
1204 "comms": [],
1205- "tle1": "1 32260U 07047A 10010.31555820 -.00000108 00000-0 00000+0 0 4705",
1206- "tle2": "2 32260 54.7160 328.8448 0023063 332.4507 27.4199 2.00560044 16474",
1207- "draw_orbit": false,
1208+ "groups": [],
1209+ "orbitColor": [0, 0.5, 0.5],
1210+ "orbitVisible": false,
1211+ "tle1": "1 32260U 07047A 10301.00379730 -.00000037 00000-0 00000+0 0 8095",
1212+ "tle2": "2 32260 54.5620 316.9717 0026590 345.9665 13.9949 2.00545542 22300",
1213 "visible": false
1214 },
1215 "GPS BIIRM-5 (PRN 29)":
1216 {
1217 "comms": [],
1218- "tle1": "1 32384U 07062A 10010.63802324 .00000019 00000-0 10000-3 0 4994",
1219- "tle2": "2 32384 55.0131 151.4032 0032068 287.1304 72.4854 2.00578110 15209",
1220- "draw_orbit": false,
1221+ "groups": [],
1222+ "orbitColor": [0, 0.5, 0.5],
1223+ "orbitVisible": false,
1224+ "tle1": "1 32384U 07062A 10301.81730681 .00000075 00000-0 10000-3 0 8360",
1225+ "tle2": "2 32384 55.0523 139.8993 0025158 291.2674 68.5415 2.00566036 21040",
1226 "visible": false
1227 },
1228 "GPS BIIRM-6 (PRN 07)":
1229 {
1230 "comms": [],
1231- "tle1": "1 32711U 08012A 10010.73574093 -.00000067 00000-0 10000-3 0 3661",
1232- "tle2": "2 32711 55.5876 29.8416 0032333 179.9404 180.1045 2.00557495 13415",
1233- "draw_orbit": false,
1234+ "groups": [],
1235+ "orbitColor": [0, 0.5, 0.5],
1236+ "orbitVisible": false,
1237+ "tle1": "1 32711U 08012A 10301.41459501 -.00000061 00000-0 10000-3 0 6684",
1238+ "tle2": "2 32711 55.7505 18.2710 0041269 182.2457 177.7857 2.00562183 19248",
1239 "visible": false
1240 },
1241+ "HAMSAT (VO-52)":
1242+ {
1243+ "comms": [
1244+ {
1245+ "description": "Beacon",
1246+ "frequency": 145.86,
1247+ "modulation": "CW"
1248+ }],
1249+ "groups": ["amateur"],
1250+ "orbitColor": [0, 0.5, 0.5],
1251+ "orbitVisible": false,
1252+ "tle1": "1 28650U 05017B 10302.91749704 .00000656 00000-0 88911-4 0 6334",
1253+ "tle2": "2 28650 97.6756 350.9771 0026685 193.4845 166.5629 14.81839806296646",
1254+ "visible": true
1255+ },
1256 "HST":
1257 {
1258 "comms": [],
1259- "tle1": "1 20580U 90037B 10009.85735511 .00000291 00000-0 94489-5 0 5019",
1260- "tle2": "2 20580 28.4685 193.3983 0003260 317.8077 42.2266 15.00875675880934",
1261- "draw_orbit": false,
1262+ "groups": [],
1263+ "orbitColor": [0, 0.5, 0.5],
1264+ "orbitVisible": true,
1265+ "tle1": "1 20580U 90037B 10300.09759300 .00000718 00000-0 41998-4 0 6685",
1266+ "tle2": "2 20580 28.4686 98.6536 0003467 162.6448 197.4276 15.01074509924596",
1267 "visible": true
1268 },
1269- "ITAMSAT (IO-26)":
1270- {
1271- "description": "Amateur satellite",
1272- "groups": ["amateur", "non-operational"],
1273- "tle1": "1 22826U 93061D 09080.85350470 -.00000006 00000-0 14293-4 0 9268",
1274- "tle2": "2 22826 98.4204 37.8560 0009197 152.3361 207.8319 14.29512039807534",
1275- "draw_orbit": false,
1276- "visible": false
1277- },
1278 "IRIDIUM 10":
1279 {
1280- "description": "Iridium 10",
1281+ "comms": [],
1282 "groups": ["iridium", "communications"],
1283- "tle1": "1 24839U 97030D 09080.75603299 .00000198 00000-0 63641-4 0 5665",
1284- "tle2": "2 24839 86.4032 167.9110 0002345 85.8737 274.2720 14.34216304615619",
1285- "draw_orbit": false,
1286+ "orbitColor": [0, 0.5, 0.5],
1287+ "orbitVisible": false,
1288+ "tle1": "1 24839U 97030D 10302.43943163 -.00000054 00000-0 -26303-4 0 2592",
1289+ "tle2": "2 24839 86.3915 282.7041 0002454 79.7931 280.3543 14.34215799699706",
1290 "visible": false
1291 },
1292 "IRIDIUM 11":
1293 {
1294- "description": "Iridium 11",
1295+ "comms": [],
1296 "groups": ["iridium", "communications"],
1297- "tle1": "1 25578U 98074B 09080.96418723 .00000021 00000-0 -64075-8 0 5598",
1298- "tle2": "2 25578 86.5093 73.3425 0002585 79.6314 280.5189 14.54937843544862",
1299- "draw_orbit": false,
1300+ "orbitColor": [0, 0.5, 0.5],
1301+ "orbitVisible": false,
1302+ "tle1": "1 25578U 98074B 10302.20874413 .00000235 00000-0 49715-4 0 2746",
1303+ "tle2": "2 25578 86.5178 188.3594 0002382 77.0752 283.0741 14.54951739630108",
1304 "visible": false
1305 },
1306 "IRIDIUM 12":
1307 {
1308- "description": "Iridium 12",
1309+ "comms": [],
1310 "groups": ["iridium", "communications"],
1311- "tle1": "1 24837U 97030B 09080.76871839 .00000162 00000-0 50797-4 0 5682",
1312- "tle2": "2 24837 86.4018 167.9072 0002316 83.3237 276.8222 14.34216073615601",
1313- "draw_orbit": false,
1314+ "orbitColor": [0, 0.5, 0.5],
1315+ "orbitVisible": false,
1316+ "tle1": "1 24837U 97030B 10302.45211550 -.00000034 00000-0 -19303-4 0 2589",
1317+ "tle2": "2 24837 86.3907 282.7044 0002520 83.3013 276.8483 14.34216146699692",
1318 "visible": false
1319 },
1320 "IRIDIUM 13":
1321 {
1322- "description": "Iridium 13",
1323+ "comms": [],
1324 "groups": ["iridium", "communications"],
1325- "tle1": "1 24840U 97030E 09080.77506041 .00000178 00000-0 56458-4 0 5246",
1326- "tle2": "2 24840 86.4035 167.9756 0002404 88.5081 271.6386 14.34216342615608",
1327- "draw_orbit": false,
1328+ "orbitColor": [0, 0.5, 0.5],
1329+ "orbitVisible": false,
1330+ "tle1": "1 24840U 97030E 10302.03985063 -.00000016 00000-0 -12770-4 0 2158",
1331+ "tle2": "2 24840 86.3914 282.9575 0002544 78.8119 281.3347 14.34216042699636",
1332 "visible": false
1333 },
1334 "IRIDIUM 14":
1335 {
1336- "description": "Iridium 14",
1337+ "comms": [],
1338 "groups": ["iridium", "communications"],
1339- "tle1": "1 25777U 99032A 09080.96055310 .00000130 00000-0 25188-4 0 5243",
1340- "tle2": "2 25777 86.5126 41.6339 0001855 82.9817 277.1596 14.54935495519245",
1341- "draw_orbit": false,
1342+ "orbitColor": [0, 0.5, 0.5],
1343+ "orbitVisible": false,
1344+ "tle1": "1 25777U 99032A 10302.48008944 .00000146 00000-0 28886-4 0 2433",
1345+ "tle2": "2 25777 86.5148 156.5697 0002311 77.7568 282.3899 14.54947163604520",
1346 "visible": false
1347 },
1348 "IRIDIUM 15":
1349 {
1350- "description": "Iridium 15",
1351+ "comms": [],
1352 "groups": ["iridium", "communications"],
1353- "tle1": "1 24869U 97034A 09080.83555834 .00000127 00000-0 38404-4 0 5876",
1354- "tle2": "2 24869 86.3996 199.4843 0002242 82.3271 277.8172 14.34217422612589",
1355- "draw_orbit": false,
1356+ "orbitColor": [0, 0.5, 0.5],
1357+ "orbitVisible": false,
1358+ "tle1": "1 24869U 97034A 10302.44918363 .00000023 00000-0 10763-5 0 2884",
1359+ "tle2": "2 24869 86.3927 314.4115 0002436 85.8461 274.3024 14.34219151696668",
1360 "visible": false
1361 },
1362 "IRIDIUM 16":
1363 {
1364- "description": "Iridium 16",
1365+ "comms": [],
1366 "groups": ["iridium", "communications"],
1367- "tle1": "1 24841U 97030F 09080.74756006 .00000103 00000-0 28979-4 0 5472",
1368- "tle2": "2 24841 86.4115 168.5066 0004087 67.5298 292.6324 14.35274480615732",
1369- "draw_orbit": false,
1370+ "orbitColor": [0, 0.5, 0.5],
1371+ "orbitVisible": false,
1372+ "tle1": "1 24841U 97030F 10302.32998889 .00000099 00000-0 27643-4 0 2548",
1373+ "tle2": "2 24841 86.3992 283.4555 0001044 29.4991 330.6263 14.35369661699879",
1374 "visible": false
1375 },
1376 "IRIDIUM 17":
1377 {
1378- "description": "Iridium 17",
1379+ "comms": [],
1380 "groups": ["iridium", "communications"],
1381- "tle1": "1 24870U 97034B 09080.86574228 .00000094 00000-0 26348-4 0 5551",
1382- "tle2": "2 24870 86.3997 199.3860 0002450 74.3578 285.7893 14.34424293612609",
1383- "draw_orbit": false,
1384+ "orbitColor": [0, 0.5, 0.5],
1385+ "orbitVisible": false,
1386+ "tle1": "1 24870U 97034B 10302.44785765 .00000152 00000-0 47020-4 0 2501",
1387+ "tle2": "2 24870 86.3934 314.2279 0002200 75.6090 284.5351 14.34512967696691",
1388 "visible": false
1389 },
1390 "IRIDIUM 18":
1391 {
1392- "description": "Iridium 18",
1393+ "comms": [],
1394 "groups": ["iridium", "communications"],
1395- "tle1": "1 24872U 97034D 09080.86727066 .00000184 00000-0 58625-4 0 5567",
1396- "tle2": "2 24872 86.4003 199.6099 0002454 81.7604 278.3867 14.34217527612589",
1397- "draw_orbit": false,
1398+ "orbitColor": [0, 0.5, 0.5],
1399+ "orbitVisible": false,
1400+ "tle1": "1 24872U 97034D 10302.48089559 -.00000073 00000-0 -33029-4 0 2457",
1401+ "tle2": "2 24872 86.3930 314.5578 0002362 79.2199 280.9253 14.34218493696668",
1402 "visible": false
1403 },
1404 "IRIDIUM 19":
1405 {
1406- "description": "Iridium 19",
1407+ "comms": [],
1408 "groups": ["iridium", "communications"],
1409- "tle1": "1 24965U 97056A 09080.72718535 .00000100 00000-0 28631-4 0 5236",
1410- "tle2": "2 24965 86.3996 136.4806 0002460 90.2603 269.8873 14.34219384601200",
1411- "draw_orbit": false,
1412+ "orbitColor": [0, 0.5, 0.5],
1413+ "orbitVisible": false,
1414+ "tle1": "1 24965U 97056A 10302.48042759 -.00000170 00000-0 -67935-4 0 2119",
1415+ "tle2": "2 24965 86.3936 251.1892 0002396 82.1801 277.9615 14.34217453685304",
1416 "visible": false
1417 },
1418 "IRIDIUM 2":
1419 {
1420- "description": "Iridium 2",
1421+ "comms": [],
1422 "groups": ["iridium", "communications"],
1423- "tle1": "1 25527U 98066A 09080.75555857 .00000044 00000-0 94123-6 0 8457",
1424- "tle2": "2 25527 85.5654 330.3309 0011200 129.4966 230.7244 14.97948645565148",
1425- "draw_orbit": false,
1426+ "orbitColor": [0, 0.5, 0.5],
1427+ "orbitVisible": false,
1428+ "tle1": "1 25527U 98066A 10302.18855663 .00001449 00000-0 11841-3 0 6137",
1429+ "tle2": "2 25527 85.5643 356.3803 0008561 194.3859 165.7105 14.98530774652940",
1430 "visible": false
1431 },
1432 "IRIDIUM 20":
1433 {
1434- "description": "Iridium 20",
1435+ "comms": [],
1436 "groups": ["iridium", "communications"],
1437- "tle1": "1 25577U 98074A 09080.98033202 -.00000021 00000-0 -14422-4 0 3714",
1438- "tle2": "2 25577 86.3904 73.1381 0002452 79.1409 281.0061 14.34214985537121",
1439- "draw_orbit": false,
1440+ "orbitColor": [0, 0.5, 0.5],
1441+ "orbitVisible": false,
1442+ "tle1": "1 25577U 98074A 10302.45455625 -.00000356 00000-0 -13403-3 0 515",
1443+ "tle2": "2 25577 86.3993 188.0047 0002316 80.9632 279.1859 14.34214873621180",
1444 "visible": false
1445 },
1446 "IRIDIUM 21":
1447 {
1448- "description": "Iridium 21",
1449+ "comms": [],
1450 "groups": ["iridium", "communications"],
1451- "tle1": "1 25778U 99032B 09080.93260961 .00000088 00000-0 24407-4 0 4289",
1452- "tle2": "2 25778 86.3940 41.6568 0001858 135.0959 225.0387 14.34213303516794",
1453- "draw_orbit": false,
1454+ "orbitColor": [0, 0.5, 0.5],
1455+ "orbitVisible": false,
1456+ "tle1": "1 25778U 99032B 10302.33691817 .00000049 00000-0 10503-4 0 1220",
1457+ "tle2": "2 25778 86.3965 156.6380 0004307 89.0961 271.0723 14.34223248600847",
1458 "visible": false
1459 },
1460 "IRIDIUM 22":
1461 {
1462- "description": "Iridium 22",
1463+ "comms": [],
1464 "groups": ["iridium", "communications"],
1465- "tle1": "1 24907U 97043E 09080.93593228 .00000038 00000-0 64008-5 0 5443",
1466- "tle2": "2 24907 86.3913 73.5164 0002428 76.7490 283.3976 14.34215296606512",
1467- "draw_orbit": false,
1468+ "orbitColor": [0, 0.5, 0.5],
1469+ "orbitVisible": false,
1470+ "tle1": "1 24907U 97043E 10302.41015582 .00000194 00000-0 62290-4 0 2289",
1471+ "tle2": "2 24907 86.4005 188.4514 0002322 81.4713 278.6750 14.34216952690570",
1472 "visible": false
1473 },
1474 "IRIDIUM 23":
1475 {
1476- "description": "Iridium 23",
1477+ "comms": [],
1478 "groups": ["iridium", "communications"],
1479- "tle1": "1 24906U 97043D 09080.94227688 .00000036 00000-0 58894-5 0 5744",
1480- "tle2": "2 24906 86.3894 73.1318 0002472 82.1303 278.0178 14.34215338606511",
1481- "draw_orbit": false,
1482+ "orbitColor": [0, 0.5, 0.5],
1483+ "orbitVisible": false,
1484+ "tle1": "1 24906U 97043D 10302.34671955 .00000184 00000-0 58741-4 0 2603",
1485+ "tle2": "2 24906 86.3995 188.0184 0002288 79.4322 280.7136 14.34218609690561",
1486 "visible": false
1487 },
1488 "IRIDIUM 24":
1489 {
1490- "description": "Iridium 24",
1491+ "comms": [],
1492 "groups": ["iridium", "communications"],
1493- "tle1": "1 25105U 97082B 09080.88485856 .00000094 00000-0 24467-4 0 1226",
1494- "tle2": "2 25105 86.3868 64.1686 0012063 143.9347 216.2672 14.38254916590102",
1495- "draw_orbit": false,
1496+ "orbitColor": [0, 0.5, 0.5],
1497+ "orbitVisible": false,
1498+ "tle1": "1 25105U 97082B 10302.15478198 .00000179 00000-0 52025-4 0 7632",
1499+ "tle2": "2 25105 86.3965 177.2911 0013505 38.5943 321.6212 14.38367556674378",
1500 "visible": false
1501 },
1502 "IRIDIUM 25":
1503 {
1504- "description": "Iridium 25",
1505+ "comms": [],
1506 "groups": ["iridium", "communications"],
1507- "tle1": "1 24904U 97043B 09080.95495998 .00000045 00000-0 90546-5 0 5564",
1508- "tle2": "2 24904 86.3902 73.1904 0002447 79.4878 280.6605 14.34215301606501",
1509- "draw_orbit": false,
1510+ "orbitColor": [0, 0.5, 0.5],
1511+ "orbitVisible": false,
1512+ "tle1": "1 24904U 97043B 10302.28964716 .00000170 00000-0 53659-4 0 2422",
1513+ "tle2": "2 24904 86.3984 188.1163 0002258 83.2194 276.9270 14.34216573690544",
1514 "visible": false
1515 },
1516 "IRIDIUM 26":
1517 {
1518- "description": "Iridium 26",
1519+ "comms": [],
1520 "groups": ["iridium", "communications"],
1521- "tle1": "1 24903U 97043A 09080.92325319 .00000061 00000-0 14603-4 0 6635",
1522- "tle2": "2 24903 86.3905 73.2530 0002433 79.3191 280.8286 14.34215067606530",
1523- "draw_orbit": false,
1524+ "orbitColor": [0, 0.5, 0.5],
1525+ "orbitVisible": false,
1526+ "tle1": "1 24903U 97043A 10302.25793540 .00000230 00000-0 74992-4 0 3514",
1527+ "tle2": "2 24903 86.3990 188.1884 0002375 80.7176 279.4326 14.34216790690576",
1528 "visible": false
1529 },
1530 "IRIDIUM 28":
1531 {
1532- "description": "Iridium 28",
1533+ "comms": [],
1534 "groups": ["iridium", "communications"],
1535- "tle1": "1 24948U 97051E 09080.72766345 -.00000012 00000-0 -11441-4 0 3800",
1536- "tle2": "2 24948 86.3924 105.0922 0002660 74.1790 285.9694 14.34248276603049",
1537- "draw_orbit": false,
1538+ "orbitColor": [0, 0.5, 0.5],
1539+ "orbitVisible": false,
1540+ "tle1": "1 24948U 97051E 10302.31147104 .00000193 00000-0 61827-4 0 875",
1541+ "tle2": "2 24948 86.3981 219.8402 0001887 80.4825 279.6580 14.34342107687121",
1542 "visible": false
1543 },
1544 "IRIDIUM 29":
1545 {
1546- "description": "Iridium 29",
1547+ "comms": [],
1548 "groups": ["iridium", "communications"],
1549- "tle1": "1 24944U 97051A 09080.73641357 -.00000048 00000-0 -24213-4 0 5196",
1550- "tle2": "2 24944 86.3928 104.9291 0002412 84.1606 275.9868 14.34217590603056",
1551- "draw_orbit": false,
1552+ "orbitColor": [0, 0.5, 0.5],
1553+ "orbitVisible": false,
1554+ "tle1": "1 24944U 97051A 10302.28038451 -.00001049 00000-0 -38194-3 0 1943",
1555+ "tle2": "2 24944 86.3980 219.7025 0002451 79.1853 280.9634 14.34210681687126",
1556 "visible": false
1557 },
1558 "IRIDIUM 3":
1559 {
1560- "description": "Iridium 3",
1561+ "comms": [],
1562 "groups": ["iridium", "communications"],
1563- "tle1": "1 25431U 98048A 09080.92959394 .00000063 00000-0 15480-4 0 4481",
1564- "tle2": "2 25431 86.3903 73.3431 0002965 84.2311 275.9229 14.34215319554292",
1565- "draw_orbit": false,
1566+ "orbitColor": [0, 0.5, 0.5],
1567+ "orbitVisible": false,
1568+ "tle1": "1 25431U 98048A 10302.47358655 -.00000864 00000-0 -31556-3 0 1347",
1569+ "tle2": "2 25431 86.3993 188.2078 0002551 69.4458 290.7084 14.34213017638360",
1570 "visible": false
1571 },
1572 "IRIDIUM 30":
1573 {
1574- "description": "Iridium 30",
1575+ "comms": [],
1576 "groups": ["iridium", "communications"],
1577- "tle1": "1 24949U 97051F 09080.60956429 -.00000118 00000-0 -49226-4 0 5599",
1578- "tle2": "2 24949 86.3918 105.0480 0002502 87.1679 272.9801 14.34216956603032",
1579- "draw_orbit": false,
1580+ "orbitColor": [0, 0.5, 0.5],
1581+ "orbitVisible": false,
1582+ "tle1": "1 24949U 97051F 10302.29307003 -.00000999 00000-0 -36397-3 0 2533",
1583+ "tle2": "2 24949 86.3980 219.7750 0002434 81.8586 278.2933 14.34210204687123",
1584 "visible": false
1585 },
1586 "IRIDIUM 31":
1587 {
1588- "description": "Iridium 31",
1589+ "comms": [],
1590 "groups": ["iridium", "communications"],
1591- "tle1": "1 24950U 97051G 09080.95206580 .00000006 00000-0 -50967-5 0 5472",
1592- "tle2": "2 24950 86.3926 104.8960 0002452 82.6436 277.5040 14.34217229603094",
1593- "draw_orbit": false,
1594+ "orbitColor": [0, 0.5, 0.5],
1595+ "orbitVisible": false,
1596+ "tle1": "1 24950U 97051G 10302.42626626 -.00000970 00000-0 -35370-3 0 2231",
1597+ "tle2": "2 24950 86.3980 219.7162 0002499 81.6317 278.5241 14.34209730687153",
1598 "visible": false
1599 },
1600 "IRIDIUM 32":
1601 {
1602- "description": "Iridium 32",
1603+ "comms": [],
1604 "groups": ["iridium", "communications"],
1605- "tle1": "1 24945U 97051B 09080.82521335 -.00000034 00000-0 -19243-4 0 5260",
1606- "tle2": "2 24945 86.3920 104.9062 0002420 86.0555 274.0934 14.34217114603087",
1607- "draw_orbit": false,
1608+ "orbitColor": [0, 0.5, 0.5],
1609+ "orbitVisible": false,
1610+ "tle1": "1 24945U 97051B 10302.29941282 -.00001134 00000-0 -41219-3 0 2128",
1611+ "tle2": "2 24945 86.3972 219.7123 0002404 79.0323 281.1177 14.34209948687147",
1612 "visible": false
1613 },
1614 "IRIDIUM 33":
1615 {
1616- "description": "Iridium 33",
1617+ "comms": [],
1618 "groups": ["iridium", "communications"],
1619- "tle1": "1 24946U 97051C 09079.48224177 .00000050 00000-0 11256-4 0 5548",
1620- "tle2": "2 24946 86.3829 105.5030 0007498 339.0307 21.0569 14.32470536602871",
1621- "draw_orbit": false,
1622+ "orbitColor": [0, 0.5, 0.5],
1623+ "orbitVisible": false,
1624+ "tle1": "1 24946U 97051C 10302.28570283 .00000162 00000-0 52446-4 0 3312",
1625+ "tle2": "2 24946 86.3894 219.8473 0006861 195.6955 164.4038 14.32545693687043",
1626 "visible": false
1627 },
1628 "IRIDIUM 34":
1629 {
1630- "description": "Iridium 34",
1631+ "comms": [],
1632 "groups": ["iridium", "communications"],
1633- "tle1": "1 24969U 97056E 09080.66375773 .00000143 00000-0 44096-4 0 5214",
1634- "tle2": "2 24969 86.3985 136.5744 0002407 86.3781 273.7691 14.34219875601171",
1635- "draw_orbit": false,
1636+ "orbitColor": [0, 0.5, 0.5],
1637+ "orbitVisible": false,
1638+ "tle1": "1 24969U 97056E 10302.34723301 -.00000133 00000-0 -54522-4 0 2057",
1639+ "tle2": "2 24969 86.3934 251.3218 0002432 78.2832 281.8579 14.34217770685261",
1640 "visible": false
1641 },
1642 "IRIDIUM 35":
1643 {
1644- "description": "Iridium 35",
1645+ "comms": [],
1646 "groups": ["iridium", "communications"],
1647- "tle1": "1 24966U 97056B 09080.73987018 .00000085 00000-0 23358-4 0 5695",
1648- "tle2": "2 24966 86.3976 136.5004 0002426 88.2177 271.9296 14.34219553601183",
1649- "draw_orbit": false,
1650+ "orbitColor": [0, 0.5, 0.5],
1651+ "orbitVisible": false,
1652+ "tle1": "1 24966U 97056B 10302.42334758 .00000109 00000-0 31995-4 0 2541",
1653+ "tle2": "2 24966 86.3938 251.2332 0002438 81.9871 278.1627 14.34213324685273",
1654 "visible": false
1655 },
1656 "IRIDIUM 36":
1657 {
1658- "description": "Iridium 36",
1659+ "comms": [],
1660 "groups": ["iridium", "communications"],
1661- "tle1": "1 24967U 97056C 09080.65710171 -.00000019 00000-0 -13689-4 0 4998",
1662- "tle2": "2 24967 86.3983 136.6024 0002458 82.4670 277.6800 14.34287200601317",
1663- "draw_orbit": false,
1664+ "orbitColor": [0, 0.5, 0.5],
1665+ "orbitVisible": false,
1666+ "tle1": "1 24967U 97056C 10302.29992667 .00000189 00000-0 60259-4 0 2000",
1667+ "tle2": "2 24967 86.3969 251.3598 0002312 86.1577 273.9897 14.34360383685409",
1668 "visible": false
1669 },
1670 "IRIDIUM 37":
1671 {
1672- "description": "Iridium 37",
1673+ "comms": [],
1674 "groups": ["iridium", "communications"],
1675- "tle1": "1 24968U 97056D 09080.71450005 .00000098 00000-0 28096-4 0 5346",
1676- "tle2": "2 24968 86.3999 136.6077 0002361 87.7484 272.3982 14.34219477601186",
1677- "draw_orbit": false,
1678+ "orbitColor": [0, 0.5, 0.5],
1679+ "orbitVisible": false,
1680+ "tle1": "1 24968U 97056D 10302.39797457 .00000188 00000-0 60233-4 0 2227",
1681+ "tle2": "2 24968 86.3938 251.3581 0002470 83.6124 276.5368 14.34214035685272",
1682 "visible": false
1683 },
1684 "IRIDIUM 38":
1685 {
1686- "description": "Iridium 38",
1687+ "comms": [],
1688 "groups": ["iridium", "communications"],
1689- "tle1": "1 25043U 97069E 09080.84584675 .00000189 00000-0 59905-4 0 5412",
1690- "tle2": "2 25043 86.3999 198.9627 0003100 65.2494 294.9020 14.34689502595081",
1691- "draw_orbit": false,
1692+ "orbitColor": [0, 0.5, 0.5],
1693+ "orbitVisible": false,
1694+ "tle1": "1 25043U 97069E 10302.32262653 .00000142 00000-0 43326-4 0 2329",
1695+ "tle2": "2 25043 86.3928 313.7313 0001585 70.6270 289.5099 14.34770840679174",
1696 "visible": false
1697 },
1698 "IRIDIUM 39":
1699 {
1700- "description": "Iridium 39",
1701+ "comms": [],
1702 "groups": ["iridium", "communications"],
1703- "tle1": "1 25042U 97069D 09080.81653387 .00000186 00000-0 59194-4 0 5120",
1704- "tle2": "2 25042 86.4012 199.6847 0002432 78.6189 281.5268 14.34217041594973",
1705- "draw_orbit": false,
1706+ "orbitColor": [0, 0.5, 0.5],
1707+ "orbitVisible": false,
1708+ "tle1": "1 25042U 97069D 10302.36038753 -.00000070 00000-0 -31996-4 0 2078",
1709+ "tle2": "2 25042 86.3938 314.7043 0002194 81.8792 278.2643 14.34217507679047",
1710 "visible": false
1711 },
1712 "IRIDIUM 4":
1713 {
1714- "description": "Iridium 4",
1715+ "comms": [],
1716 "groups": ["iridium", "communications"],
1717- "tle1": "1 24796U 97020E 09080.70815717 .00000117 00000-0 34873-4 0 5689",
1718- "tle2": "2 24796 86.3992 136.4182 0002479 84.7507 275.3970 14.34219551621866",
1719- "draw_orbit": false,
1720+ "orbitColor": [0, 0.5, 0.5],
1721+ "orbitVisible": false,
1722+ "tle1": "1 24796U 97020E 10302.46140392 .00000187 00000-0 59781-4 0 2523",
1723+ "tle2": "2 24796 86.3935 251.1025 0002496 79.1283 281.0202 14.34219366705962",
1724 "visible": false
1725 },
1726 "IRIDIUM 40":
1727 {
1728- "description": "Iridium 40",
1729+ "comms": [],
1730 "groups": ["iridium", "communications"],
1731- "tle1": "1 25041U 97069C 09080.87997502 .00000177 00000-0 56017-4 0 5384",
1732- "tle2": "2 25041 86.4003 199.5053 0002277 80.7998 279.3453 14.34217086595004",
1733- "draw_orbit": false,
1734+ "orbitColor": [0, 0.5, 0.5],
1735+ "orbitVisible": false,
1736+ "tle1": "1 25041U 97069C 10302.42381763 .00000024 00000-0 13707-5 0 2298",
1737+ "tle2": "2 25041 86.3934 314.4638 0002417 87.2578 272.8909 14.34218964679075",
1738 "visible": false
1739 },
1740 "IRIDIUM 41":
1741 {
1742- "description": "Iridium 41",
1743+ "comms": [],
1744 "groups": ["iridium", "communications"],
1745- "tle1": "1 25040U 97069B 09080.85461500 .00000190 00000-0 60760-4 0 5122",
1746- "tle2": "2 25040 86.4003 199.5463 0002248 80.0849 280.0599 14.34216855594983",
1747- "draw_orbit": false,
1748+ "orbitColor": [0, 0.5, 0.5],
1749+ "orbitVisible": false,
1750+ "tle1": "1 25040U 97069B 10302.46820898 -.00000017 00000-0 -13068-4 0 2033",
1751+ "tle2": "2 25040 86.3930 314.4833 0002293 76.2255 283.9202 14.34219070679066",
1752 "visible": false
1753 },
1754 "IRIDIUM 42":
1755 {
1756- "description": "Iridium 42",
1757+ "comms": [],
1758 "groups": ["iridium", "communications"],
1759- "tle1": "1 25077U 97077A 09080.94340195 .00000110 00000-0 32067-4 0 5274",
1760- "tle2": "2 25077 86.3994 199.5528 0002240 84.0668 276.0780 14.34216755590856",
1761- "draw_orbit": false,
1762+ "orbitColor": [0, 0.5, 0.5],
1763+ "orbitVisible": false,
1764+ "tle1": "1 25077U 97077A 10302.48724357 -.00000026 00000-0 -16296-4 0 2246",
1765+ "tle2": "2 25077 86.3934 314.5230 0002396 84.7575 275.3903 14.34218745674926",
1766 "visible": false
1767 },
1768 "IRIDIUM 43":
1769 {
1770- "description": "Iridium 43",
1771+ "comms": [],
1772 "groups": ["iridium", "communications"],
1773- "tle1": "1 25039U 97069A 09080.86094029 .00000205 00000-0 66131-4 0 5236",
1774- "tle2": "2 25039 86.4004 199.6307 0002233 83.8211 276.3235 14.34217273594988",
1775- "draw_orbit": false,
1776+ "orbitColor": [0, 0.5, 0.5],
1777+ "orbitVisible": false,
1778+ "tle1": "1 25039U 97069A 10302.47455667 -.00000037 00000-0 -20426-4 0 2140",
1779+ "tle2": "2 25039 86.3935 314.5832 0002440 84.0731 276.0756 14.34218805679061",
1780 "visible": false
1781 },
1782 "IRIDIUM 44":
1783 {
1784- "description": "Iridium 44",
1785+ "comms": [],
1786 "groups": ["iridium", "communications"],
1787- "tle1": "1 25078U 97077B 09080.71935762 .00000118 00000-0 33304-4 0 717",
1788- "tle2": "2 25078 86.4006 195.3112 0003942 66.7305 293.4317 14.36538090591378",
1789- "draw_orbit": false,
1790+ "orbitColor": [0, 0.5, 0.5],
1791+ "orbitVisible": false,
1792+ "tle1": "1 25078U 97077B 10302.40901862 .00000156 00000-0 46414-4 0 7069",
1793+ "tle2": "2 25078 86.3947 309.2622 0001340 21.2423 338.8824 14.36659588675602",
1794 "visible": false
1795 },
1796 "IRIDIUM 45":
1797 {
1798- "description": "Iridium 45",
1799+ "comms": [],
1800 "groups": ["iridium", "communications"],
1801- "tle1": "1 25104U 97082A 09080.96130432 -.00000044 00000-0 -22820-4 0 4750",
1802- "tle2": "2 25104 86.3894 73.2144 0002470 84.6910 275.4577 14.34215008589056",
1803- "draw_orbit": false,
1804+ "orbitColor": [0, 0.5, 0.5],
1805+ "orbitVisible": false,
1806+ "tle1": "1 25104U 97082A 10302.29599239 -.00000276 00000-0 -10560-3 0 1569",
1807+ "tle2": "2 25104 86.3986 188.1235 0002337 79.0031 281.1493 14.34214945673097",
1808 "visible": false
1809 },
1810 "IRIDIUM 46":
1811 {
1812- "description": "Iridium 46",
1813+ "comms": [],
1814 "groups": ["iridium", "communications"],
1815- "tle1": "1 24905U 97043C 09080.96764942 .00000030 00000-0 35050-5 0 5691",
1816- "tle2": "2 24905 86.3912 73.4590 0002447 80.6193 279.5279 14.34215070606519",
1817- "draw_orbit": false,
1818+ "orbitColor": [0, 0.5, 0.5],
1819+ "orbitVisible": false,
1820+ "tle1": "1 24905U 97043C 10302.30233178 .00000171 00000-0 54024-4 0 2650",
1821+ "tle2": "2 24905 86.3993 188.4382 0002297 80.8924 279.2531 14.34216830690551",
1822 "visible": false
1823 },
1824 "IRIDIUM 47":
1825 {
1826- "description": "Iridium 47",
1827+ "comms": [],
1828 "groups": ["iridium", "communications"],
1829- "tle1": "1 25106U 97082C 09080.97398853 .00000111 00000-0 32561-4 0 4695",
1830- "tle2": "2 25106 86.3898 73.1510 0002484 79.6182 280.5287 14.34215564589050",
1831- "draw_orbit": false,
1832+ "orbitColor": [0, 0.5, 0.5],
1833+ "orbitVisible": false,
1834+ "tle1": "1 25106U 97082C 10302.23890629 .00000316 00000-0 10583-3 0 1515",
1835+ "tle2": "2 25106 86.3995 188.0871 0002318 79.6913 280.4540 14.34217170673085",
1836 "visible": false
1837 },
1838 "IRIDIUM 49":
1839 {
1840- "description": "Iridium 49",
1841+ "comms": [],
1842 "groups": ["iridium", "communications"],
1843- "tle1": "1 25108U 97082E 09080.98667654 .00000065 00000-0 16281-4 0 4875",
1844- "tle2": "2 25108 86.3903 73.1642 0002478 78.6020 281.5453 14.34215226589060",
1845- "draw_orbit": false,
1846+ "orbitColor": [0, 0.5, 0.5],
1847+ "orbitVisible": false,
1848+ "tle1": "1 25108U 97082E 10302.25159412 -.00000913 00000-0 -33305-3 0 1700",
1849+ "tle2": "2 25108 86.3987 188.1175 0002430 84.5003 275.6493 14.34213325673098",
1850 "visible": false
1851 },
1852 "IRIDIUM 5":
1853 {
1854- "description": "Iridium 5",
1855+ "comms": [],
1856 "groups": ["iridium", "communications"],
1857- "tle1": "1 24795U 97020D 09080.75255433 .00000063 00000-0 15294-4 0 6795",
1858- "tle2": "2 24795 86.3980 136.7732 0002993 61.1224 299.0272 14.34219542621938",
1859- "draw_orbit": false,
1860+ "orbitColor": [0, 0.5, 0.5],
1861+ "orbitVisible": false,
1862+ "tle1": "1 24795U 97020D 10302.43610332 .00000176 00000-0 55623-4 0 3963",
1863+ "tle2": "2 24795 86.3932 251.5005 0001075 80.9871 279.1456 14.34218113706021",
1864 "visible": false
1865 },
1866 "IRIDIUM 50":
1867 {
1868- "description": "Iridium 50",
1869+ "comms": [],
1870 "groups": ["iridium", "communications"],
1871- "tle1": "1 25172U 98010D 09080.79408766 .00000199 00000-0 63929-4 0 5098",
1872- "tle2": "2 25172 86.4035 168.0271 0002291 84.7609 275.3846 14.34216501580429",
1873- "draw_orbit": false,
1874+ "orbitColor": [0, 0.5, 0.5],
1875+ "orbitVisible": false,
1876+ "tle1": "1 25172U 98010D 10302.47748662 .00000026 00000-0 21580-5 0 2021",
1877+ "tle2": "2 25172 86.3919 282.8516 0002533 82.0417 278.1076 14.34216345664518",
1878 "visible": false
1879 },
1880 "IRIDIUM 51":
1881 {
1882- "description": "Iridium 51",
1883+ "comms": [],
1884 "groups": ["iridium", "communications"],
1885- "tle1": "1 25262U 98018A 09080.96019622 .00000083 00000-0 18843-4 0 6047",
1886- "tle2": "2 25262 86.4521 136.5459 0002506 88.2627 271.8861 14.42963543578794",
1887- "draw_orbit": false,
1888+ "orbitColor": [0, 0.5, 0.5],
1889+ "orbitVisible": false,
1890+ "tle1": "1 25262U 98018A 10302.35490646 .00000226 00000-0 61619-4 0 2996",
1891+ "tle2": "2 25262 86.4454 251.4771 0002524 78.3193 281.8299 14.42949443663357",
1892 "visible": false
1893 },
1894 "IRIDIUM 52":
1895 {
1896- "description": "Iridium 52",
1897+ "comms": [],
1898 "groups": ["iridium", "communications"],
1899- "tle1": "1 25169U 98010A 09080.73700209 .00000123 00000-0 36961-4 0 2624",
1900- "tle2": "2 25169 86.4038 168.0762 0002354 85.6372 274.5081 14.34216423580436",
1901- "draw_orbit": false,
1902+ "orbitColor": [0, 0.5, 0.5],
1903+ "orbitVisible": false,
1904+ "tle1": "1 25169U 98010A 10302.42039969 -.00000016 00000-0 -12755-4 0 9521",
1905+ "tle2": "2 25169 86.3921 282.9005 0002422 85.7433 274.4051 14.34216469664526",
1906 "visible": false
1907 },
1908 "IRIDIUM 53":
1909 {
1910- "description": "Iridium 53",
1911+ "comms": [],
1912 "groups": ["iridium", "communications"],
1913- "tle1": "1 25173U 98010E 09080.74334661 .00000213 00000-0 68921-4 0 4965",
1914- "tle2": "2 25173 86.4038 168.0584 0002328 85.4274 274.7179 14.34216418580426",
1915- "draw_orbit": false,
1916+ "orbitColor": [0, 0.5, 0.5],
1917+ "orbitVisible": false,
1918+ "tle1": "1 25173U 98010E 10302.35697396 .00000031 00000-0 38551-5 0 1869",
1919+ "tle2": "2 25173 86.3917 282.9102 0002441 83.1301 277.0191 14.34216522664503",
1920 "visible": false
1921 },
1922 "IRIDIUM 54":
1923 {
1924- "description": "Iridium 54",
1925+ "comms": [],
1926 "groups": ["iridium", "communications"],
1927- "tle1": "1 25171U 98010C 09080.83214435 .00000162 00000-0 50776-4 0 4950",
1928- "tle2": "2 25171 86.4034 168.0396 0002357 83.7922 276.3539 14.34216177580592",
1929- "draw_orbit": false,
1930+ "orbitColor": [0, 0.5, 0.5],
1931+ "orbitVisible": false,
1932+ "tle1": "1 25171U 98010C 10302.37600452 .00000023 00000-0 10074-5 0 1777",
1933+ "tle2": "2 25171 86.3924 282.9255 0002443 83.4204 276.7285 14.34216568664662",
1934 "visible": false
1935 },
1936 "IRIDIUM 55":
1937 {
1938- "description": "Iridium 55",
1939+ "comms": [],
1940 "groups": ["iridium", "communications"],
1941- "tle1": "1 25272U 98019A 09080.65396145 -.00000055 00000-0 -26585-4 0 4460",
1942- "tle2": "2 25272 86.3929 104.9099 0002443 82.6744 277.4726 14.34217346574706",
1943- "draw_orbit": false,
1944+ "orbitColor": [0, 0.5, 0.5],
1945+ "orbitVisible": false,
1946+ "tle1": "1 25272U 98019A 10302.19793072 -.00000897 00000-0 -32760-3 0 1336",
1947+ "tle2": "2 25272 86.3977 219.6814 0002333 82.1362 278.0136 14.34210252658778",
1948 "visible": false
1949 },
1950 "IRIDIUM 56":
1951 {
1952- "description": "Iridium 56",
1953+ "comms": [],
1954 "groups": ["iridium", "communications"],
1955- "tle1": "1 25170U 98010B 09080.93996768 .00000090 00000-0 25013-4 0 4042",
1956- "tle2": "2 25170 86.4019 168.0354 0002303 83.3803 276.7656 14.34215986580448",
1957- "draw_orbit": false,
1958+ "orbitColor": [0, 0.5, 0.5],
1959+ "orbitVisible": false,
1960+ "tle1": "1 25170U 98010B 10302.48382465 .00000061 00000-0 14601-4 0 5752",
1961+ "tle2": "2 25170 86.3911 282.9308 0002501 83.7859 276.3627 14.34216745664517",
1962 "visible": false
1963 },
1964 "IRIDIUM 57":
1965 {
1966- "description": "Iridium 57",
1967+ "comms": [],
1968 "groups": ["iridium", "communications"],
1969- "tle1": "1 25273U 98019B 09080.97743384 .00000010 00000-0 -34515-5 0 4842",
1970- "tle2": "2 25273 86.3938 104.9487 0002488 81.4053 278.7428 14.34217528574757",
1971- "draw_orbit": false,
1972+ "orbitColor": [0, 0.5, 0.5],
1973+ "orbitVisible": false,
1974+ "tle1": "1 25273U 98019B 10302.31209892 -.00000700 00000-0 -25712-3 0 1784",
1975+ "tle2": "2 25273 86.3974 219.8333 0002462 79.9008 280.2526 14.34210039658791",
1976 "visible": false
1977 },
1978 "IRIDIUM 58":
1979 {
1980- "description": "Iridium 58",
1981+ "comms": [],
1982 "groups": ["iridium", "communications"],
1983- "tle1": "1 25274U 98019C 09080.56516741 -.00000072 00000-0 -32690-4 0 2919",
1984- "tle2": "2 25274 86.3927 105.2286 0002529 81.2320 278.9159 14.34216858574699",
1985- "draw_orbit": false,
1986+ "orbitColor": [0, 0.5, 0.5],
1987+ "orbitVisible": false,
1988+ "tle1": "1 25274U 98019C 10302.31844124 -.00001117 00000-0 -40608-3 0 9847",
1989+ "tle2": "2 25274 86.3979 219.9559 0002429 76.3961 283.7546 14.34209377658793",
1990 "visible": false
1991 },
1992 "IRIDIUM 59":
1993 {
1994- "description": "Iridium 59",
1995+ "comms": [],
1996 "groups": ["iridium", "communications"],
1997- "tle1": "1 25275U 98019D 09080.92035227 -.00000093 00000-0 -40264-4 0 1373",
1998- "tle2": "2 25275 86.3948 105.0965 0002450 63.6517 296.4931 14.34216674574745",
1999- "draw_orbit": false,
2000+ "orbitColor": [0, 0.5, 0.5],
2001+ "orbitVisible": false,
2002+ "tle1": "1 25275U 98019D 10302.32477943 -.00000216 00000-0 -84076-4 0 8206",
2003+ "tle2": "2 25275 86.3979 219.9368 0002632 62.8247 297.3217 14.34211699658791",
2004 "visible": false
2005 },
2006 "IRIDIUM 6":
2007 {
2008- "description": "Iridium 6",
2009+ "comms": [],
2010 "groups": ["iridium", "communications"],
2011- "tle1": "1 24794U 97020C 09080.68913056 .00000120 00000-0 35767-4 0 3460",
2012- "tle2": "2 24794 86.4005 136.6398 0002655 84.7222 275.4275 14.34219576621845",
2013- "draw_orbit": false,
2014+ "orbitColor": [0, 0.5, 0.5],
2015+ "orbitVisible": false,
2016+ "tle1": "1 24794U 97020C 10302.37260338 -.00000561 00000-0 -20746-3 0 348",
2017+ "tle2": "2 24794 86.3940 251.3880 0002313 72.2933 287.8452 14.34215023705935",
2018 "visible": false
2019 },
2020 "IRIDIUM 60":
2021 {
2022- "description": "Iridium 60",
2023+ "comms": [],
2024 "groups": ["iridium", "communications"],
2025- "tle1": "1 25276U 98019E 09080.57785244 -.00000075 00000-0 -33997-4 0 5140",
2026- "tle2": "2 25276 86.3925 104.9765 0002456 85.4836 274.6635 14.34216941574699",
2027- "draw_orbit": false,
2028+ "orbitColor": [0, 0.5, 0.5],
2029+ "orbitVisible": false,
2030+ "tle1": "1 25276U 98019E 10302.33112759 -.00001105 00000-0 -40191-3 0 2154",
2031+ "tle2": "2 25276 86.3967 219.6497 0002422 83.0292 277.1224 14.34209148658791",
2032 "visible": false
2033 },
2034 "IRIDIUM 61":
2035 {
2036- "description": "Iridium 61",
2037+ "comms": [],
2038 "groups": ["iridium", "communications"],
2039- "tle1": "1 25263U 98018B 09080.65107557 .00000022 00000-0 88117-6 0 4504",
2040- "tle2": "2 25263 86.4005 136.6114 0002427 83.6921 276.4543 14.34219094575509",
2041- "draw_orbit": false,
2042+ "orbitColor": [0, 0.5, 0.5],
2043+ "orbitVisible": false,
2044+ "tle1": "1 25263U 98018B 10302.40433080 .00000170 00000-0 53799-4 0 1438",
2045+ "tle2": "2 25263 86.3929 251.3290 0002455 80.2651 279.8837 14.34219130659605",
2046 "visible": false
2047 },
2048 "IRIDIUM 62":
2049 {
2050- "description": "Iridium 62",
2051+ "comms": [],
2052 "groups": ["iridium", "communications"],
2053- "tle1": "1 25285U 98021A 09080.95798294 .00000157 00000-0 49153-4 0 4806",
2054- "tle2": "2 25285 86.3937 41.6021 0002403 80.9094 279.2370 14.34213398573703",
2055- "draw_orbit": false,
2056+ "orbitColor": [0, 0.5, 0.5],
2057+ "orbitVisible": false,
2058+ "tle1": "1 25285U 98021A 10302.15298377 -.00000004 00000-0 -84603-5 0 1804",
2059+ "tle2": "2 25285 86.3969 156.6694 0002301 83.1958 276.9486 14.34222901657729",
2060 "visible": false
2061 },
2062 "IRIDIUM 63":
2063 {
2064- "description": "Iridium 63",
2065+ "comms": [],
2066 "groups": ["iridium", "communications"],
2067- "tle1": "1 25286U 98021B 09080.96432934 .00000129 00000-0 39109-4 0 4926",
2068- "tle2": "2 25286 86.3940 41.6827 0002432 80.3005 279.8464 14.34213273573702",
2069- "draw_orbit": false,
2070+ "orbitColor": [0, 0.5, 0.5],
2071+ "orbitVisible": false,
2072+ "tle1": "1 25286U 98021B 10302.15932845 .00000016 00000-0 -12485-5 0 1924",
2073+ "tle2": "2 25286 86.3966 156.7634 0002279 84.4971 275.6483 14.34222998657724",
2074 "visible": false
2075 },
2076 "IRIDIUM 64":
2077 {
2078- "description": "Iridium 64",
2079+ "comms": [],
2080 "groups": ["iridium", "communications"],
2081- "tle1": "1 25287U 98021C 09080.97067364 .00000097 00000-0 27550-4 0 4403",
2082- "tle2": "2 25287 86.3941 41.6185 0002444 79.6780 280.4691 14.34213124573687",
2083- "draw_orbit": false,
2084+ "orbitColor": [0, 0.5, 0.5],
2085+ "orbitVisible": false,
2086+ "tle1": "1 25287U 98021C 10302.37497208 -.00000013 00000-0 -11804-4 0 1390",
2087+ "tle2": "2 25287 86.3973 156.5999 0002223 82.2934 277.8513 14.34222953657739",
2088 "visible": false
2089 },
2090 "IRIDIUM 65":
2091 {
2092- "description": "Iridium 65",
2093+ "comms": [],
2094 "groups": ["iridium", "communications"],
2095- "tle1": "1 25288U 98021D 09080.97701561 .00000123 00000-0 36733-4 0 4883",
2096- "tle2": "2 25288 86.3937 41.5700 0002779 77.2145 282.9359 14.34213117573708",
2097- "draw_orbit": false,
2098+ "orbitColor": [0, 0.5, 0.5],
2099+ "orbitVisible": false,
2100+ "tle1": "1 25288U 98021D 10302.45108964 .00000041 00000-0 75363-5 0 1758",
2101+ "tle2": "2 25288 86.3960 156.5139 0002175 70.4712 289.6721 14.34222797657762",
2102 "visible": false
2103 },
2104 "IRIDIUM 66":
2105 {
2106- "description": "Iridium 66",
2107+ "comms": [],
2108 "groups": ["iridium", "communications"],
2109- "tle1": "1 25289U 98021E 09080.91358909 .00000122 00000-0 36428-4 0 4444",
2110- "tle2": "2 25289 86.3935 41.5254 0002463 80.4519 279.6944 14.34213230573699",
2111- "draw_orbit": false,
2112+ "orbitColor": [0, 0.5, 0.5],
2113+ "orbitVisible": false,
2114+ "tle1": "1 25289U 98021E 10302.45742491 .00000101 00000-0 29098-4 0 1275",
2115+ "tle2": "2 25289 86.3965 156.4356 0002328 78.4260 281.7198 14.34223601657760",
2116 "visible": false
2117 },
2118 "IRIDIUM 67":
2119 {
2120- "description": "Iridium 67",
2121+ "comms": [],
2122 "groups": ["iridium", "communications"],
2123- "tle1": "1 25290U 98021F 09080.91993107 .00000097 00000-0 27599-4 0 2674",
2124- "tle2": "2 25290 86.3939 41.6124 0002412 79.5456 280.6007 14.34213091573704",
2125- "draw_orbit": false,
2126+ "orbitColor": [0, 0.5, 0.5],
2127+ "orbitVisible": false,
2128+ "tle1": "1 25290U 98021F 10302.11493475 .00000027 00000-0 27084-5 0 9588",
2129+ "tle2": "2 25290 86.3964 156.6776 0002296 82.7253 277.4198 14.34221866657722",
2130 "visible": false
2131 },
2132 "IRIDIUM 68":
2133 {
2134- "description": "Iridium 68",
2135+ "comms": [],
2136 "groups": ["iridium", "communications"],
2137- "tle1": "1 25291U 98021G 09080.92627825 .00000159 00000-0 49798-4 0 4808",
2138- "tle2": "2 25291 86.3939 41.6734 0002409 78.9035 281.2421 14.34213167573671",
2139- "draw_orbit": false,
2140+ "orbitColor": [0, 0.5, 0.5],
2141+ "orbitVisible": false,
2142+ "tle1": "1 25291U 98021G 10302.19104110 .00000015 00000-0 -17238-5 0 1717",
2143+ "tle2": "2 25291 86.3974 156.7196 0002387 79.0553 281.0905 14.34222948657701",
2144 "visible": false
2145 },
2146 "IRIDIUM 69":
2147 {
2148- "description": "Iridium 69",
2149+ "comms": [],
2150 "groups": ["iridium", "communications"],
2151- "tle1": "1 25319U 98026A 09080.49486789 .00000092 00000-0 24359-4 0 3146",
2152- "tle2": "2 25319 86.3922 69.9726 0004196 68.2945 291.8696 14.37077443570581",
2153- "draw_orbit": false,
2154+ "orbitColor": [0, 0.5, 0.5],
2155+ "orbitVisible": false,
2156+ "tle1": "1 25319U 98026A 10302.17566911 .00000180 00000-0 53713-4 0 02",
2157+ "tle2": "2 25319 86.4028 183.7939 0001585 26.1274 333.9999 14.37186631654843",
2158 "visible": false
2159 },
2160 "IRIDIUM 7":
2161 {
2162- "description": "Iridium 7",
2163+ "comms": [],
2164 "groups": ["iridium", "communications"],
2165- "tle1": "1 24793U 97020B 09080.69547303 .00000099 00000-0 28351-4 0 5488",
2166- "tle2": "2 24793 86.4007 136.6478 0002405 86.1825 273.9642 14.34219478621845",
2167- "draw_orbit": false,
2168+ "orbitColor": [0, 0.5, 0.5],
2169+ "orbitVisible": false,
2170+ "tle1": "1 24793U 97020B 10302.37896456 .00000169 00000-0 53270-4 0 2324",
2171+ "tle2": "2 24793 86.3938 251.4051 0002445 79.7949 280.3533 14.34218822705935",
2172 "visible": false
2173 },
2174 "IRIDIUM 70":
2175 {
2176- "description": "Iridium 70",
2177+ "comms": [],
2178 "groups": ["iridium", "communications"],
2179- "tle1": "1 25342U 98032A 09080.95163750 .00000131 00000-0 39568-4 0 5009",
2180- "tle2": "2 25342 86.3942 41.7657 0002391 79.7340 280.4119 14.34213490567784",
2181- "draw_orbit": false,
2182+ "orbitColor": [0, 0.5, 0.5],
2183+ "orbitVisible": false,
2184+ "tle1": "1 25342U 98032A 10302.35594719 .00000032 00000-0 41991-5 0 1915",
2185+ "tle2": "2 25342 86.3971 156.7792 0002356 75.8803 284.2643 14.34223009651836",
2186 "visible": false
2187 },
2188 "IRIDIUM 71":
2189 {
2190- "description": "Iridium 71",
2191+ "comms": [],
2192 "groups": ["iridium", "communications"],
2193- "tle1": "1 25320U 98026B 09080.50288721 .00000073 00000-0 17612-4 0 528",
2194- "tle2": "2 25320 86.3912 67.4298 0003490 107.5106 252.6473 14.37667721570864",
2195- "draw_orbit": false,
2196+ "orbitColor": [0, 0.5, 0.5],
2197+ "orbitVisible": false,
2198+ "tle1": "1 25320U 98026B 10302.43225917 .00000162 00000-0 47223-4 0 7018",
2199+ "tle2": "2 25320 86.4013 180.8198 0003865 51.6716 308.4824 14.37762905655198",
2200 "visible": false
2201 },
2202 "IRIDIUM 72":
2203 {
2204- "description": "Iridium 72",
2205+ "comms": [],
2206 "groups": ["iridium", "communications"],
2207- "tle1": "1 25343U 98032B 09080.93895920 .00000118 00000-0 35034-4 0 4894",
2208- "tle2": "2 25343 86.3940 41.5784 0002432 76.1741 283.9715 14.34213267567786",
2209- "draw_orbit": false,
2210+ "orbitColor": [0, 0.5, 0.5],
2211+ "orbitVisible": false,
2212+ "tle1": "1 25343U 98032B 10302.34326224 .00000057 00000-0 13368-4 0 1798",
2213+ "tle2": "2 25343 86.3968 156.5552 0002307 83.5073 276.6379 14.34222990651835",
2214 "visible": false
2215 },
2216 "IRIDIUM 73":
2217 {
2218- "description": "Iridium 73",
2219+ "comms": [],
2220 "groups": ["iridium", "communications"],
2221- "tle1": "1 25344U 98032C 09080.78187609 .00000124 00000-0 28464-4 0 3655",
2222- "tle2": "2 25344 86.4423 32.4179 0003011 59.8565 300.2935 14.47114841572085",
2223- "draw_orbit": false,
2224+ "orbitColor": [0, 0.5, 0.5],
2225+ "orbitVisible": false,
2226+ "tle1": "1 25344U 98032C 10302.47566340 .00000207 00000-0 51120-4 0 691",
2227+ "tle2": "2 25344 86.4424 145.3306 0001680 87.8897 272.2497 14.47231492656931",
2228 "visible": false
2229 },
2230 "IRIDIUM 74":
2231 {
2232- "description": "Iridium 74",
2233+ "comms": [],
2234 "groups": ["iridium", "communications"],
2235- "tle1": "1 25345U 98032D 09080.98077926 .00000138 00000-0 35328-4 0 5135",
2236- "tle2": "2 25345 86.4451 41.7016 0002432 79.4303 280.7170 14.42945639568815",
2237- "draw_orbit": false,
2238+ "orbitColor": [0, 0.5, 0.5],
2239+ "orbitVisible": false,
2240+ "tle1": "1 25345U 98032D 10302.16681795 .00000055 00000-0 10378-4 0 2075",
2241+ "tle2": "2 25345 86.4477 156.8187 0002394 82.5005 277.6455 14.42972467653344",
2242 "visible": false
2243 },
2244 "IRIDIUM 75":
2245 {
2246- "description": "Iridium 75",
2247+ "comms": [],
2248 "groups": ["iridium", "communications"],
2249- "tle1": "1 25346U 98032E 09080.94529799 .00000116 00000-0 34491-4 0 5150",
2250- "tle2": "2 25346 86.3944 41.7207 0002402 79.7335 280.4124 14.34213264568357",
2251- "draw_orbit": false,
2252+ "orbitColor": [0, 0.5, 0.5],
2253+ "orbitVisible": false,
2254+ "tle1": "1 25346U 98032E 10302.14029946 .00000047 00000-0 98537-5 0 2073",
2255+ "tle2": "2 25346 86.3968 156.8057 0002282 80.4879 279.6566 14.34223153652376",
2256 "visible": false
2257 },
2258 "IRIDIUM 76":
2259 {
2260- "description": "Iridium 76",
2261+ "comms": [],
2262 "groups": ["iridium", "communications"],
2263- "tle1": "1 25432U 98048B 09080.94861862 .00000054 00000-0 12145-4 0 3738",
2264- "tle2": "2 25432 86.3906 73.1863 0002300 98.0699 262.0767 14.34215369554286",
2265- "draw_orbit": false,
2266+ "orbitColor": [0, 0.5, 0.5],
2267+ "orbitVisible": false,
2268+ "tle1": "1 25432U 98048B 10302.42284404 .00000202 00000-0 64921-4 0 620",
2269+ "tle2": "2 25432 86.3994 188.0610 0003037 79.5219 280.6343 14.34216744638343",
2270 "visible": false
2271 },
2272 "IRIDIUM 77":
2273 {
2274- "description": "Iridium 77",
2275+ "comms": [],
2276 "groups": ["iridium", "communications"],
2277- "tle1": "1 25471U 98051E 09080.82923891 .00000100 00000-0 28744-4 0 6088",
2278- "tle2": "2 25471 86.3997 199.4609 0003163 99.7025 260.4521 14.34216514556700",
2279- "draw_orbit": false,
2280+ "orbitColor": [0, 0.5, 0.5],
2281+ "orbitVisible": false,
2282+ "tle1": "1 25471U 98051E 10302.44284299 -.00000015 00000-0 -12402-4 0 2994",
2283+ "tle2": "2 25471 86.3933 314.3567 0003031 65.7459 294.4058 14.34218786640786",
2284 "visible": false
2285 },
2286 "IRIDIUM 8":
2287 {
2288- "description": "Iridium 8",
2289+ "comms": [],
2290 "groups": ["iridium", "communications"],
2291- "tle1": "1 24792U 97020A 09080.70181317 .00000069 00000-0 17647-4 0 5504",
2292- "tle2": "2 24792 86.3985 136.5160 0002379 81.7440 278.4023 14.34219493621849",
2293- "draw_orbit": false,
2294+ "orbitColor": [0, 0.5, 0.5],
2295+ "orbitVisible": false,
2296+ "tle1": "1 24792U 97020A 10302.38530659 .00000192 00000-0 61608-4 0 2379",
2297+ "tle2": "2 24792 86.3929 251.2471 0002480 82.3634 277.7846 14.34219132705930",
2298 "visible": false
2299 },
2300 "IRIDIUM 80":
2301 {
2302- "description": "Iridium 80",
2303+ "comms": [],
2304 "groups": ["iridium", "communications"],
2305- "tle1": "1 25469U 98051C 09080.96243436 .00000071 00000-0 18286-4 0 4399",
2306- "tle2": "2 25469 86.4008 199.5241 0002317 83.5362 276.6098 14.34216358551528",
2307- "draw_orbit": false,
2308+ "orbitColor": [0, 0.5, 0.5],
2309+ "orbitVisible": false,
2310+ "tle1": "1 25469U 98051C 10302.43650535 -.00000017 00000-0 -13009-4 0 1300",
2311+ "tle2": "2 25469 86.3938 314.5373 0002419 84.8770 275.2710 14.34218586635584",
2312 "visible": false
2313 },
2314 "IRIDIUM 81":
2315 {
2316- "description": "Iridium 81",
2317+ "comms": [],
2318 "groups": ["iridium", "communications"],
2319- "tle1": "1 25468U 98051B 09080.84189280 .00000175 00000-0 55498-4 0 4370",
2320- "tle2": "2 25468 86.4000 199.4552 0002193 77.7791 282.3646 14.34217895551504",
2321- "draw_orbit": false,
2322+ "orbitColor": [0, 0.5, 0.5],
2323+ "orbitVisible": false,
2324+ "tle1": "1 25468U 98051B 10302.38574066 .00000090 00000-0 24917-4 0 1238",
2325+ "tle2": "2 25468 86.3931 314.3968 0002427 87.8698 272.2773 14.34221776635575",
2326 "visible": false
2327 },
2328 "IRIDIUM 82":
2329 {
2330- "description": "Iridium 82",
2331+ "comms": [],
2332 "groups": ["iridium", "communications"],
2333- "tle1": "1 25467U 98051A 09080.84826518 .00000139 00000-0 42421-4 0 6061",
2334- "tle2": "2 25467 86.3999 199.5966 0003026 75.7695 284.3832 14.34216930555283",
2335- "draw_orbit": false,
2336+ "orbitColor": [0, 0.5, 0.5],
2337+ "orbitVisible": false,
2338+ "tle1": "1 25467U 98051A 10302.46187242 .00000020 00000-0 62221-7 0 3005",
2339+ "tle2": "2 25467 86.3934 314.5721 0001733 69.8745 290.2646 14.34218863639361",
2340 "visible": false
2341 },
2342 "IRIDIUM 83":
2343 {
2344- "description": "Iridium 83",
2345+ "comms": [],
2346 "groups": ["iridium", "communications"],
2347- "tle1": "1 25531U 98066E 09080.92094038 .00000145 00000-0 44885-4 0 4298",
2348- "tle2": "2 25531 86.4034 167.8505 0002327 86.2880 273.8578 14.34216119543038",
2349- "draw_orbit": false,
2350+ "orbitColor": [0, 0.5, 0.5],
2351+ "orbitVisible": false,
2352+ "tle1": "1 25531U 98066E 10302.46480137 .00000005 00000-0 -51470-5 0 1354",
2353+ "tle2": "2 25531 86.3912 282.7025 0002503 83.0364 277.1121 14.34216282627107",
2354 "visible": false
2355 },
2356 "IRIDIUM 84":
2357 {
2358- "description": "Iridium 84",
2359+ "comms": [],
2360 "groups": ["iridium", "communications"],
2361- "tle1": "1 25530U 98066D 09080.74968891 .00000167 00000-0 52727-4 0 3189",
2362- "tle2": "2 25530 86.4031 167.9111 0002365 84.5906 275.5553 14.34216529545657",
2363- "draw_orbit": false,
2364+ "orbitColor": [0, 0.5, 0.5],
2365+ "orbitVisible": false,
2366+ "tle1": "1 25530U 98066D 10302.36330788 -.00000003 00000-0 -81612-5 0 43",
2367+ "tle2": "2 25530 86.3904 282.7139 0002505 78.5731 281.5759 14.34216547629733",
2368 "visible": false
2369 },
2370 "IRIDIUM 86":
2371 {
2372- "description": "Iridium 86",
2373+ "comms": [],
2374 "groups": ["iridium", "communications"],
2375- "tle1": "1 25528U 98066B 09080.78774334 .00000154 00000-0 47880-4 0 6551",
2376- "tle2": "2 25528 86.4010 167.7890 0003121 91.2601 268.8949 14.34216774548021",
2377- "draw_orbit": false,
2378+ "orbitColor": [0, 0.5, 0.5],
2379+ "orbitVisible": false,
2380+ "tle1": "1 25528U 98066B 10302.47116108 -.00000018 00000-0 -13523-4 0 3505",
2381+ "tle2": "2 25528 86.3909 282.5493 0002556 63.8896 296.2585 14.34214751632112",
2382 "visible": false
2383 },
2384 "IRIDIUM 90":
2385 {
2386- "description": "Iridium 90",
2387+ "comms": [],
2388 "groups": ["iridium", "communications"],
2389- "tle1": "1 27373U 02005B 09080.75759552 .00000204 00000-0 54978-4 0 9905",
2390- "tle2": "2 27373 86.4545 167.7383 0002768 294.7036 65.3870 14.42961102377382",
2391- "draw_orbit": false,
2392+ "orbitColor": [5.26593727501705e-32, 5.26689177642992e-32, 5.26784627784279e-32],
2393+ "orbitVisible": false,
2394+ "tle1": "1 27373U 02005B 10302.36030628 .00000067 00000-0 14127-4 0 6936",
2395+ "tle2": "2 27373 86.4418 282.6053 0006645 119.7863 240.4015 14.42945239461973",
2396 "visible": false
2397 },
2398 "IRIDIUM 91":
2399 {
2400- "description": "Iridium 91",
2401+ "comms": [],
2402 "groups": ["iridium", "communications"],
2403- "tle1": "1 27372U 02005A 09080.97109062 -.00000020 00000-0 -14335-4 0 297",
2404- "tle2": "2 27372 86.3944 105.0683 0004458 24.2179 335.9227 14.34217272380315",
2405- "draw_orbit": false,
2406+ "orbitColor": [0, 0.5, 0.5],
2407+ "orbitVisible": false,
2408+ "tle1": "1 27372U 02005A 10302.30574910 -.00001098 00000-0 -39937-3 0 7209",
2409+ "tle2": "2 27372 86.3993 220.0360 0001688 203.0558 157.0593 14.34209808464351",
2410 "visible": false
2411 },
2412 "IRIDIUM 911":
2413 {
2414- "description": "Iridium 911",
2415+ "comms": [],
2416 "groups": ["iridium", "communications"],
2417- "tle1": "1 24842U 97030G 09080.72568503 .00000103 00000-0 24569-4 0 2539",
2418- "tle2": "2 24842 86.4523 170.7526 0015237 358.4789 1.6370 14.43158132618677",
2419- "draw_orbit": false,
2420+ "orbitColor": [0, 0.5, 0.5],
2421+ "orbitVisible": false,
2422+ "tle1": "1 24842U 97030G 10302.43016428 .00000175 00000-0 46013-4 0 9118",
2423+ "tle2": "2 24842 86.4409 285.4282 0013411 198.6141 161.4575 14.43279277703290",
2424 "visible": false
2425 },
2426 "IRIDIUM 914":
2427 {
2428- "description": "Iridium 914",
2429+ "comms": [],
2430 "groups": ["iridium", "communications"],
2431- "tle1": "1 24836U 97030A 09080.76183671 .00000072 00000-0 17532-4 0 1698",
2432- "tle2": "2 24836 86.3996 160.9874 0000845 77.3318 282.7979 14.37427546616467",
2433- "draw_orbit": false,
2434- "draw_orbit": false,
2435+ "orbitColor": [0, 0.5, 0.5],
2436+ "orbitVisible": false,
2437+ "tle1": "1 24836U 97030A 10302.44517336 .00000111 00000-0 30384-4 0 8197",
2438+ "tle2": "2 24836 86.3879 274.3149 0003577 98.7716 261.3896 14.37508597700748",
2439 "visible": false
2440 },
2441 "IRIDIUM 920":
2442 {
2443- "description": "Iridium 920",
2444+ "comms": [],
2445 "groups": ["iridium", "communications"],
2446- "tle1": "1 24871U 97034C 09080.95778183 -.00000024 00000-0 -14712-4 0 1999",
2447- "tle2": "2 24871 86.4029 192.6800 0013043 137.8990 222.3210 14.38055586613699",
2448- "draw_orbit": false,
2449+ "orbitColor": [0, 0.5, 0.5],
2450+ "orbitVisible": false,
2451+ "tle1": "1 24871U 97034C 10302.31278119 .00000110 00000-0 29838-4 0 8662",
2452+ "tle2": "2 24871 86.3927 306.2315 0013224 32.0769 328.1225 14.38145510697960",
2453 "visible": false
2454 },
2455 "IRIDIUM 921":
2456 {
2457- "description": "Iridium 921",
2458+ "comms": [],
2459 "groups": ["iridium", "communications"],
2460- "tle1": "1 24873U 97034E 09080.91559410 .00000320 00000-0 24960-4 0 5208",
2461- "tle2": "2 24873 86.3865 31.4638 0010185 126.4679 233.7489 14.97110247636150",
2462- "draw_orbit": false,
2463+ "orbitColor": [0, 0.5, 0.5],
2464+ "orbitVisible": false,
2465+ "tle1": "1 24873U 97034E 10303.02915026 .00000465 00000-0 37148-4 0 2523",
2466+ "tle2": "2 24873 86.3825 119.6091 0008373 167.4224 192.7206 14.97579158724008",
2467 "visible": false
2468 },
2469 "IRIDIUM 94":
2470 {
2471- "description": "Iridium 94",
2472+ "comms": [],
2473 "groups": ["iridium", "communications"],
2474- "tle1": "1 27374U 02005C 09080.75273894 -.00000019 00000-0 -75926-5 0 618",
2475- "tle2": "2 27374 86.5746 104.7593 0002666 84.3214 275.8306 14.66608250380349",
2476- "draw_orbit": false,
2477+ "orbitColor": [0, 0.5, 0.5],
2478+ "orbitVisible": false,
2479+ "tle1": "1 27374U 02005C 10302.47980555 .00000410 00000-0 70164-4 0 8007",
2480+ "tle2": "2 27374 86.5797 219.4745 0002539 82.6917 277.4601 14.66263025466324",
2481 "visible": false
2482 },
2483 "IRIDIUM 95":
2484 {
2485- "description": "Iridium 95",
2486+ "comms": [],
2487 "groups": ["iridium", "communications"],
2488- "tle1": "1 27375U 02005D 09080.66030253 -.00000059 00000-0 -28000-4 0 84",
2489- "tle2": "2 27375 86.3944 105.0032 0002427 89.9724 270.1749 14.34217381379558",
2490- "draw_orbit": false,
2491+ "orbitColor": [0, 0.5, 0.5],
2492+ "orbitVisible": false,
2493+ "tle1": "1 27375U 02005D 10302.34381192 -.00000705 00000-0 -25873-3 0 6953",
2494+ "tle2": "2 27375 86.3989 219.8199 0002548 82.5234 277.6316 14.34210284463645",
2495 "visible": false
2496 },
2497 "IRIDIUM 96":
2498 {
2499- "description": "Iridium 96",
2500+ "comms": [],
2501 "groups": ["iridium", "communications"],
2502- "tle1": "1 27376U 02005E 09080.56026923 -.00000015 00000-0 -69572-5 0 546",
2503- "tle2": "2 27376 86.5756 104.7982 0002697 80.6016 279.5497 14.66608347380313",
2504- "draw_orbit": false,
2505+ "orbitColor": [0, 0.5, 0.5],
2506+ "orbitVisible": false,
2507+ "tle1": "1 27376U 02005E 10302.28129711 .00000378 00000-0 64345-4 0 7878",
2508+ "tle2": "2 27376 86.5794 219.4974 0002523 78.3458 281.8057 14.66262420466290",
2509 "visible": false
2510 },
2511 "IRIDIUM 97":
2512 {
2513- "description": "Iridium 97",
2514+ "comms": [],
2515 "groups": ["iridium", "communications"],
2516- "tle1": "1 27450U 02031A 09080.67644149 .00000069 00000-0 17482-4 0 9207",
2517- "tle2": "2 27450 86.4000 136.7814 0003464 21.9907 338.1435 14.34219520358872",
2518- "draw_orbit": false,
2519+ "orbitColor": [0, 0.5, 0.5],
2520+ "orbitVisible": false,
2521+ "tle1": "1 27450U 02031A 10302.42968416 .00000063 00000-0 15455-4 0 6024",
2522+ "tle2": "2 27450 86.3937 251.4719 0001860 175.4448 184.6755 14.34219224442977",
2523 "visible": false
2524 },
2525 "IRIDIUM 98":
2526 {
2527- "description": "Iridium 98",
2528+ "comms": [],
2529 "groups": ["iridium", "communications"],
2530- "tle1": "1 27451U 02031B 09080.85265633 .00000211 00000-0 57105-4 0 9389",
2531- "tle2": "2 27451 86.4540 199.6827 0005377 49.1145 311.0517 14.42947974358258",
2532- "draw_orbit": false,
2533+ "orbitColor": [0, 0.5, 0.5],
2534+ "orbitVisible": false,
2535+ "tle1": "1 27451U 02031B 10302.45497714 -.00000012 00000-0 -96990-5 0 6509",
2536+ "tle2": "2 27451 86.4472 314.8374 0001489 218.8331 141.2772 14.42954121442849",
2537 "visible": false
2538 },
2539 "ISS (ZARYA)":
2540@@ -1408,81 +1429,117 @@
2541 "description": "ARISS packet uplink",
2542 "frequency": 145.825
2543 }],
2544+ "groups": [],
2545 "hintColor": [0.899999976158142, 0.899999976158142, 0.899999976158142],
2546- "tle1": "1 25544U 98067A 10011.92371058 .00012181 00000-0 76107-4 0 3541",
2547- "tle2": "2 25544 51.6465 313.4924 0007635 171.1951 233.5729 15.77327898638859",
2548- "draw_orbit": true,
2549+ "orbitColor": [0.899999976158142, 0.899999976158142, 0.899999976158142],
2550+ "orbitVisible": true,
2551+ "tle1": "1 25544U 98067A 10303.20078704 .00020354 00000-0 15605-3 0 1733",
2552+ "tle2": "2 25544 51.6457 259.7917 0008679 138.1882 56.0735 15.72042387684701",
2553+ "visible": true
2554+ },
2555+ "ITAMSAT (IO-26)":
2556+ {
2557+ "comms": [],
2558+ "groups": ["amateur", "non-operational"],
2559+ "orbitColor": [0, 0.5, 0.5],
2560+ "orbitVisible": false,
2561+ "tle1": "1 22826U 93061D 10303.02222590 .00000047 00000-0 35053-4 0 4006",
2562+ "tle2": "2 22826 98.4962 248.1324 0008279 223.3597 136.6940 14.29571555891428",
2563+ "visible": false
2564+ },
2565+ "JAS-1 (FO-12)":
2566+ {
2567+ "comms": [],
2568+ "groups": ["amateur", "non-operational"],
2569+ "orbitColor": [0, 0.5, 0.5],
2570+ "orbitVisible": false,
2571+ "tle1": "1 16909U 86061B 10301.81520572 -.00000083 00000-0 10000-3 0 8008",
2572+ "tle2": "2 16909 50.0140 68.9849 0011238 37.6411 322.5189 12.44454413101068",
2573+ "visible": false
2574+ },
2575+ "JAS-1B (FO-20)":
2576+ {
2577+ "comms": [],
2578+ "groups": ["amateur", "non-operational"],
2579+ "orbitColor": [0, 0.5, 0.5],
2580+ "orbitVisible": false,
2581+ "tle1": "1 20480U 90013C 10302.58595027 -.00000023 00000-0 12304-4 0 6036",
2582+ "tle2": "2 20480 99.0171 134.5216 0540808 119.2696 246.3574 12.83366095970969",
2583+ "visible": false
2584+ },
2585+ "JAS-2 (FO-29)":
2586+ {
2587+ "comms": [
2588+ {
2589+ "description": "uplink",
2590+ "frequency": 145.95,
2591+ "modulation": "SSB/CW"
2592+ },
2593+ {
2594+ "description": "downlink",
2595+ "frequency": 435.85,
2596+ "modulation": "SSB/CW"
2597+ }],
2598+ "groups": ["amateur"],
2599+ "orbitColor": [0, 0.5, 0.5],
2600+ "orbitVisible": false,
2601+ "tle1": "1 24278U 96046B 10303.21498335 -.00000027 00000-0 52353-5 0 4268",
2602+ "tle2": "2 24278 98.5187 113.7176 0351215 133.4767 229.6153 13.52953449701367",
2603 "visible": true
2604 },
2605 "KITSAT 1 (KO-23)":
2606 {
2607- "description": "Amateur satellite",
2608+ "comms": [],
2609 "groups": ["amateur", "non-operational"],
2610- "tle1": "1 22077U 92052B 09080.68175229 -.00000037 00000-0 10000-3 0 6995",
2611- "tle2": "2 22077 66.0847 149.9211 0013023 300.4010 59.5723 12.86447618780266",
2612- "draw_orbit": false,
2613+ "orbitColor": [0, 0.5, 0.5],
2614+ "orbitVisible": false,
2615+ "tle1": "1 22077U 92052B 10301.69375558 -.00000037 00000-0 10000-3 0 849",
2616+ "tle2": "2 22077 66.0880 2.5985 0003219 352.4177 7.6789 12.86454782855643",
2617 "visible": false
2618 },
2619 "KITSAT 2 (KO-25)":
2620 {
2621- "description": "Amateur satellite",
2622+ "comms": [],
2623 "groups": ["amateur", "non-operational"],
2624- "tle1": "1 22828U 93061F 09080.83613139 -.00000007 00000-0 13561-4 0 1385",
2625- "tle2": "2 22828 98.4126 37.7648 0010637 129.0987 231.1150 14.29813121775804",
2626- "draw_orbit": false,
2627+ "orbitColor": [0, 0.5, 0.5],
2628+ "orbitVisible": false,
2629+ "tle1": "1 22828U 93061F 10302.32322926 -.00000002 00000-0 16048-4 0 5998",
2630+ "tle2": "2 22828 98.4903 247.2351 0009647 197.8862 162.1982 14.29863524859610",
2631 "visible": false
2632 },
2633 "LUSAT (LO-19)":
2634 {
2635- "description": "Amateur satellite",
2636- "groups": ["amateur", "non-operational"],
2637- "tle1": "1 20442U 90005G 09080.85379851 .00000101 00000-0 52762-4 0 4846",
2638- "tle2": "2 20442 98.2328 60.8676 0012920 67.8229 292.4325 14.32055802 813",
2639- "draw_orbit": false,
2640- "visible": false
2641- },
2642- "UNAMSAT-2 (MO-30)":
2643- {
2644- "description": "Amateur satellite",
2645- "groups": ["amateur", "non-operational"],
2646- "tle1": "1 24305U 96052B 09080.47219106 .00000009 00000-0 -65784-5 0 696",
2647- "tle2": "2 24305 82.9323 58.9099 0030942 136.0160 224.3468 13.73567811628634",
2648- "draw_orbit": false,
2649- "visible": false
2650- },
2651- "TIUNGSAT-1 (MO-46)":
2652- {
2653- "description": "Amateur satellite",
2654- "groups": ["amateur", "non-operational"],
2655- "tle1": "1 26548U 00057D 09080.87169003 -.00000081 00000-0 87572-5 0 3491",
2656- "tle2": "2 26548 64.5595 350.9689 0050062 285.2131 74.3419 14.83347625459005",
2657- "draw_orbit": false,
2658- "visible": false
2659+ "comms": [],
2660+ "groups": ["amateur", "non-operational"],
2661+ "orbitColor": [0, 0.5, 0.5],
2662+ "orbitVisible": false,
2663+ "tle1": "1 20442U 90005G 10303.03138969 -.00000024 00000-0 64040-5 0 9404",
2664+ "tle2": "2 20442 98.3139 261.0109 0012834 118.9444 241.3028 14.32109330 84856",
2665+ "visible": false
2666+ },
2667+ "MOZHAYETS 4 (RS-22)":
2668+ {
2669+ "comms": [
2670+ {
2671+ "description": "downlink",
2672+ "frequency": 435.352,
2673+ "modulation": "CW"
2674+ }],
2675+ "groups": ["amateur"],
2676+ "orbitColor": [0, 0.5, 0.5],
2677+ "orbitVisible": false,
2678+ "tle1": "1 27939U 03042A 10303.16037621 .00000168 00000-0 41000-4 0 6768",
2679+ "tle2": "2 27939 97.8704 162.7736 0013686 358.0143 2.0979 14.63469534378692",
2680+ "visible": true
2681 },
2682 "NCUBE-2":
2683 {
2684 "comms": [],
2685- "tle1": "1 28897U 05043H 10010.64548338 .00000118 00000-0 34050-4 0 457",
2686- "tle2": "2 28897 98.0343 260.0372 0018237 60.5035 299.7985 14.60015933216294",
2687- "draw_orbit": false,
2688- "visible": false
2689- },
2690- "PCSAT (NO-44)":
2691- {
2692- "description": "Amateur satellite",
2693- "groups": ["amateur", "non-operational"],
2694- "tle1": "1 26931U 01043C 09080.69111513 -.00000245 00000-0 -63501-4 0 1278",
2695- "tle2": "2 26931 67.0529 289.7584 0005178 260.4427 99.6072 14.29549665390074",
2696- "draw_orbit": false,
2697- "visible": false
2698- },
2699- "SAPPHIRE (NO-45)":
2700- {
2701- "description": "Amateur satellite",
2702- "groups": ["amateur", "non-operational"],
2703- "tle1": "1 26932U 01043D 09080.93767055 -.00000067 00000-0 60390-5 0 1347",
2704- "tle2": "2 26932 67.0506 289.0527 0006019 240.4193 119.6306 14.29604170390158",
2705- "draw_orbit": false,
2706+ "groups": [],
2707+ "orbitColor": [0, 0.5, 0.5],
2708+ "orbitVisible": false,
2709+ "tle1": "1 28897U 05043H 10302.24171712 .00000303 00000-0 72179-4 0 2839",
2710+ "tle2": "2 28897 97.9916 182.0174 0016343 223.7877 136.2029 14.60144916258849",
2711 "visible": false
2712 },
2713 "NOAA 15":
2714@@ -1493,11 +1550,11 @@
2715 "frequency": 137.5,
2716 "modulation": "AM/APT"
2717 }],
2718- "description": "NOAA Weather Satellite 15",
2719 "groups": ["scientific", "weather"],
2720- "tle1": "1 25338U 98030A 09080.90089393 -.00000044 00000-0 -26503-6 0 8619",
2721- "tle2": "2 25338 98.5808 72.0445 0009840 316.2506 43.7883 14.24749834564348",
2722- "draw_orbit": true,
2723+ "orbitColor": [0, 0.5, 0.5],
2724+ "orbitVisible": true,
2725+ "tle1": "1 25338U 98030A 10302.13888427 .00000152 00000-0 83611-4 0 5759",
2726+ "tle2": "2 25338 98.6333 286.7573 0011440 48.4259 311.7915 14.24863065647828",
2727 "visible": true
2728 },
2729 "NOAA 17":
2730@@ -1508,11 +1565,11 @@
2731 "frequency": 137.62,
2732 "modulation": "AM/APT"
2733 }],
2734- "description": "NOAA Weather Satellite 17",
2735 "groups": ["scientific", "weather"],
2736- "tle1": "1 27453U 02032A 09080.80573152 -.00000085 00000-0 -18637-4 0 3444",
2737- "tle2": "2 27453 98.4939 142.8491 0011919 24.2008 335.9717 14.24048587350311",
2738- "draw_orbit": true,
2739+ "orbitColor": [0, 0.5, 0.5],
2740+ "orbitVisible": true,
2741+ "tle1": "1 27453U 02032A 10302.46562833 .00000076 00000-0 51045-4 0 411",
2742+ "tle2": "2 27453 98.4146 347.3891 0012691 104.2530 256.0079 14.24203572433812",
2743 "visible": true
2744 },
2745 "NOAA 18":
2746@@ -1523,55 +1580,177 @@
2747 "frequency": 137.1,
2748 "modulation": "AM/APT"
2749 }],
2750- "description": "NOAA Weather Satellite 18",
2751 "groups": ["scientific", "weather"],
2752- "tle1": "1 28654U 05018A 09080.77119997 .00000000 00000-0 24577-4 0 8343",
2753- "tle2": "2 28654 98.8994 24.7197 0013458 248.9605 111.0150 14.11241530197625",
2754- "draw_orbit": true,
2755+ "orbitColor": [0, 0.5, 0.5],
2756+ "orbitVisible": true,
2757+ "tle1": "1 28654U 05018A 10302.42768584 -.00000003 00000-0 23033-4 0 5310",
2758+ "tle2": "2 28654 98.9663 248.3933 0014999 37.4701 322.7515 14.11401028280371",
2759 "visible": true
2760 },
2761 "OPAL (OO-38)":
2762 {
2763- "description": "Amateur satellite",
2764+ "comms": [],
2765 "groups": ["amateur", "non-operational"],
2766- "tle1": "1 26063U 00004C 09080.77017786 -.00000011 00000-0 16522-4 0 4630",
2767- "tle2": "2 26063 100.1939 211.4200 0036983 147.0349 213.3150 14.35858482479406",
2768- "draw_orbit": false,
2769+ "orbitColor": [0, 0.5, 0.5],
2770+ "orbitVisible": false,
2771+ "tle1": "1 26063U 00004C 10303.11531844 .00000042 00000-0 34727-4 0 9392",
2772+ "tle2": "2 26063 100.1955 186.4857 0036446 294.3233 65.4157 14.35911764563696",
2773 "visible": false
2774 },
2775 "OSCAR 3 (OSCAR III)":
2776 {
2777- "description": "Amateur satellite",
2778- "groups": ["amateur", "non-operational"],
2779- "tle1": "1 01293U 65016F 09080.92578501 .00000079 00000-0 82795-4 0 4881",
2780- "tle2": "2 01293 70.0694 359.9998 0020227 281.6686 78.2153 14.04694421247559",
2781- "draw_orbit": false,
2782+ "comms": [],
2783+ "groups": ["amateur", "non-operational"],
2784+ "orbitColor": [0, 0.5, 0.5],
2785+ "orbitVisible": false,
2786+ "tle1": "1 01293U 65016F 10302.23308369 .00000105 00000-0 98486-4 0 9303",
2787+ "tle2": "2 01293 70.0738 172.7870 0020257 229.1644 130.7708 14.04822260329894",
2788+ "visible": false
2789+ },
2790+ "OSCAR 5 (AO-5)":
2791+ {
2792+ "comms": [],
2793+ "groups": ["amateur", "non-operational"],
2794+ "orbitColor": [0, 0.5, 0.5],
2795+ "orbitVisible": false,
2796+ "tle1": "1 04321U 70008B 10301.91710438 -.00000031 00000-0 10000-3 0 3930",
2797+ "tle2": "2 04321 102.1008 327.0014 0027516 116.1671 244.2233 12.52160958863180",
2798+ "visible": false
2799+ },
2800+ "OSCAR 6 (AO-6)":
2801+ {
2802+ "comms": [],
2803+ "groups": ["amateur", "non-operational"],
2804+ "orbitColor": [0, 0.5, 0.5],
2805+ "orbitVisible": false,
2806+ "tle1": "1 06236U 72082B 10302.46287730 -.00000027 00000-0 10000-3 0 3795",
2807+ "tle2": "2 06236 101.3974 300.6206 0004354 355.3839 4.7193 12.53083202739945",
2808+ "visible": false
2809+ },
2810+ "OSCAR 7 (AO-7)":
2811+ {
2812+ "comms": [
2813+ {
2814+ "description": "200mW Beacon used with Modes B & C",
2815+ "frequency": 145.972
2816+ },
2817+ {
2818+ "description": "downlink",
2819+ "frequency": 145.95,
2820+ "modulation": "Modes B & C"
2821+ },
2822+ {
2823+ "description": "uplink",
2824+ "frequency": 145.9,
2825+ "modulation": "Mode A"
2826+ },
2827+ {
2828+ "description": "downlink",
2829+ "frequency": 29.45,
2830+ "modulation": "Mode A"
2831+ },
2832+ {
2833+ "description": "200mW Beacon used with Mode A",
2834+ "frequency": 29.502
2835+ },
2836+ {
2837+ "frequency": 2304.1,
2838+ "modulation": "40 mW Beacon - only when commanded"
2839+ },
2840+ {
2841+ "description": "uplink",
2842+ "frequency": 432.15,
2843+ "modulation": "Modes B & C"
2844+ }],
2845+ "groups": ["amateur"],
2846+ "orbitColor": [0, 0.5, 0.5],
2847+ "orbitVisible": false,
2848+ "tle1": "1 07530U 74089B 10302.99536252 -.00000027 00000-0 10000-3 0 9152",
2849+ "tle2": "2 07530 101.3990 313.6186 0012251 10.5676 349.5654 12.53580099645344",
2850+ "visible": true
2851+ },
2852+ "OSCAR 8 (AO-8)":
2853+ {
2854+ "comms": [],
2855+ "groups": ["amateur", "non-operational"],
2856+ "orbitColor": [0, 0.5, 0.5],
2857+ "orbitVisible": false,
2858+ "tle1": "1 10703U 78026B 10303.09852379 .00000352 00000-0 27312-3 0 9789",
2859+ "tle2": "2 10703 98.7637 333.1411 0005433 217.9200 142.1572 13.98879539665916",
2860+ "visible": false
2861+ },
2862+ "PACSAT (AO-16)":
2863+ {
2864+ "comms": [],
2865+ "groups": ["amateur", "non-operational"],
2866+ "orbitColor": [0, 0.5, 0.5],
2867+ "orbitVisible": false,
2868+ "tle1": "1 20439U 90005D 10302.98536407 .00000041 00000-0 31053-4 0 307",
2869+ "tle2": "2 20439 98.3510 255.7049 0011649 123.3798 236.8503 14.31880388 84678",
2870+ "visible": false
2871+ },
2872+ "PAN SAT (PO-34)":
2873+ {
2874+ "comms": [],
2875+ "groups": ["amateur", "non-operational"],
2876+ "orbitColor": [0, 0.5, 0.5],
2877+ "orbitVisible": false,
2878+ "tle1": "1 25520U 98064B 10302.75413069 .00000899 00000-0 33840-4 0 6098",
2879+ "tle2": "2 25520 28.4584 148.7610 0005080 351.8308 8.2188 15.17717260664612",
2880+ "visible": false
2881+ },
2882+ "PCSAT (NO-44)":
2883+ {
2884+ "comms": [],
2885+ "groups": ["amateur", "non-operational"],
2886+ "orbitColor": [0, 0.5, 0.5],
2887+ "orbitVisible": false,
2888+ "tle1": "1 26931U 01043C 10302.17766215 -.00000115 00000-0 -12460-4 0 5936",
2889+ "tle2": "2 26931 67.0531 218.7490 0005616 271.5946 88.4492 14.29617215473904",
2890 "visible": false
2891 },
2892 "PEHUENSAT 1 (PO-63)":
2893 {
2894 "comms": [],
2895- "tle1": "1 29712U 07001D 09129.76442331 .00000438 00000-0 63872-4 0 4664",
2896- "tle2": "2 29712 97.8314 187.0851 0015285 43.5600 316.6810 14.80531783125782",
2897- "draw_orbit": false,
2898- "visible": false
2899+ "groups": [],
2900+ "orbitColor": [0, 0.5, 0.5],
2901+ "orbitVisible": false,
2902+ "tle1": "1 29712U 07001D 10302.20215092 .00001000 00000-0 13435-3 0 3709",
2903+ "tle2": "2 29712 97.7667 350.0455 0015127 88.8781 271.4131 14.81366844205329",
2904+ "visible": false
2905+ },
2906+ "PHASE 3B (AO-10)":
2907+ {
2908+ "comms": [],
2909+ "groups": ["amateur", "non-operational"],
2910+ "orbitColor": [0, 0.5, 0.5],
2911+ "orbitVisible": false,
2912+ "tle1": "1 14129U 83058B 10301.48429116 -.00000086 00000-0 10000-3 0 7774",
2913+ "tle2": "2 14129 26.7917 67.8588 6039053 9.7099 357.9616 2.05867874177912",
2914+ "visible": false
2915+ },
2916+ "PHASE 3D (AO-40)":
2917+ {
2918+ "comms": [
2919+ {
2920+ "description": "Beacon",
2921+ "frequency": 145.898
2922+ }],
2923+ "groups": ["amateur"],
2924+ "orbitColor": [0, 0.5, 0.5],
2925+ "orbitVisible": false,
2926+ "tle1": "1 26609U 00072B 10301.01384339 -.00000076 00000-0 10000-3 0 4339",
2927+ "tle2": "2 26609 8.7265 307.6100 7952734 2.2749 359.9339 1.25586646 45880",
2928+ "visible": true
2929 },
2930 "POSAT (PO-28)":
2931 {
2932- "description": "Amateur satellite",
2933- "groups": ["amateur", "non-operational"],
2934- "tle1": "1 22829U 93061G 09080.84418226 -.00000012 00000-0 11647-4 0 1746",
2935- "tle2": "2 22829 98.4087 38.9001 0010531 125.5741 234.6455 14.30211190807812",
2936- "draw_orbit": false,
2937- "visible": false
2938- },
2939- "PAN SAT (PO-34)":
2940- {
2941- "description": "Amateur satellite",
2942- "groups": ["amateur", "non-operational"],
2943- "tle1": "1 25520U 98064B 09080.51367299 .00000409 00000-0 10351-4 0 2091",
2944- "tle2": "2 25520 28.4596 121.9419 0005186 71.4910 288.6250 15.17311364575324",
2945- "draw_orbit": false,
2946+ "comms": [],
2947+ "groups": ["amateur", "non-operational"],
2948+ "orbitColor": [0, 0.5, 0.5],
2949+ "orbitVisible": false,
2950+ "tle1": "1 22829U 93061G 10302.02792415 .00000101 00000-0 55301-4 0 6131",
2951+ "tle2": "2 22829 98.4857 248.1374 0009510 193.5771 166.5159 14.30264274891603",
2952 "visible": false
2953 },
2954 "RADIO ROSTO (RS-15)":
2955@@ -1595,70 +1774,41 @@
2956 "frequency": 145.878,
2957 "modulation": "Mode A"
2958 }],
2959- "description": "Radio Sputnik (RS) 15",
2960- "groups": ["amateur"],
2961- "tle1": "1 23439U 94085A 09080.97335086 -.00000039 00000-0 10000-3 0 2029",
2962- "tle2": "2 23439 64.8130 45.8464 0146514 68.4113 293.2342 11.27553256586281",
2963- "draw_orbit": false,
2964- "visible": true
2965- },
2966- "MOZHAYETS 4 (RS-22)":
2967- {
2968- "comms": [
2969- {
2970- "description": "downlink",
2971- "frequency": 435.352,
2972- "modulation": "CW"
2973- }],
2974- "description": "Amateur satellite",
2975- "groups": ["amateur"],
2976- "tle1": "1 27939U 03042A 09080.74176473 .00000091 00000-0 26556-4 0 7452",
2977- "tle2": "2 27939 97.9578 318.7317 0014519 50.9541 309.2958 14.63301923292787",
2978- "draw_orbit": false,
2979- "visible": true
2980- },
2981- "SEASAT 1":
2982+ "groups": ["amateur"],
2983+ "orbitColor": [0, 0.5, 0.5],
2984+ "orbitVisible": false,
2985+ "tle1": "1 23439U 94085A 10301.95764716 -.00000039 00000-0 10000-3 0 3583",
2986+ "tle2": "2 23439 64.8173 178.2127 0163424 320.6885 38.2267 11.27554600652352",
2987+ "visible": true
2988+ },
2989+ "SAPPHIRE (NO-45)":
2990 {
2991 "comms": [],
2992- "tle1": "1 10967U 78064A 10011.48877880 -.00000066 00000-0 21494-4 0 146",
2993- "tle2": "2 10967 108.0202 37.9154 0003096 275.7432 84.3363 14.42175802655204",
2994- "draw_orbit": false,
2995- "visible": true
2996- },
2997- "SEDSAT 1 (SO-33)":
2998- {
2999- "description": "Amateur satellite",
3000- "groups": ["amateur", "non-operational"],
3001- "tle1": "1 25509U 98061B 09080.68393431 .00000028 00000-0 -80808-5 0 4141",
3002- "tle2": "2 25509 31.4336 187.2850 0354956 293.3308 63.0343 14.28246349543312",
3003- "draw_orbit": false,
3004- "visible": false
3005- },
3006- "SUNSAT (SO-35)":
3007- {
3008- "description": "Amateur satellite",
3009- "groups": ["amateur", "non-operational"],
3010- "tle1": "1 25636U 99008C 09080.57259666 -.00000022 00000-0 18215-5 0 2632",
3011- "tle2": "2 25636 96.4526 285.7652 0148832 138.9281 222.3233 14.43457619530468",
3012- "draw_orbit": false,
3013+ "groups": ["amateur", "non-operational"],
3014+ "orbitColor": [0, 0.5, 0.5],
3015+ "orbitVisible": false,
3016+ "tle1": "1 26932U 01043D 10302.26600351 .00000136 00000-0 85139-4 0 5995",
3017+ "tle2": "2 26932 67.0564 218.6385 0004099 286.5958 73.4683 14.29652606473961",
3018 "visible": false
3019 },
3020 "SAUDISAT 1A (SO-41)":
3021 {
3022- "description": "Amateur satellite",
3023+ "comms": [],
3024 "groups": ["amateur", "non-operational"],
3025- "tle1": "1 26545U 00057A 09081.15361688 .00000047 00000-0 25135-4 0 2129",
3026- "tle2": "2 26545 64.5602 25.7522 0053775 291.6905 67.8477 14.80571352458315",
3027- "draw_orbit": false,
3028+ "orbitColor": [0, 0.5, 0.5],
3029+ "orbitVisible": false,
3030+ "tle1": "1 26545U 00057A 10302.21213510 .00000238 00000-0 49391-4 0 6636",
3031+ "tle2": "2 26545 64.5593 19.7278 0028002 198.2244 161.7864 14.80754992545086",
3032 "visible": false
3033 },
3034 "SAUDISAT 1B (SO-42)":
3035 {
3036- "description": "Amateur satellite",
3037+ "comms": [],
3038 "groups": ["amateur", "non-operational"],
3039- "tle1": "1 26549U 00057E 09080.84595995 -.00000003 00000-0 19202-4 0 2905",
3040- "tle2": "2 26549 64.5580 42.8624 0056981 296.2253 63.3012 14.79427179457945",
3041- "draw_orbit": false,
3042+ "orbitColor": [0, 0.5, 0.5],
3043+ "orbitVisible": false,
3044+ "tle1": "1 26549U 00057E 10302.29087126 .00000089 00000-0 30973-4 0 7563",
3045+ "tle2": "2 26549 64.5587 38.8932 0033355 196.0394 163.9650 14.79603621544706",
3046 "visible": false
3047 },
3048 "SAUDISAT 1C (SO-50)":
3049@@ -1674,73 +1824,151 @@
3050 "frequency": 436.795,
3051 "modulation": "FM"
3052 }],
3053- "description": "Amateur satellite",
3054 "groups": ["amateur"],
3055- "tle1": "1 27607U 02058C 09080.71748238 -.00000074 00000-0 10658-4 0 8438",
3056- "tle2": "2 27607 64.5592 290.7496 0076162 224.5615 134.9353 14.71420878335808",
3057- "draw_orbit": false,
3058- "visible": true
3059+ "orbitColor": [0, 0.5, 0.5],
3060+ "orbitVisible": false,
3061+ "tle1": "1 27607U 02058C 10302.97362182 .00000100 00000-0 37593-4 0 3054",
3062+ "tle2": "2 27607 64.5576 307.1018 0045330 21.5563 338.7440 14.71595158422210",
3063+ "visible": true
3064+ },
3065+ "SEASAT 1":
3066+ {
3067+ "comms": [],
3068+ "groups": [],
3069+ "orbitColor": [0, 0.5, 0.5],
3070+ "orbitVisible": false,
3071+ "tle1": "1 10967U 78064A 10302.53133137 .00000010 00000-0 44538-4 0 2510",
3072+ "tle2": "2 10967 108.0172 284.8510 0002985 245.3915 114.6908 14.42234203697168",
3073+ "visible": true
3074+ },
3075+ "SEDSAT 1 (SO-33)":
3076+ {
3077+ "comms": [],
3078+ "groups": ["amateur", "non-operational"],
3079+ "orbitColor": [0, 0.5, 0.5],
3080+ "orbitVisible": false,
3081+ "tle1": "1 25509U 98061B 10302.80418171 .00000116 00000-0 12709-4 0 8250",
3082+ "tle2": "2 25509 31.4315 107.2389 0353128 26.9173 334.9311 14.28335249627314",
3083+ "visible": false
3084+ },
3085+ "SSETI EXPRESS (XO-53)":
3086+ {
3087+ "comms": [],
3088+ "groups": ["amateur", "non-operational"],
3089+ "orbitColor": [0, 0.5, 0.5],
3090+ "orbitVisible": false,
3091+ "tle1": "1 28894U 05043E 10302.16153439 .00000121 00000-0 34690-4 0 9025",
3092+ "tle2": "2 28894 97.9880 181.3536 0016597 225.9524 134.0317 14.59762730266645",
3093+ "visible": false
3094+ },
3095+ "SUNSAT (SO-35)":
3096+ {
3097+ "comms": [],
3098+ "groups": ["amateur", "non-operational"],
3099+ "orbitColor": [0, 0.5, 0.5],
3100+ "orbitVisible": false,
3101+ "tle1": "1 25636U 99008C 10302.42690836 .00000097 00000-0 32625-4 0 7459",
3102+ "tle2": "2 25636 96.4808 12.3730 0149487 81.3368 280.4726 14.43522481615125",
3103+ "visible": false
3104+ },
3105+ "TECHSAT 1B (GO-32)":
3106+ {
3107+ "comms": [],
3108+ "groups": ["amateur", "non-operational"],
3109+ "orbitColor": [0, 0.5, 0.5],
3110+ "orbitVisible": false,
3111+ "tle1": "1 25397U 98043D 10302.45413869 .00000064 00000-0 46461-4 0 3186",
3112+ "tle2": "2 25397 98.3173 302.5353 0000629 180.3036 179.8156 14.23188539639142",
3113+ "visible": false
3114+ },
3115+ "TIUNGSAT-1 (MO-46)":
3116+ {
3117+ "comms": [],
3118+ "groups": ["amateur", "non-operational"],
3119+ "orbitColor": [0, 0.5, 0.5],
3120+ "orbitVisible": false,
3121+ "tle1": "1 26548U 00057D 10302.44527698 .00000147 00000-0 35574-4 0 8357",
3122+ "tle2": "2 26548 64.5566 335.2657 0020885 204.2588 155.7499 14.83575085546014",
3123+ "visible": false
3124 },
3125 "TMSAT-1 (TO-31)":
3126 {
3127- "description": "Amateur satellite",
3128+ "comms": [],
3129 "groups": ["amateur", "non-operational"],
3130- "tle1": "1 25396U 98043C 09080.64556542 -.00000075 00000-0 -14722-4 0 3609",
3131- "tle2": "2 25396 98.3414 113.1366 0003330 117.6494 242.5017 14.23773358555849",
3132- "draw_orbit": false,
3133+ "orbitColor": [0, 0.5, 0.5],
3134+ "orbitVisible": false,
3135+ "tle1": "1 25396U 98043C 10303.07507128 .00000005 00000-0 19995-4 0 8324",
3136+ "tle2": "2 25396 98.3081 309.1391 0001990 189.6091 170.5046 14.23816681639433",
3137 "visible": false
3138 },
3139 "UARS":
3140 {
3141 "comms": [],
3142- "tle1": "1 21701U 91063B 10011.56517379 .00007948 00000-0 10185-3 0 8632",
3143- "tle2": "2 21701 56.9701 169.1612 0067526 215.9750 143.6756 15.57588661 11660",
3144- "draw_orbit": false,
3145+ "groups": [],
3146+ "orbitColor": [0, 0.5, 0.5],
3147+ "orbitVisible": false,
3148+ "tle1": "1 21701U 91063B 10302.26036846 .00018353 00000-0 16692-3 0 1147",
3149+ "tle2": "2 21701 56.9712 322.6612 0063129 75.5188 285.2865 15.65524459 57060",
3150 "visible": true
3151 },
3152+ "UNAMSAT-2 (MO-30)":
3153+ {
3154+ "comms": [],
3155+ "groups": ["amateur", "non-operational"],
3156+ "orbitColor": [0, 0.5, 0.5],
3157+ "orbitVisible": false,
3158+ "tle1": "1 24305U 96052B 10302.66397316 .00000057 00000-0 44888-4 0 5650",
3159+ "tle2": "2 24305 82.9373 344.6354 0028974 307.1040 52.7473 13.73589346709241",
3160+ "visible": false
3161+ },
3162+ "UOSAT 12 (UO-36)":
3163+ {
3164+ "comms": [],
3165+ "groups": ["amateur", "non-operational"],
3166+ "orbitColor": [0, 0.5, 0.5],
3167+ "orbitVisible": false,
3168+ "tle1": "1 25693U 99021A 10302.42534737 .00000060 00000-0 27607-4 0 3410",
3169+ "tle2": "2 25693 64.5605 21.9857 0045126 293.3020 66.3329 14.78830288621661",
3170+ "visible": false
3171+ },
3172 "UOSAT 2 (UO-11)":
3173 {
3174- "description": "Amateur satellite",
3175+ "comms": [],
3176 "groups": ["amateur", "non-operational"],
3177- "tle1": "1 14781U 84021B 09080.64423839 .00000051 00000-0 14037-4 0 9177",
3178- "tle2": "2 14781 98.1180 124.2766 0008009 259.6956 100.3325 14.79700400344880",
3179- "draw_orbit": false,
3180+ "orbitColor": [0, 0.5, 0.5],
3181+ "orbitVisible": false,
3182+ "tle1": "1 14781U 84021B 10302.71427181 .00000222 00000-0 36568-4 0 3771",
3183+ "tle2": "2 14781 98.0384 354.7384 0009363 157.3975 202.7687 14.79851230431704",
3184 "visible": false
3185 },
3186 "UOSAT 3 (UO-14)":
3187 {
3188- "description": "Amateur satellite",
3189+ "comms": [],
3190 "groups": ["amateur", "non-operational"],
3191- "tle1": "1 20437U 90005B 09080.89917087 -.00000002 00000-0 14954-4 0 8782",
3192- "tle2": "2 20437 98.3297 42.5381 0011721 66.3877 293.8534 14.31539355 562",
3193- "draw_orbit": false,
3194+ "orbitColor": [0, 0.5, 0.5],
3195+ "orbitVisible": false,
3196+ "tle1": "1 20437U 90005B 10302.30937719 .00000055 00000-0 36384-4 0 3469",
3197+ "tle2": "2 20437 98.4078 247.9991 0011320 126.0291 234.1962 14.31589868 84465",
3198 "visible": false
3199 },
3200 "UOSAT 4 (UO-15)":
3201 {
3202- "description": "Amateur satellite",
3203+ "comms": [],
3204 "groups": ["amateur", "non-operational"],
3205- "tle1": "1 20438U 90005C 09080.90778475 -.00000010 00000-0 12128-4 0 3731",
3206- "tle2": "2 20438 98.3890 35.1941 0010802 94.4649 265.7767 14.30441006999994",
3207- "draw_orbit": false,
3208+ "orbitColor": [0, 0.5, 0.5],
3209+ "orbitVisible": false,
3210+ "tle1": "1 20438U 90005C 10302.97951299 -.00000004 00000-0 14694-4 0 8462",
3211+ "tle2": "2 20438 98.4615 244.0524 0010250 156.8681 203.2963 14.30479361 83921",
3212 "visible": false
3213 },
3214 "UOSAT 5 (UO-22)":
3215 {
3216- "description": "Amateur satellite",
3217- "groups": ["amateur", "non-operational"],
3218- "tle1": "1 21575U 91050B 09080.89099734 .00000050 00000-0 29842-4 0 5115",
3219- "tle2": "2 21575 98.4357 31.0711 0006470 282.9876 77.0586 14.39667965928143",
3220- "draw_orbit": false,
3221- "visible": false
3222- },
3223- "UOSAT 12 (UO-36)":
3224- {
3225- "description": "Amateur satellite",
3226- "groups": ["amateur", "non-operational"],
3227- "tle1": "1 25693U 99021A 09080.89685166 -.00000052 00000-0 12065-4 0 8740",
3228- "tle2": "2 25693 64.5601 24.0115 0014988 205.2445 154.7951 14.78742116534931",
3229- "draw_orbit": false,
3230+ "comms": [],
3231+ "groups": ["amateur", "non-operational"],
3232+ "orbitColor": [0, 0.5, 0.5],
3233+ "orbitVisible": false,
3234+ "tle1": "1 21575U 91050B 10303.01886441 .00000024 00000-0 21670-4 0 9710",
3235+ "tle2": "2 21575 98.5100 251.7751 0006921 329.1149 30.9642 14.39741583 12620",
3236 "visible": false
3237 },
3238 "UWE-1":
3239@@ -1751,44 +1979,23 @@
3240 "frequency": 437.505,
3241 "modulation": "AFSK, 9600 baud"
3242 }],
3243- "tle1": "1 28892U 05043C 10011.41208966 .00000105 00000-0 31411-4 0 5277",
3244- "tle2": "2 28892 98.0328 260.2408 0018374 58.0630 302.2350 14.59806760224221",
3245- "draw_orbit": false,
3246+ "groups": [],
3247+ "orbitColor": [0, 0.5, 0.5],
3248+ "orbitVisible": false,
3249+ "tle1": "1 28892U 05043C 10302.15932038 .00000277 00000-0 67049-4 0 7666",
3250+ "tle2": "2 28892 97.9897 181.2370 0016475 223.3607 136.6293 14.59933347266640",
3251 "visible": false
3252 },
3253- "HAMSAT (VO-52)":
3254- {
3255- "comms": [
3256- {
3257- "description": "Beacon",
3258- "frequency": 145.86,
3259- "modulation": "CW"
3260- }],
3261- "description": "Amateur satellite",
3262- "groups": ["amateur"],
3263- "tle1": "1 28650U 05017B 09080.72416803 -.00000248 00000-0 -24823-4 0 1847",
3264- "tle2": "2 28650 97.7510 145.1610 0026425 317.3448 42.5717 14.81561809209694",
3265- "draw_orbit": false,
3266- "visible": true
3267- },
3268 "WEBERSAT (WO-18)":
3269 {
3270- "description": "Amateur satellite",
3271- "groups": ["amateur", "non-operational"],
3272- "tle1": "1 20441U 90005F 09080.86048996 .00000029 00000-0 26273-4 0 7816",
3273- "tle2": "2 20441 98.2526 56.8316 0012586 69.9267 290.3272 14.31886901 720",
3274- "draw_orbit": false,
3275- "visible": false
3276- },
3277- "SSETI EXPRESS (XO-53)":
3278- {
3279- "description": "Amateur satellite",
3280- "groups": ["amateur", "non-operational"],
3281- "tle1": "1 28894U 05043E 09080.73492122 .00000020 00000-0 13815-4 0 4180",
3282- "tle2": "2 28894 98.0668 333.5116 0016556 264.1886 95.7421 14.59659039181098",
3283- "draw_orbit": false,
3284+ "comms": [],
3285+ "groups": ["amateur", "non-operational"],
3286+ "orbitColor": [0, 0.5, 0.5],
3287+ "orbitVisible": false,
3288+ "tle1": "1 20441U 90005F 10302.89592240 .00000037 00000-0 29406-4 0 2561",
3289+ "tle2": "2 20441 98.3325 258.0123 0012200 121.5114 238.7257 14.31947760 84732",
3290 "visible": false
3291 }
3292 },
3293 "shortName": "satellite orbital data"
3294-}
3295+}
3296\ No newline at end of file
3297
3298=== modified file 'plugins/Satellites/src/CMakeLists.txt'
3299--- plugins/Satellites/src/CMakeLists.txt 2010-05-10 08:59:49 +0000
3300+++ plugins/Satellites/src/CMakeLists.txt 2010-11-04 00:01:48 +0000
3301@@ -1,15 +1,33 @@
3302-INCLUDE_DIRECTORIES(. sgp4sdp4 gui ${CMAKE_BINARY_DIR}/plugins/Satellites/src ${CMAKE_BINARY_DIR}/plugins/Satellites/src/gui)
3303+INCLUDE_DIRECTORIES(. gsatellite gui ${CMAKE_BINARY_DIR}/plugins/Satellites/src ${CMAKE_BINARY_DIR}/plugins/Satellites/src/gui)
3304
3305 LINK_DIRECTORIES(/src)
3306
3307 SET(Satellites_SRCS
3308- sgp4sdp4/sgp4sdp4.c
3309- sgp4sdp4/sgp4sdp4.h
3310- sgp4sdp4/sgp_in.c
3311- sgp4sdp4/sgp_math.c
3312- sgp4sdp4/sgp_obs.c
3313- sgp4sdp4/sgp_time.c
3314- sgp4sdp4/solar.c
3315+ gsatellite/gException.hpp
3316+ gsatellite/gMatrix.cpp
3317+ gsatellite/gMatrix.hpp
3318+ gsatellite/gMatrixTempl.hpp
3319+ gsatellite/gObserver.cpp
3320+ gsatellite/gObserver.hpp
3321+ gsatellite/gSatTEME.cpp
3322+ gsatellite/gSatTEME.hpp
3323+ gsatellite/mathUtils.cpp
3324+ gsatellite/mathUtils.hpp
3325+ gsatellite/gTime.cpp
3326+ gsatellite/gTime.hpp
3327+ gsatellite/gTimeSpan.cpp
3328+ gsatellite/gVector.cpp
3329+ gsatellite/gVector.hpp
3330+ gsatellite/gVectorTempl.hpp
3331+ gsatellite/sgp4ext.cpp
3332+ gsatellite/sgp4ext.h
3333+ gsatellite/sgp4io.cpp
3334+ gsatellite/sgp4io.h
3335+ gsatellite/sgp4unit.cpp
3336+ gsatellite/sgp4unit.h
3337+ gsatellite/stdsat.h
3338+
3339+
3340 Satellite.hpp
3341 Satellite.cpp
3342 Satellites.hpp
3343
3344=== modified file 'plugins/Satellites/src/Satellite.cpp'
3345--- plugins/Satellites/src/Satellite.cpp 2010-10-27 15:20:46 +0000
3346+++ plugins/Satellites/src/Satellite.cpp 2010-11-04 00:01:48 +0000
3347@@ -27,12 +27,22 @@
3348 #include "StelTexture.hpp"
3349 #include "VecMath.hpp"
3350 #include "StelUtils.hpp"
3351-#include "sgp4sdp4/sgp4sdp4.h"
3352+
3353+
3354+#include "gsatellite/gSatTEME.hpp"
3355+#include "gsatellite/gObserver.hpp"
3356+#include "gsatellite/gTime.hpp"
3357+#include "gsatellite/gVector.hpp"
3358
3359 #include <QTextStream>
3360 #include <QRegExp>
3361 #include <QDebug>
3362 #include <QVariant>
3363+#include <QtOpenGL>
3364+#include <QSettings>
3365+
3366+#include <cmath>
3367+#include <cstdlib>
3368
3369 // static data members - will be initialised in the Satallites class (the StelObjectMgr)
3370 StelTextureSP Satellite::hintTexture;
3371@@ -47,13 +57,15 @@
3372 if (!map.contains("designation") || !map.contains("tle1") || !map.contains("tle2"))
3373 return;
3374
3375-
3376+ font.setPixelSize(16);
3377+
3378 designation = map.value("designation").toString();
3379 strncpy(elements[0], "DUMMY", 5);
3380 strncpy(elements[1], qPrintable(map.value("tle1").toString()), 80);
3381 strncpy(elements[2], qPrintable(map.value("tle2").toString()), 80);
3382 if (map.contains("description")) description = map.value("description").toString();
3383 if (map.contains("visible")) visible = map.value("visible").toBool();
3384+ if (map.contains("orbitVisible")) orbitVisible = map.value("orbitVisible").toBool();
3385
3386 if (map.contains("hintColor"))
3387 {
3388@@ -65,6 +77,21 @@
3389 }
3390 }
3391
3392+ if (map.contains("orbitColor"))
3393+ {
3394+ if (map.value("orbitColor").toList().count() == 3)
3395+ {
3396+ orbitColor[0] = map.value("orbitColor").toList().at(0).toDouble();
3397+ orbitColor[1] = map.value("orbitColor").toList().at(1).toDouble();
3398+ orbitColor[2] = map.value("orbitColor").toList().at(2).toDouble();
3399+ }
3400+ }
3401+ else
3402+ {
3403+ orbitColor = hintColor;
3404+ }
3405+
3406+
3407 if (map.contains("comms"))
3408 {
3409 foreach(QVariant comm, map.value("comms").toList())
3410@@ -87,24 +114,31 @@
3411 }
3412 }
3413
3414+ pSatellite = new gSatTEME( designation.toAscii().data(), elements[1], elements[2]);
3415+
3416 setObserverLocation();
3417 initialized = true;
3418 }
3419
3420 Satellite::~Satellite()
3421 {
3422+ if(pSatellite != NULL)
3423+ delete pSatellite;
3424 }
3425
3426 QVariantMap Satellite::getMap(void)
3427 {
3428 QVariantMap map;
3429 map["designation"] = designation;
3430- map["visible"] = visible;
3431+ map["visible"] = visible;
3432+ map["orbitVisible"] = orbitVisible;
3433 map["tle1"] = QString(elements[1]);
3434 map["tle2"] = QString(elements[2]);
3435- QVariantList col;
3436+ QVariantList col, orbitCol;;
3437 col << (double)hintColor[0] << (double)hintColor[1] << (double)hintColor[2];
3438+ orbitCol << (double)orbitColor[0] << (double)orbitColor[1] << (double)orbitColor[2];
3439 map["hintColor"] = col;
3440+ map["orbitColor"] = orbitCol;
3441 QVariantList commList;
3442 foreach(commLink c, comms)
3443 {
3444@@ -146,9 +180,23 @@
3445
3446 if (flags&Extra1)
3447 {
3448+ oss << "<p>";
3449 oss << QString("Range (km): <b>%1</b>").arg(range, 5, 'f', 2) << "<br>";
3450 oss << QString("Range rate (km/s): <b>%1</b>").arg(rangeRate, 5, 'f', 3) << "<br>";
3451 oss << QString("Altitude (km): <b>%1</b>").arg(height, 5, 'f', 2) << "<br>";
3452+ oss << QString("SubPoint Lat/Long(Deg): <b>%1</b>").arg(LatLong[0], 5, 'f', 2) << "/";
3453+ oss << QString("<b>%1</b>").arg(LatLong[1], 5, 'f', 3);
3454+ oss << "</p>";
3455+
3456+ oss << "TEME Coordinates(km): ";
3457+ oss << QString("<b>X:</b> %1 ").arg(Position[0], 5, 'f', 2);
3458+ oss << QString("<b>Y:</b> %1 ").arg(Position[1], 5, 'f', 2);
3459+ oss << QString("<b>Z:</b> %1 ").arg(Position[2], 5, 'f', 2) << "<br>";
3460+ oss << "TEME Vel(km/s): ";
3461+ oss << QString("<b>X:</b> %1 ").arg(Vel[0], 5, 'f', 2);
3462+ oss << QString("<b>Y:</b> %1 ").arg(Vel[1], 5, 'f', 2);
3463+ oss << QString("<b>Z:</b> %1 ").arg(Vel[2], 5, 'f', 2) << "<br>";
3464+
3465 }
3466
3467 if (flags&Extra2 && comms.size() > 0)
3468@@ -191,9 +239,10 @@
3469 {
3470 l = *loc;
3471 }
3472- obs_geodetic.lon = l.longitude * de2ra;
3473- obs_geodetic.lat = l.latitude * de2ra;
3474- obs_geodetic.alt = l.altitude / 1000.0;
3475+
3476+
3477+ observer.setPosition( l.latitude, l.longitude, l.altitude / 1000.0);
3478+
3479 }
3480
3481 Vec3f Satellite::getInfoColor(void) const {
3482@@ -212,36 +261,26 @@
3483
3484 void Satellite::update(double)
3485 {
3486- ClearFlag(ALL_FLAGS);
3487- Get_Next_Tle_Set(elements, &tle);
3488- memcpy(&localtle, &tle, sizeof(tle_t));
3489- select_ephemeris(&tle);
3490- double jul_epoch, jul_utc, tsince, phase;
3491- vector_t vel = {0,0,0,0};
3492- vector_t pos = {0,0,0,0};
3493- vector_t obs_set;
3494- geodetic_t sat_geodetic;
3495- jul_utc = StelApp::getInstance().getCore()->getNavigator()->getJDay();
3496- jul_epoch = Julian_Date_of_Epoch(tle.epoch);
3497- tsince = (jul_utc - jul_epoch) * xmnpda;
3498-
3499- if (isFlagSet(DEEP_SPACE_EPHEM_FLAG))
3500- SDP4(tsince, &tle, &pos, &vel, &phase);
3501- else
3502- SGP4(tsince, &tle, &pos, &vel, &phase);
3503-
3504- Convert_Sat_State(&pos, &vel);
3505- SgpMagnitude(&vel); // scalar magnitude, not brightness...
3506- velocity=vel.w;
3507-
3508- Calculate_Obs(jul_utc, &pos, &vel, &obs_geodetic, &obs_set);
3509- Calculate_LatLonAlt(jul_utc, &pos, &sat_geodetic);
3510-
3511- azimuth=Degrees(obs_set.x);
3512- elevation=Degrees(obs_set.y);
3513- range=obs_set.z;
3514- rangeRate=obs_set.w;
3515- height=sat_geodetic.alt;
3516+ double jul_utc = StelApp::getInstance().getCore()->getNavigator()->getJDay();
3517+
3518+ epochTime = jul_utc;
3519+
3520+ pSatellite->setEpoch( epochTime);
3521+ Position = pSatellite->getPos();
3522+ Vel = pSatellite->getVel();
3523+ LatLong = pSatellite->getSubPoint( epochTime);
3524+ azElPos = observer.calculateLook( *pSatellite, epochTime);
3525+
3526+
3527+ azimuth = azElPos[ AZIMUTH]/KDEG2RAD;
3528+ elevation = azElPos[ ELEVATION]/KDEG2RAD;
3529+ range = azElPos[ RANGE];
3530+ rangeRate = azElPos[ RANGERATE];
3531+ height = LatLong[2];
3532+
3533+ // Compute orbit points to draw orbit line.
3534+ if(orbitVisible) computeOrbitPoints();
3535+
3536 }
3537
3538 double Satellite::getDoppler(double freq) const
3539@@ -259,16 +298,164 @@
3540 XYZ = core->getNavigator()->j2000ToEquinoxEqu(core->getNavigator()->altAzToEquinoxEqu(pos));
3541 StelApp::getInstance().getVisionModeNight() ? glColor4f(0.6,0.0,0.0,1.0) : glColor4f(hintColor[0],hintColor[1],hintColor[2], Satellite::hintBrightness);
3542
3543+
3544 StelProjectorP prj = core->getProjection(StelCore::FrameJ2000);
3545 Vec3d xy;
3546 if (prj->project(XYZ,xy))
3547 {
3548+
3549 if (Satellite::showLabels)
3550 {
3551 painter.drawText(xy[0], xy[1], designation, 0, 10, 10, false);
3552 Satellite::hintTexture->bind();
3553 }
3554 painter.drawSprite2dMode(xy[0], xy[1], 11);
3555+
3556+ if(orbitVisible) drawOrbit(core, prj, painter);
3557+ }
3558+}
3559+
3560+void Satellite::drawOrbit(const StelCore* core, StelProjectorP& prj, StelPainter& painter){
3561+ Vec3d XYZPos, xy1;
3562+ float a, azimth, elev;
3563+ QVarLengthArray<float, 1024> vertexArray;
3564+
3565+
3566+ glDisable(GL_TEXTURE_2D);
3567+ glEnable(GL_LINE_SMOOTH);
3568+ glEnable(GL_BLEND);
3569+ painter.enableClientStates(true, false, false);
3570+
3571+ QList<gVector>::iterator it= orbitPoints.begin();
3572+
3573+ for(int i=0; i<orbitPoints.size();i++)
3574+ {
3575+ azimth = it->at( AZIMUTH);
3576+ elev = it->at( ELEVATION);
3577+ a = ( (azimth/KDEG2RAD)-90)*M_PI/180;
3578+ Vec3d pos(sin(a),cos(a), tan( (elev/KDEG2RAD) * M_PI / 180.));
3579+ XYZPos = core->getNavigator()->j2000ToEquinoxEqu(core->getNavigator()->altAzToEquinoxEqu(pos));
3580+
3581+ if (prj->project(XYZPos,xy1))
3582+ {
3583+ vertexArray.append(xy1[0]);
3584+ vertexArray.append(xy1[1]);
3585+ }
3586+ it++;
3587+
3588+ // draw the end parts of the orbit only, since they have non-standard color
3589+ // We'll draw the middle segment (with all the same color) with a single
3590+ // call to drawFromArray after this loop closes.
3591+ if (i>0 && ((DRAWORBIT_SLOTS_NUMBER/2) - abs(i - (DRAWORBIT_SLOTS_NUMBER/2) % DRAWORBIT_SLOTS_NUMBER)) < DRAWORBIT_FADE_NUMBER)
3592+ {
3593+ painter.setColor(orbitColor[0], orbitColor[1], orbitColor[2], hintBrightness * calculateOrbitSegmentIntensity(i));
3594+ painter.setVertexPointer(2, GL_FLOAT, vertexArray.constData());
3595+ painter.drawFromArray(StelPainter::LineStrip, 2, i-1, false);
3596+ }
3597+ }
3598+
3599+ // draw the middle segments of the orbit which are all the same color
3600+ if(!vertexArray.isEmpty())
3601+ {
3602+ if (vertexArray.count() > (2*DRAWORBIT_FADE_NUMBER))
3603+ {
3604+ painter.setColor(orbitColor[0], orbitColor[1], orbitColor[2], hintBrightness);
3605+ painter.setVertexPointer(2, GL_FLOAT, vertexArray.constData());
3606+ painter.drawFromArray(StelPainter::LineStrip, DRAWORBIT_SLOTS_NUMBER + 1 - (2*DRAWORBIT_FADE_NUMBER), DRAWORBIT_FADE_NUMBER - 1, false);
3607+ }
3608+ vertexArray.clear();
3609+ }
3610+
3611+ painter.enableClientStates(false);
3612+ glEnable(GL_TEXTURE_2D);
3613+}
3614+
3615+float Satellite::calculateOrbitSegmentIntensity(int segNum)
3616+{
3617+ int endDist = (DRAWORBIT_SLOTS_NUMBER/2) - abs(segNum - (DRAWORBIT_SLOTS_NUMBER/2) % DRAWORBIT_SLOTS_NUMBER);
3618+ if (endDist > DRAWORBIT_FADE_NUMBER) { return 1.0; }
3619+ else { return (endDist + 1) / (DRAWORBIT_FADE_NUMBER + 1.0); }
3620+}
3621+
3622+void Satellite::computeOrbitPoints(){
3623+
3624+ gTimeSpan computeInterval(0,0,0,DRAWORBIT_SLOT_SECNUMBER); //1/2 minute
3625+ gTimeSpan orbitSpan(0,0,0, DRAWORBIT_SLOTS_NUMBER*DRAWORBIT_SLOT_SECNUMBER/2); //+- 15 minutes range.
3626+ gTime epochTm;
3627+ gVector azElVector;
3628+ int diffSlots;
3629+
3630+
3631+ if( orbitPoints.isEmpty())//Setup orbitPoins
3632+ {
3633+ epochTm = epochTime - orbitSpan;
3634+
3635+ for(int i=0; i< DRAWORBIT_SLOTS_NUMBER; i++)
3636+ {
3637+ pSatellite->setEpoch( epochTm);
3638+ azElVector = observer.calculateLook( *pSatellite, epochTm);
3639+ orbitPoints.append(azElVector);
3640+ epochTm += computeInterval;
3641+ }
3642+ lastEpochCompForOrbit = epochTime;
3643+ }
3644+ else if( epochTime > lastEpochCompForOrbit)
3645+ { // compute next orbit point when clock runs forward
3646+
3647+ gTimeSpan diffTime = epochTime - lastEpochCompForOrbit;
3648+ diffSlots = (int)(diffTime.getDblSeconds()/DRAWORBIT_SLOT_SECNUMBER);
3649+
3650+ if(diffSlots > 0)
3651+ {
3652+ if( diffSlots > DRAWORBIT_SLOTS_NUMBER)
3653+ {
3654+ diffSlots = DRAWORBIT_SLOTS_NUMBER;
3655+ epochTm = epochTime - orbitSpan;
3656+ }
3657+ else
3658+ {
3659+ epochTm = lastEpochCompForOrbit + orbitSpan + computeInterval;
3660+ }
3661+
3662+ for( int i=0; i<diffSlots;i++)
3663+ { //remove points at beginning of list and add points at end.
3664+ orbitPoints.removeFirst();
3665+ pSatellite->setEpoch( epochTm);
3666+ azElVector = observer.calculateLook( *pSatellite, epochTm);
3667+ orbitPoints.append(azElVector);
3668+ epochTm += computeInterval;
3669+ }
3670+
3671+ lastEpochCompForOrbit = epochTime;
3672+ }
3673+ }
3674+ else if(epochTime < lastEpochCompForOrbit)
3675+ { // compute next orbit point when clock runs backward
3676+ gTimeSpan diffTime = lastEpochCompForOrbit - epochTime;
3677+ diffSlots = (int)(diffTime.getDblSeconds()/DRAWORBIT_SLOT_SECNUMBER);
3678+
3679+ if(diffSlots > 0)
3680+ {
3681+ if( diffSlots > DRAWORBIT_SLOTS_NUMBER)
3682+ {
3683+ diffSlots = DRAWORBIT_SLOTS_NUMBER;
3684+ epochTm = epochTime + orbitSpan;
3685+ }
3686+ else
3687+ {
3688+ epochTm = epochTime - orbitSpan - computeInterval;
3689+ }
3690+ for( int i=0; i<diffSlots;i++)
3691+ { //remove points at end of list and add points at beginning.
3692+ orbitPoints.removeLast();
3693+ pSatellite->setEpoch( epochTm);
3694+ azElVector = observer.calculateLook( *pSatellite, epochTm);
3695+ orbitPoints.push_front(azElVector);
3696+ epochTm -= computeInterval;
3697+
3698+ }
3699+ lastEpochCompForOrbit = epochTime;
3700+ }
3701 }
3702 }
3703
3704
3705=== modified file 'plugins/Satellites/src/Satellite.hpp'
3706--- plugins/Satellites/src/Satellite.hpp 2010-05-17 19:24:14 +0000
3707+++ plugins/Satellites/src/Satellite.hpp 2010-11-04 00:01:48 +0000
3708@@ -23,10 +23,23 @@
3709 #include <QVariant>
3710 #include <QString>
3711 #include <QStringList>
3712+#include <QFont>
3713+#include <QList>
3714
3715 #include "StelObject.hpp"
3716 #include "StelTextureTypes.hpp"
3717-#include "sgp4sdp4/sgp4sdp4.h"
3718+
3719+#include "StelPainter.hpp"
3720+#include "gsatellite/gSatTEME.hpp"
3721+#include "gsatellite/gObserver.hpp"
3722+#include "gsatellite/gTime.hpp"
3723+#include "gsatellite/gVector.hpp"
3724+
3725+
3726+#define DRAWORBIT_SLOTS_NUMBER 131
3727+#define DRAWORBIT_FADE_NUMBER 10
3728+#define DRAWORBIT_SLOT_SECNUMBER 10
3729+
3730
3731 class StelPainter;
3732 class StelLocation;
3733@@ -82,14 +95,26 @@
3734 double getDoppler(double freq) const;
3735 static float showLabels;
3736
3737+public:
3738+ void enableDrawOrbit(bool b);
3739+
3740+private:
3741+ //draw orbits methods
3742+ void computeOrbitPoints();
3743+ void drawOrbit(const StelCore* core, StelProjectorP& prj, StelPainter& painter);
3744+ //! returns 0 - 1.0 for the DRAWORBIT_FADE_NUMBER segments at
3745+ //! each end of an orbit, with 1 in the middle.
3746+ float calculateOrbitSegmentIntensity(int segNum);
3747+
3748 private:
3749 bool initialized;
3750 bool visible;
3751+ bool orbitVisible; //draw orbit enabled/disabled
3752+
3753 QString designation; // The ID of the satllite
3754 QString description; // longer description of spacecraft
3755 Vec3d XYZ; // holds J2000 position
3756 char elements[3][80]; // TLE elements as char* for passing to sgp lib
3757- tle_t tle, localtle;
3758 double height, velocity, azimuth, elevation, range, rangeRate;
3759 QList<commLink> comms;
3760 Vec3f hintColor;
3761@@ -98,10 +123,25 @@
3762 static StelTextureSP hintTexture;
3763 static float hintBrightness;
3764 static float hintScale;
3765- geodetic_t obs_geodetic; // observer location
3766
3767 void draw(const StelCore* core, StelPainter& painter, float maxMagHints);
3768 void setObserverLocation(StelLocation* loc=NULL);
3769+
3770+ //gsatellite objects
3771+ gSatTEME *pSatellite;
3772+ gObserver observer;
3773+ gTime epochTime;
3774+ gVector Position;
3775+ gVector Vel;
3776+ gVector LatLong;
3777+ gVector azElPos;
3778+
3779+ //Satellite Orbit Draw
3780+ QFont font;
3781+ Vec3f orbitColor;
3782+ gTime lastEpochCompForOrbit;
3783+ QList<gVector> orbitPoints; //orbit points represented by azElPos vectors
3784+
3785 };
3786
3787 #endif // _SATELLITE_HPP_
3788
3789=== modified file 'plugins/Satellites/src/Satellites.cpp'
3790--- plugins/Satellites/src/Satellites.cpp 2010-09-12 18:20:20 +0000
3791+++ plugins/Satellites/src/Satellites.cpp 2010-11-04 00:01:48 +0000
3792@@ -206,7 +206,7 @@
3793 double Satellites::getCallOrder(StelModuleActionName actionName) const
3794 {
3795 if (actionName==StelModule::ActionDraw)
3796- return StelApp::getInstance().getModuleMgr().getModule("StarMgr")->getCallOrder(actionName)+1.;
3797+ return StelApp::getInstance().getModuleMgr().getModule("SolarSystem")->getCallOrder(actionName)+1.;
3798 return 0;
3799 }
3800
3801
3802=== modified file 'plugins/Satellites/src/Satellites.hpp'
3803--- plugins/Satellites/src/Satellites.hpp 2010-04-18 17:48:49 +0000
3804+++ plugins/Satellites/src/Satellites.hpp 2010-11-04 00:01:48 +0000
3805@@ -42,7 +42,7 @@
3806 typedef QSharedPointer<Satellite> SatelliteP;
3807
3808 //! @class Satellites
3809-//! Satellites in low Earth orbith require different orbital calculations from planets, the moon
3810+//! Satellites in low Earth orbit require different orbital calculations from planets, the moon
3811 //! and so on. This plugin implements the SGP4/SDP4 algorithms in Stellarium, allowing accurate
3812 //! prediction of the position of artificial satellites.
3813 class Satellites : public StelObjectModule
3814
3815=== added directory 'plugins/Satellites/src/gsatellite'
3816=== added file 'plugins/Satellites/src/gsatellite/gException.hpp'
3817--- plugins/Satellites/src/gsatellite/gException.hpp 1970-01-01 00:00:00 +0000
3818+++ plugins/Satellites/src/gsatellite/gException.hpp 2010-11-04 00:01:48 +0000
3819@@ -0,0 +1,44 @@
3820+/***************************************************************************
3821+ * Copyright (C) 2006 by j. l. Canales *
3822+ * jlcanales@users.sourceforge.net *
3823+ * *
3824+ * This program is free software; you can redistribute it and/or modify *
3825+ * it under the terms of the GNU General Public License as published by *
3826+ * the Free Software Foundation; either version 2 of the License, or *
3827+ * (at your option) any later version. *
3828+ * *
3829+ * This program is distributed in the hope that it will be useful, *
3830+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
3831+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
3832+ * GNU General Public License for more details. *
3833+ * *
3834+ * You should have received a copy of the GNU General Public License *
3835+ * along with this program; if not, write to the *
3836+ * Free Software Foundation, Inc., *
3837+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
3838+ ***************************************************************************/
3839+
3840+#ifndef _GEXCEPTION_HPP_
3841+#define _GEXCEPTION_HPP_ 1
3842+
3843+#include <stdexcept>
3844+
3845+//Exception Codes
3846+#define EXCP_UNKNOWN 1
3847+#define EXCP_INCORRECTPARAM 2
3848+#define EXCP_OPERATIONOVERFLOW 3
3849+#define EXCP_MEMORYALLOCATION 4
3850+#define EXCP_COMPUTEOVERFLOW 5
3851+
3852+typedef unsigned int GEXCEPTIONTYPE;
3853+
3854+// Exception messages for GMatrix
3855+
3856+#define OPERATOR_X_INCOMPATIBLE_ORDER "The matrix have incompatible order to calculate its verctorial product"
3857+#define OPERATOR_ADD_INCOMPATIBLE_ORDER "The matrix have incompatible order to calculate the addition"
3858+#define OPERATOR_ADDEQUAL_INCOMPATIBLE_ORDER "The matrix have incompatible order to calculate the addition"
3859+#define OPERATOR_DIFF_INCOMPATIBLE_ORDER "The matrix have incompatible order to calculate the substraction"
3860+#define OPERATOR_DIFFEQUAL_INCOMPATIBLE_ORDER "The matrix have incompatible order to calculate the substraction"
3861+#define DET_INCOMPATIBLE_ORDER "The matrix is not square, the determinant can't be calculate."
3862+
3863+#endif // _GEXCEPTION_HPP_
3864
3865=== added file 'plugins/Satellites/src/gsatellite/gMatrix.cpp'
3866--- plugins/Satellites/src/gsatellite/gMatrix.cpp 1970-01-01 00:00:00 +0000
3867+++ plugins/Satellites/src/gsatellite/gMatrix.cpp 2010-11-04 00:01:48 +0000
3868@@ -0,0 +1,290 @@
3869+/***************************************************************************
3870+ * Name: GMatrix.cpp
3871+ *
3872+ * Date: 2009-12-31 16:34:55 +0100 (jue, 31 dic 2009)
3873+ * Revision: 17
3874+ * HeadURL: https://gsat.svn.sourceforge.net/svnroot/gsat/trunk/src/GMatrix.cpp
3875+ *
3876+ * Description: GMatrix Definition.
3877+ * GMatrix class define a bidimensional GDOUBLE elements matrix
3878+ * and the basic matrix operations.
3879+ *
3880+ ***************************************************************************/
3881+
3882+/***************************************************************************
3883+ * Copyright (C) 2004 by JL Canales *
3884+ * ph03696@homeserver *
3885+ * *
3886+ * This program is free software; you can redistribute it and/or modify *
3887+ * it under the terms of the GNU General Public License as published by *
3888+ * the Free Software Foundation; either version 2 of the License, or *
3889+ * (at your option) any later version. *
3890+ * *
3891+ * This program is distributed in the hope that it will be useful, *
3892+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
3893+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
3894+ * GNU General Public License for more details. *
3895+ * *
3896+ * You should have received a copy of the GNU General Public License *
3897+ * along with this program; if not, write to the *
3898+ * Free Software Foundation, Inc., *
3899+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
3900+ ***************************************************************************/
3901+
3902+// CMatrix
3903+#include "gMatrix.hpp"
3904+#include "gException.hpp"
3905+
3906+#include <cassert>
3907+
3908+// Class gMatrix
3909+gMatrix::gMatrix() : gMatrixTempl<double>()
3910+{
3911+}
3912+
3913+gMatrix::gMatrix(unsigned int ai_uiRowNumber, unsigned int ai_uiColumNumber)
3914+ : gMatrixTempl<double>(ai_uiRowNumber, ai_uiColumNumber)
3915+{
3916+
3917+}
3918+
3919+
3920+bool gMatrix::operator!=(const gMatrix &right) const
3921+{
3922+ if((*this)==(right))
3923+ {
3924+ return false;
3925+ }
3926+ else
3927+ {
3928+ return true;
3929+ }
3930+}
3931+
3932+
3933+
3934+//## Other Operations (implementation)
3935+
3936+gMatrix gMatrix::operator *(const gMatrix &ai_RightMatrix)
3937+{
3938+
3939+ unsigned int iRow;
3940+ unsigned int iColumn;
3941+ unsigned int uiRightColumn = ai_RightMatrix.Columns();
3942+ unsigned int uiRightRow = ai_RightMatrix.Rows();
3943+
3944+ unsigned int Iterator;
3945+ double dAuxValue = 0;
3946+ gMatrix ReturnedMatrix(Rows(), uiRightColumn);
3947+
3948+
3949+ if(Columns() != uiRightRow)
3950+ {
3951+ throw std::out_of_range(OPERATOR_X_INCOMPATIBLE_ORDER);
3952+ }
3953+ else
3954+ {
3955+ for(iRow = 0; iRow < Rows(); iRow++)
3956+ for(iColumn = 0; iColumn < uiRightColumn; iColumn++)
3957+ {
3958+ // Product and addition of implied elements
3959+ for(Iterator = 0; Iterator < uiRightRow; Iterator++)
3960+ {
3961+ dAuxValue += (operator[](iRow)[ Iterator] *
3962+ ai_RightMatrix[ Iterator][ iColumn]);
3963+ }
3964+
3965+ ReturnedMatrix[ iRow][ iColumn] = dAuxValue;
3966+ dAuxValue = 0;
3967+ }
3968+ }
3969+
3970+ return ReturnedMatrix;
3971+}
3972+
3973+
3974+gVector gMatrix::operator *(const gVector &ai_RightVector)
3975+{
3976+
3977+ unsigned int iRow;
3978+ unsigned int iColumn;
3979+
3980+ double dAuxValue = 0;
3981+ gVector ReturnedVector(Rows());
3982+
3983+ assert(Columns() == ai_RightVector.size());
3984+
3985+
3986+ if(Columns() != ai_RightVector.size())
3987+ {
3988+ throw std::out_of_range(OPERATOR_X_INCOMPATIBLE_ORDER);
3989+ }
3990+ else
3991+ {
3992+ for(iRow = 0; iRow < Rows(); iRow++)
3993+ {
3994+ for(iColumn = 0; iColumn < Columns(); iColumn++)
3995+ {
3996+ // Product and addition of implied elements
3997+ dAuxValue += (operator[](iRow)[ iColumn] *
3998+ ai_RightVector[ iColumn]);
3999+ }
4000+
4001+ ReturnedVector[ iRow] = dAuxValue;
4002+ dAuxValue = 0;
4003+
4004+ }
4005+ }
4006+ return ReturnedVector;
4007+}
4008+
4009+
4010+gMatrix gMatrix::operator *(double ai_dRight)
4011+{
4012+ unsigned int iRow;
4013+ unsigned int iColumn;
4014+ gMatrix ReturnedMatrix(Rows(), Columns());
4015+
4016+ try
4017+ {
4018+ for(iRow = 0; iRow < Rows(); iRow++)
4019+ for(iColumn = 0; iColumn < Columns(); iColumn ++)
4020+ ReturnedMatrix[ iRow][ iColumn] = ((*this)[ iRow][ iColumn] * ai_dRight);
4021+ }
4022+ catch(...)
4023+ {
4024+ for(iRow = 0; iRow < Rows(); iRow++)
4025+ for(iColumn = 0; iColumn < Columns(); iColumn ++)
4026+ ReturnedMatrix[ iRow][ iColumn] = 0;
4027+
4028+ throw;
4029+ }
4030+
4031+ return ReturnedMatrix;
4032+}
4033+
4034+gMatrix gMatrix::operator+(gMatrix &ai_RightMatrix) const
4035+{
4036+
4037+ gMatrix ReturnedMatrix(Rows(), Columns());
4038+
4039+#ifdef ENABLE_DEBUG
4040+ assert(Rows()==ai_RightMatrix.Rows() && Columns()==ai_RightMatrix.Columns());
4041+#endif
4042+
4043+ if(Rows()!=ai_RightMatrix.Rows() || Columns()!=ai_RightMatrix.Columns())
4044+ {
4045+ throw std::out_of_range(OPERATOR_ADD_INCOMPATIBLE_ORDER);
4046+ }
4047+
4048+
4049+ for(unsigned int i = 0; i<Rows(); i++)
4050+ for(unsigned int j = 0; j<Columns(); j++)
4051+ ReturnedMatrix[ i][ j] = operator[](i)[ j] + ai_RightMatrix[ i][ j];
4052+
4053+
4054+ return ReturnedMatrix;
4055+
4056+}
4057+
4058+const gMatrix& gMatrix::operator+=(gMatrix &ai_RightMatrix)
4059+{
4060+
4061+#ifdef ENABLE_DEBUG
4062+ assert(Rows()==ai_RightMatrix.Rows() && Columns()==ai_RightMatrix.Columns());
4063+#endif
4064+
4065+ if(Rows()!=ai_RightMatrix.Rows() || Columns()!=ai_RightMatrix.Columns())
4066+ {
4067+ throw std::out_of_range(OPERATOR_ADDEQUAL_INCOMPATIBLE_ORDER);
4068+ }
4069+ for(unsigned int i = 0; i<Rows(); i++)
4070+ for(unsigned int j = 0; j<Columns(); j++)
4071+ operator[](i)[ j] = operator[](i)[ j] + ai_RightMatrix[ i][ j];
4072+
4073+
4074+ return *this;
4075+
4076+}
4077+
4078+gMatrix gMatrix::operator-(gMatrix &ai_RightMatrix) const
4079+{
4080+
4081+ gMatrix ReturnedMatrix(Rows(), Columns());
4082+
4083+#ifdef ENABLE_DEBUG
4084+ assert(Rows()==ai_RightMatrix.Rows() && Columns()==ai_RightMatrix.Columns());
4085+#endif
4086+
4087+ if(Rows()!=ai_RightMatrix.Rows() || Columns()!=ai_RightMatrix.Columns())
4088+ {
4089+ throw std::out_of_range(OPERATOR_DIFF_INCOMPATIBLE_ORDER);
4090+ }
4091+ for(unsigned int i = 0; i<Rows(); i++)
4092+ for(unsigned int j = 0; j<Columns(); j++)
4093+ ReturnedMatrix[ i][ j] = operator[](i)[ j] - ai_RightMatrix[ i][ j];
4094+
4095+
4096+ return ReturnedMatrix;
4097+
4098+}
4099+
4100+const gMatrix& gMatrix::operator-=(gMatrix &ai_RightMatrix)
4101+{
4102+
4103+#ifdef ENABLE_DEBUG
4104+ assert(Rows()==ai_RightMatrix.Rows() && Columns()==ai_RightMatrix.Columns());
4105+#endif
4106+
4107+ if(Rows()!=ai_RightMatrix.Rows() || Columns()!=ai_RightMatrix.Columns())
4108+ {
4109+ throw std::out_of_range(OPERATOR_DIFFEQUAL_INCOMPATIBLE_ORDER);
4110+ }
4111+ for(unsigned int i = 0; i<Rows(); i++)
4112+ for(unsigned int j = 0; j<Columns(); j++)
4113+ operator[](i)[ j] = operator[](i)[ j] - ai_RightMatrix[ i][ j];
4114+
4115+
4116+ return *this;
4117+
4118+}
4119+
4120+double gMatrix::det()
4121+{
4122+
4123+ gMatrix aux=*this;
4124+ double dDet;
4125+ int k,l,i,j;
4126+ int n = Rows();
4127+ int m = n-1;
4128+
4129+
4130+ try
4131+ {
4132+ if(Columns() != Rows())
4133+ {
4134+ throw std::invalid_argument(DET_INCOMPATIBLE_ORDER);
4135+ }
4136+
4137+ dDet=aux[0][0];
4138+ for(k=0; k<m; k++)
4139+ {
4140+ l=k+1;
4141+ for(i=l; i<n; i++)
4142+ {
4143+ for(j=l; j<n; j++)
4144+ {
4145+ aux[i][j] = (aux[k][k]*aux[i][j]-aux[k][j]*aux[i][k])/aux[k][k];
4146+ }
4147+ }
4148+ dDet=dDet*aux[k+1][k+1];
4149+ }
4150+
4151+ return dDet;
4152+ }
4153+ catch(...)
4154+ {
4155+ throw;
4156+ }
4157+}
4158+
4159
4160=== added file 'plugins/Satellites/src/gsatellite/gMatrix.hpp'
4161--- plugins/Satellites/src/gsatellite/gMatrix.hpp 1970-01-01 00:00:00 +0000
4162+++ plugins/Satellites/src/gsatellite/gMatrix.hpp 2010-11-04 00:01:48 +0000
4163@@ -0,0 +1,86 @@
4164+/***************************************************************************
4165+ * Name: gMatrix.h
4166+ *
4167+ * Date: 2007-03-29 17:01:15 +0200 (jue, 29 mar 2007)
4168+ * Revision: 16
4169+ * HeadURL: https://gsat.svn.sourceforge.net/svnroot/gsat/trunk/src/GMatrix.h
4170+ *
4171+ * Description: Fichero de descripci� de la clase GMatrix.
4172+ * Esta clase tiene como cometido la encapsulaci� de objetos
4173+ * tipo matriz bidimensional de elementos GDOUBLE junto con
4174+ * las operaciones de matrices realizables.
4175+ *
4176+ *
4177+ ***************************************************************************/
4178+
4179+/***************************************************************************
4180+ * Copyright (C) 2004 by JL Canales *
4181+ * ph03696@homeserver *
4182+ * *
4183+ * This program is free software; you can redistribute it and/or modify *
4184+ * it under the terms of the GNU General Public License as published by *
4185+ * the Free Software Foundation; either version 2 of the License, or *
4186+ * (at your option) any later version. *
4187+ * *
4188+ * This program is distributed in the hope that it will be useful, *
4189+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
4190+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
4191+ * GNU General Public License for more details. *
4192+ * *
4193+ * You should have received a copy of the GNU General Public License *
4194+ * along with this program; if not, write to the *
4195+ * Free Software Foundation, Inc., *
4196+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
4197+ ***************************************************************************/
4198+
4199+#ifndef _GMATRIX_HPP_
4200+#define _GMATRIX_HPP_ 1
4201+
4202+// MatrixContainer
4203+#include "gMatrixTempl.hpp"
4204+#include "gVector.hpp"
4205+
4206+//! @class: gMatrix
4207+//! This class implement the needed code to make matrix calculations.
4208+//! The GMatrix class inherit from MatrixContainer class that is created
4209+//! from the vector STL class givingt all the STL vector funcionality.
4210+//! This class has not overlapped the = operator and the copy constructor
4211+//! because this methods are given by the vector STL class.
4212+class gMatrix : public gMatrixTempl<double>
4213+{
4214+public:
4215+ //## Constructors (generated)
4216+ gMatrix();
4217+
4218+ //## Constructors (specified)
4219+ //## Operation:gMatrix%950961952
4220+ // Constructor whit row and column dimensions.
4221+ gMatrix ( unsigned int ai_uiRowNumber, unsigned int ai_uiColumNumber);
4222+
4223+ //## Equality Operations (generated)
4224+ bool operator!=( const gMatrix &right) const;
4225+
4226+ //## Other Operations (specified)
4227+ //## Operation: operator*%949869240
4228+ // This operators make the vectorial product calculation
4229+ gMatrix operator* ( const gMatrix &ai_RightMatrix);
4230+
4231+ //## Operation: operator*%949869240
4232+ // This operators make the vectorial product calculation
4233+ gVector operator* ( const gVector &ai_RightVector);
4234+
4235+ //## Operation: operator*%949869241
4236+ // This operator make the scalar product calculation.
4237+ gMatrix operator* ( double ai_dRight);
4238+
4239+ gMatrix operator+ ( gMatrix &ai_RightMatrix) const;
4240+ const gMatrix& operator+=( gMatrix &ai_RightMatrix);
4241+
4242+ gMatrix operator- ( gMatrix &ai_RightMatrix) const;
4243+ const gMatrix& operator-=( gMatrix &ai_RightMatrix);
4244+
4245+ // Determinant
4246+ double det();
4247+};
4248+
4249+#endif //_GMATRIX_HPP_
4250
4251=== added file 'plugins/Satellites/src/gsatellite/gMatrixTempl.hpp'
4252--- plugins/Satellites/src/gsatellite/gMatrixTempl.hpp 1970-01-01 00:00:00 +0000
4253+++ plugins/Satellites/src/gsatellite/gMatrixTempl.hpp 2010-11-04 00:01:48 +0000
4254@@ -0,0 +1,117 @@
4255+/***************************************************************************
4256+ * Name: gMatrixTempl.h
4257+ *
4258+ * Description: MatrixContainer is a template to build
4259+ * bidimensional objects arrays.
4260+ ***************************************************************************/
4261+
4262+/***************************************************************************
4263+ * Copyright (C) 2006 by j. l. Canales *
4264+ * jlcanales@users.sourceforge.net *
4265+ * *
4266+ * This program is free software; you can redistribute it and/or modify *
4267+ * it under the terms of the GNU General Public License as published by *
4268+ * the Free Software Foundation; either version 2 of the License, or *
4269+ * (at your option) any later version. *
4270+ * *
4271+ * This program is distributed in the hope that it will be useful, *
4272+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
4273+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
4274+ * GNU General Public License for more details. *
4275+ * *
4276+ * You should have received a copy of the GNU General Public License *
4277+ * along with this program; if not, write to the *
4278+ * Free Software Foundation, Inc., *
4279+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
4280+ ***************************************************************************/
4281+
4282+#ifndef _GMATRIXTEMPL_HPP_
4283+#define _GMATRIXTEMPL_HPP_ 1
4284+
4285+#include "gVectorTempl.hpp" // checked vector
4286+#include <iostream> // for operator<<(), see below
4287+
4288+// matrix as vector of vectors
4289+template<class T>
4290+class gMatrixTempl : public br_stl::gVectorTempl<
4291+ br_stl::gVectorTempl<T> >
4292+{
4293+public:
4294+ typedef typename std::vector<T>::size_type size_type;
4295+
4296+ gMatrixTempl(size_type x = 0, size_type y = 0)
4297+ : br_stl::gVectorTempl< br_stl::gVectorTempl<T> >(x, br_stl::gVectorTempl<T>(y)), rows(x), columns(y)
4298+ {
4299+ }
4300+
4301+ gMatrixTempl(const gMatrixTempl<T> &right)
4302+ : br_stl::gVectorTempl< br_stl::gVectorTempl<T> >(right.rows, br_stl::gVectorTempl<T>(right.columns)), rows(right.rows), columns(right.columns)
4303+ {
4304+
4305+ for(size_type i = 0; i < rows; ++i)
4306+ for(size_type j = 0; j < columns ; ++j)
4307+ operator[](i)[j] = right[ i][ j];
4308+ }
4309+
4310+ size_type Rows() const
4311+ {
4312+ return rows;
4313+ }
4314+
4315+ size_type Columns() const
4316+ {
4317+ return columns;
4318+ }
4319+
4320+ void SetSize(size_type x, size_type y)
4321+ {
4322+
4323+ br_stl::gVectorTempl< br_stl::gVectorTempl<T> >::resize(x);
4324+ for(size_type index = 0; index < x; index++)
4325+ operator[](index).resize(y);
4326+
4327+ rows = x;
4328+ columns = y;
4329+ }
4330+
4331+
4332+ void init(const T& Value)
4333+ {
4334+ for(size_type i = 0; i < rows; ++i)
4335+ for(size_type j = 0; j < columns ; ++j)
4336+ operator[](i)[j] = Value; // that is, (*this)[i][j]
4337+ }
4338+
4339+ // create identity matrix
4340+ gMatrixTempl<T>& I()
4341+ {
4342+ for(size_type i = 0; i < rows; ++i)
4343+ for(size_type j = 0; j < columns ; ++j)
4344+ operator[](i)[j] = (i==j) ? T(1) : T(0);
4345+ return *this;
4346+ }
4347+
4348+protected:
4349+ size_type rows;
4350+ size_type columns;
4351+
4352+
4353+}; // class Matrix
4354+
4355+
4356+template<class T>
4357+inline std::ostream& operator<<(std::ostream& s, const gMatrixTempl<T>& m)
4358+{
4359+ typedef typename gMatrixTempl<T>::size_type size_type;
4360+
4361+ for(size_type i = 0; i < m.Rows(); ++i)
4362+ {
4363+ s << std::endl << i <<" : ";
4364+ for(size_type j = 0; j < m.Columns(); ++j)
4365+ s << m[i][j] <<" ";
4366+ }
4367+ s << std::endl;
4368+ return s;
4369+}
4370+
4371+#endif // _GMATRIXTEMPL_HPP_
4372
4373=== added file 'plugins/Satellites/src/gsatellite/gObserver.cpp'
4374--- plugins/Satellites/src/gsatellite/gObserver.cpp 1970-01-01 00:00:00 +0000
4375+++ plugins/Satellites/src/gsatellite/gObserver.cpp 2010-11-04 00:01:48 +0000
4376@@ -0,0 +1,88 @@
4377+/*
4378+ * gObserver.cpp
4379+ *
4380+ * Created on: 05/08/2010
4381+ * Author: cdeveloper
4382+ */
4383+
4384+#include "stdsat.h"
4385+#include "gVector.hpp"
4386+#include "gObserver.hpp"
4387+#include "gTime.hpp"
4388+#include "mathUtils.hpp"
4389+#include <math.h>
4390+
4391+//! Definition: This operation compute the observer ECI coordinates for the ai_epoch time
4392+void gObserver::getECIPosition(gTime ai_epoch, gVector& ao_position, gVector& ao_vel)
4393+{
4394+ ao_position.resize(3);
4395+ ao_vel.resize(3);
4396+ double radLatitude = m_latitude * KDEG2RAD;
4397+ double theta = ai_epoch.toThetaLMST(m_longitude * KDEG2RAD);
4398+ double r;
4399+ double c,sq;
4400+
4401+ /* Reference: The 1992 Astronomical Almanac, page K11. */
4402+ c = 1/sqrt(1 + __f*(__f - 2)*Sqr(sin(radLatitude)));
4403+ sq = Sqr(1 - __f)*c;
4404+
4405+ r = (KEARTHRADIUS*c + m_attitude)*cos(radLatitude);
4406+ ao_position[0] = r * cos(theta);/*kilometers*/
4407+ ao_position[1] = r * sin(theta);
4408+ ao_position[2] = (KEARTHRADIUS*sq + m_attitude)*sin(radLatitude);
4409+ ao_vel[0] = -KMFACTOR*ao_position[1];/*kilometers/second*/
4410+ ao_vel[1] = KMFACTOR*ao_position[0];
4411+ ao_vel[2] = 0;
4412+}
4413+
4414+gVector gObserver::calculateLook(gSatTEME ai_Sat, gTime ai_epoch)
4415+{
4416+
4417+ gVector returnVector(4);
4418+ gVector topoSatPos(3);
4419+ gVector observerECIPos;
4420+ gVector observerECIVel;
4421+
4422+
4423+ double radLatitude = m_latitude * KDEG2RAD;
4424+ double theta = ai_epoch.toThetaLMST(m_longitude * KDEG2RAD);
4425+
4426+ getECIPosition(ai_epoch, observerECIPos, observerECIVel);
4427+ ai_Sat.setEpoch(ai_epoch);
4428+
4429+ gVector satECIPos = ai_Sat.getPos();
4430+ gVector satECIVel = ai_Sat.getVel();
4431+ gVector slantRange = satECIPos - observerECIPos;
4432+ gVector rangeVel = satECIVel - observerECIVel;
4433+
4434+ //top_s
4435+ topoSatPos[0] = sin(radLatitude) * cos(theta)*slantRange[0]
4436+ + sin(radLatitude)* sin(theta)*slantRange[1]
4437+ - cos(radLatitude)* slantRange[2];
4438+ //top_e
4439+ topoSatPos[1] = (-1.0)* sin(theta)*slantRange[0]
4440+ + cos(theta)*slantRange[1];
4441+
4442+ //top_z
4443+ topoSatPos[2] = cos(radLatitude) * cos(theta)*slantRange[0]
4444+ + cos(radLatitude) * sin(theta)*slantRange[1]
4445+ + sin(radLatitude) *slantRange[2];
4446+
4447+ returnVector[ AZIMUTH] = atan((-1.0)*topoSatPos[1]/topoSatPos[0]);
4448+ if(topoSatPos[0] > 0)
4449+ returnVector[ AZIMUTH] += KPI;
4450+ if(returnVector[ AZIMUTH] < 0)
4451+ returnVector[ AZIMUTH] += K2PI;
4452+
4453+ returnVector[ RANGE] = slantRange.Magnitude();
4454+ returnVector[ ELEVATION] = asin(topoSatPos[2]/returnVector[ RANGE]);
4455+ returnVector[ RANGERATE] = slantRange.Dot(rangeVel)/returnVector[ RANGE];
4456+ return returnVector;
4457+
4458+
4459+ // Corrections for atmospheric refraction
4460+ // Reference: Astronomical Algorithms by Jean Meeus, pp. 101-104
4461+ // Correction is meaningless when apparent elevation is below horizon
4462+ // obs_set->y = obs_set->y + Radians((1.02/tan(Radians(Degrees(el)+
4463+ // 10.3/(Degrees(el)+5.11))))/60);
4464+}
4465
4466=== added file 'plugins/Satellites/src/gsatellite/gObserver.hpp'
4467--- plugins/Satellites/src/gsatellite/gObserver.hpp 1970-01-01 00:00:00 +0000
4468+++ plugins/Satellites/src/gsatellite/gObserver.hpp 2010-11-04 00:01:48 +0000
4469@@ -0,0 +1,114 @@
4470+/***************************************************************************
4471+ * Name: gObserver.hpp
4472+ ***************************************************************************/
4473+
4474+/***************************************************************************
4475+ * Copyright (C) 2006 by J. L. Canales *
4476+ * jlcanales@users.sourceforge.net *
4477+ * *
4478+ * This program is free software; you can redistribute it and/or modify *
4479+ * it under the terms of the GNU General Public License as published by *
4480+ * the Free Software Foundation; either version 2 of the License, or *
4481+ * (at your option) any later version. *
4482+ * *
4483+ * This program is distributed in the hope that it will be useful, *
4484+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
4485+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
4486+ * GNU General Public License for more details. *
4487+ * *
4488+ * You should have received a copy of the GNU General Public License *
4489+ * along with this program; if not, write to the *
4490+ * Free Software Foundation, Inc., *
4491+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
4492+ ***************************************************************************/
4493+#ifndef _GOBSERVER_HPP_
4494+#define _GOBSERVER_HPP_ 1
4495+
4496+// stdsat
4497+#include "stdsat.h"
4498+#include "gVector.hpp"
4499+#include "gTime.hpp"
4500+#include "gSatTEME.hpp"
4501+
4502+#define AZIMUTH 0
4503+#define ELEVATION 1
4504+#define RANGE 2
4505+#define RANGERATE 3
4506+
4507+//! @class gObserver
4508+//! This class implements the need functionality to change
4509+//! coordinates from Geographic Reference System to Observer Reference System
4510+class gObserver
4511+{
4512+public:
4513+ //## Constructors (generated)
4514+ //! @brief Default class gObserver constructor
4515+ //! @param[in] ai_latitude Observer Geographic latitude
4516+ //! @param[in] ai_longitude Observer Geographic longitude
4517+ //! @param[in] ai_attitude Observer Geographic attitude
4518+ gObserver(double ai_latitude=0, double ai_longitude=0 , double ai_attitude=0):
4519+ m_latitude(ai_latitude),m_longitude(ai_longitude), m_attitude(ai_attitude)
4520+ {
4521+ ;
4522+ }
4523+
4524+ //! Method used to get observer latitude.
4525+ //!
4526+ double getLatitude()
4527+ {
4528+ return m_latitude;
4529+ }
4530+
4531+ //! Method used to get observer object longitude.
4532+ //!
4533+ double getLongitude()
4534+ {
4535+ return m_longitude;
4536+ }
4537+
4538+ //! Method used to set Observer geographic position.
4539+ //!
4540+ void setPosition(double ai_latitude, double ai_longitude, double ai_attitude)
4541+ {
4542+ m_latitude = ai_latitude;
4543+ m_longitude = ai_longitude;
4544+ m_attitude = ai_attitude;
4545+ }
4546+
4547+
4548+
4549+ // Operation getECIPosition
4550+ //! @brief This operation compute the observer ECI coordinates for the
4551+ //! ai_epoch time
4552+ //! @details
4553+ //! References:
4554+ //! Orbital Coordinate Systems, Part II
4555+ //! Dr. T.S. Kelso
4556+ //! http://www.celestrak.com/columns/v02n02/
4557+ //! @param[in] ai_epoch Epoch for the ECI reference system calculation
4558+ //! @param[out] ao_position Observer position vector
4559+ //! @param[out] ao_vel Observer velocity vector
4560+ //! gVector Vector including X,Y,Z ECI Coordinates
4561+ void getECIPosition(gTime ai_epoch, gVector& ao_position, gVector& ao_vel);
4562+
4563+ // Operation calculateLook
4564+ //! @brief This operation compute the Azimuth, Elevation and Range of
4565+ //! a satellite from the observer site.
4566+ //! @param[in] ai_Sat Sat TEME object to be looked.
4567+ //! @param[in] ai_epoch Epoch for the ECI reference system calculation
4568+ //! @return gVector Vector including Az, El, Range coordinates
4569+ //! References:
4570+ //! Orbital Coordinate Systems, Part II
4571+ //! Dr. T.S. Kelso
4572+ //! http://www.celestrak.com/columns/v02n02/
4573+ gVector calculateLook(gSatTEME ai_Sat, gTime ai_epoch);
4574+
4575+private: //## implementation
4576+
4577+ double m_latitude; //meassured in degrees
4578+ double m_longitude; //meassured in degrees
4579+ double m_attitude;
4580+
4581+};
4582+
4583+#endif // _GOBSERVER_HPP_
4584
4585=== added file 'plugins/Satellites/src/gsatellite/gSatTEME.cpp'
4586--- plugins/Satellites/src/gsatellite/gSatTEME.cpp 1970-01-01 00:00:00 +0000
4587+++ plugins/Satellites/src/gsatellite/gSatTEME.cpp 2010-11-04 00:01:48 +0000
4588@@ -0,0 +1,156 @@
4589+/***************************************************************************
4590+ * Name: gSatTEME.cpp
4591+ *
4592+ * Description: gSatTEME class implementation.
4593+ * This class abstract all the SGP4 complexity. It uses the
4594+ * David. A. Vallado code for SGP4 Calculation.
4595+ *
4596+ * Reference:
4597+ * Revisiting Spacetrack Report #3 AIAA 2006-6753
4598+ * Vallado, David A., Paul Crawford, Richard Hujsak, and T.S.
4599+ * Kelso, "Revisiting Spacetrack Report #3,"
4600+ * presented at the AIAA/AAS Astrodynamics Specialist
4601+ * Conference, Keystone, CO, 2006 August 21–24.
4602+ * http://celestrak.com/publications/AIAA/2006-6753/
4603+ ***************************************************************************/
4604+
4605+/***************************************************************************
4606+ * Copyright (C) 2004 by J.L. Canales *
4607+ * ph03696@homeserver *
4608+ * *
4609+ * This program is free software; you can redistribute it and/or modify *
4610+ * it under the terms of the GNU General Public License as published by *
4611+ * the Free Software Foundation; either version 2 of the License, or *
4612+ * (at your option) any later version. *
4613+ * *
4614+ * This program is distributed in the hope that it will be useful, *
4615+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
4616+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
4617+ * GNU General Public License for more details. *
4618+ * *
4619+ * You should have received a copy of the GNU General Public License *
4620+ * along with this program; if not, write to the *
4621+ * Free Software Foundation, Inc., *
4622+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
4623+ ***************************************************************************/
4624+
4625+// GKepFile
4626+#include "gSatTEME.hpp"
4627+#include <iostream>
4628+#include <iomanip>
4629+
4630+#include "stdsat.h"
4631+#include "mathUtils.hpp"
4632+
4633+#include "sgp4io.h"
4634+
4635+#define CONSTANTS_SET wgs72
4636+#define TYPERUN_SET 'c'
4637+#define OPSMODE_SET 'i'
4638+#define TYPEINPUT_SET 'm'
4639+
4640+#define LATITUDE 0
4641+#define LONGITUDE 1
4642+#define ALTITUDE 2
4643+
4644+// Constructors
4645+gSatTEME::gSatTEME(const char *pstrName, char *pstrTleLine1, char *pstrTleLine2)
4646+{
4647+
4648+ double startmfe, stopmfe, deltamin;
4649+ double ro[3];
4650+ double vo[3];
4651+
4652+ m_Position.resize(3);
4653+ m_Vel.resize(3);
4654+
4655+ m_SatName = pstrName;
4656+
4657+ //set gravitational constants
4658+ getgravconst(CONSTANTS_SET, tumin, mu, radiusearthkm, xke, j2, j3, j4, j3oj2);
4659+
4660+ //Parsing TLE_Files and sat variables setting
4661+ twoline2rv(pstrTleLine1, pstrTleLine2, TYPERUN_SET, TYPEINPUT_SET, OPSMODE_SET, CONSTANTS_SET,
4662+ startmfe, stopmfe, deltamin, satrec);
4663+
4664+ // call the propagator to get the initial state vector value
4665+ sgp4(CONSTANTS_SET, satrec, 0.0, ro, vo);
4666+
4667+ m_Position[ 0]= ro[ 0];
4668+ m_Position[ 1]= ro[ 1];
4669+ m_Position[ 2]= ro[ 2];
4670+ m_Vel[ 0] = vo[ 0];
4671+ m_Vel[ 1] = vo[ 1];
4672+ m_Vel[ 2] = vo[ 2];
4673+}
4674+
4675+void gSatTEME::setEpoch(gTime ai_time)
4676+{
4677+
4678+ gTime kepEpoch(satrec.jdsatepoch);
4679+ gTimeSpan tSince = ai_time - kepEpoch;
4680+
4681+ double ro[3];
4682+ double vo[3];
4683+ double dtsince = tSince.getDblSeconds()/KSEC_PER_MIN;
4684+ // call the propagator to get the initial state vector value
4685+ sgp4(CONSTANTS_SET, satrec, dtsince, ro, vo);
4686+
4687+ m_Position[ 0]= ro[ 0];
4688+ m_Position[ 1]= ro[ 1];
4689+ m_Position[ 2]= ro[ 2];
4690+ m_Vel[ 0] = vo[ 0];
4691+ m_Vel[ 1] = vo[ 1];
4692+ m_Vel[ 2] = vo[ 2];
4693+}
4694+
4695+void gSatTEME::setEpoch(double ai_minSinceKepEpoch)
4696+{
4697+
4698+ double ro[3];
4699+ double vo[3];
4700+ // call the propagator to get the initial state vector value
4701+ sgp4(CONSTANTS_SET, satrec, ai_minSinceKepEpoch, ro, vo);
4702+
4703+ m_Position[ 0]= ro[ 0];
4704+ m_Position[ 1]= ro[ 1];
4705+ m_Position[ 2]= ro[ 2];
4706+ m_Vel[ 0] = vo[ 0];
4707+ m_Vel[ 1] = vo[ 1];
4708+ m_Vel[ 2] = vo[ 2];
4709+}
4710+
4711+gVector gSatTEME::getSubPoint(gTime ai_Time)
4712+{
4713+
4714+ gVector resultVector(3); // (0) Latitude, (1) Longitude, (2) altitude
4715+ double theta, r, e2, phi, c;
4716+
4717+ theta = AcTan(m_Position[1], m_Position[0]); // radians
4718+ resultVector[ LONGITUDE] = fmod((theta - ai_Time.toThetaGMST()), K2PI); //radians
4719+
4720+
4721+ r = sqrt(Sqr(m_Position[0]) + Sqr(m_Position[1]));
4722+ e2 = __f*(2 - __f);
4723+ resultVector[ LATITUDE] = AcTan(m_Position[2],r); /*radians*/
4724+
4725+ do
4726+ {
4727+ phi = resultVector[ LATITUDE];
4728+ c = 1/sqrt(1 - e2*Sqr(sin(phi)));
4729+ resultVector[ LATITUDE] = AcTan(m_Position[2] + KEARTHRADIUS*c*e2*sin(phi),r);
4730+ }
4731+ while(fabs(resultVector[ LATITUDE] - phi) >= 1E-10);
4732+
4733+ resultVector[ ALTITUDE] = r/cos(resultVector[ LATITUDE]) - KEARTHRADIUS*c;/*kilometers*/
4734+
4735+ if(resultVector[ LATITUDE] > (KPI/2.0)) resultVector[ LATITUDE] -= K2PI;
4736+
4737+ resultVector[LATITUDE] = resultVector[LATITUDE]/KDEG2RAD;
4738+ resultVector[LONGITUDE] = resultVector[LONGITUDE]/KDEG2RAD;
4739+ if(resultVector[LONGITUDE] < -180.0) resultVector[LONGITUDE] +=360;
4740+ else if(resultVector[LONGITUDE] > 180.0) resultVector[LONGITUDE] -= 360;
4741+
4742+
4743+ return resultVector;
4744+}
4745
4746=== added file 'plugins/Satellites/src/gsatellite/gSatTEME.hpp'
4747--- plugins/Satellites/src/gsatellite/gSatTEME.hpp 1970-01-01 00:00:00 +0000
4748+++ plugins/Satellites/src/gsatellite/gSatTEME.hpp 2010-11-04 00:01:48 +0000
4749@@ -0,0 +1,128 @@
4750+/***************************************************************************
4751+ * Name: gSatTeme.hpp
4752+ *
4753+ * Description: gSatTEME classes declaration.
4754+ * This class abstract all the SGP4 complexity. It uses the
4755+ * revised David. A. Vallado code for SGP4 Calculation.
4756+ *
4757+ * Reference:
4758+ * Revisiting Spacetrack Report #3 AIAA 2006-6753
4759+ * Vallado, David A., Paul Crawford, Richard Hujsak, and T.S.
4760+ * Kelso, "Revisiting Spacetrack Report #3,"
4761+ * presented at the AIAA/AAS Astrodynamics Specialist
4762+ * Conference, Keystone, CO, 2006 August 21–24.
4763+ * http://celestrak.com/publications/AIAA/2006-6753/
4764+ ***************************************************************************/
4765+
4766+/***************************************************************************
4767+ * Copyright (C) 2006 by J.L. Canales *
4768+ * jlcanales@users.sourceforge.net *
4769+ * *
4770+ * This program is free software; you can redistribute it and/or modify *
4771+ * it under the terms of the GNU General Public License as published by *
4772+ * the Free Software Foundation; either version 2 of the License, or *
4773+ * (at your option) any later version. *
4774+ * *
4775+ * This program is distributed in the hope that it will be useful, *
4776+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
4777+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
4778+ * GNU General Public License for more details. *
4779+ * *
4780+ * You should have received a copy of the GNU General Public License *
4781+ * along with this program; if not, write to the *
4782+ * Free Software Foundation, Inc., *
4783+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
4784+ ***************************************************************************/
4785+
4786+#ifndef _GSATTEME_HPP_
4787+#define _GSATTEME_HPP_ 1
4788+
4789+#include "gTime.hpp"
4790+#include "gVector.hpp"
4791+
4792+#include "sgp4unit.h"
4793+#include "sgp4ext.h"
4794+
4795+
4796+//! @class gSatTEME
4797+//! @brief Sat position and velocity predictions over TEME reference system.
4798+//! @details
4799+//! Class to abstract all the SGP4 complexity.
4800+//! It implementation wrap whit an object oriented class the revised David. A. Vallado
4801+//! code for SGP4 Calculation. (Spacetrack report #6 revised AIAA-2006-6753-rev1)
4802+class gSatTEME
4803+{
4804+public:
4805+
4806+ // Operation: gSatTEME(const char *pstrName, char *pstrTleLine1, char *pstrTleLine2)
4807+ //! @brief Default class gSatTEME constructor
4808+ //! @param[in] pstrName Pointer to a null end string with the Sat. Name
4809+ //! @param[in] pstrTleLine1 Pointer to a null end string with the
4810+ //! first TLE Kep. data line
4811+ //! @param[in] pstrTleLine2 Pointer to a null end string with the
4812+ //! second TLE Kep. data line
4813+ gSatTEME(const char *pstrName, char *pstrTleLine1, char *pstrTleLine2);
4814+
4815+ // Operation: setEpoch( gTime ai_time)
4816+ //! @brief Set compute epoch for prediction
4817+ //! @param[in] ai_time gTime object storing the compute epoch time.
4818+ void setEpoch(gTime ai_time);
4819+
4820+ // Operation: setEpoch( double ai_minSinceKepEpoch)
4821+ //! @brief Set compute epoch for prediction in minutes since Keplerian data Epoch
4822+ //! @param[in] ai_minSinceKepEpoch Time since Keplerian Epoch measured in minutes
4823+ //! and fraction of minutes.
4824+ void setEpoch(double ai_minSinceKepEpoch);
4825+
4826+ // Operation: getPos()
4827+ //! @brief Get the TEME satellite position Vector
4828+ //! @return gVector
4829+ //! Satellite position vector.
4830+ //! x: position[0]
4831+ //! y: position[1]
4832+ //! z: position[2]
4833+ gVector getPos()
4834+ {
4835+ return m_Position;
4836+ }
4837+
4838+ // Operation: getVel()
4839+ //! @brief Get the TEME satellite Velocity Vector
4840+ //! @return gVector Satellite Velocity Vector\n
4841+ //! x: Vel[0]\n
4842+ //! y: Vel[1]\n
4843+ //! z: Vel[2]\n
4844+ gVector getVel()
4845+ {
4846+ return m_Vel;
4847+ }
4848+
4849+ // Operation: getSubPoint
4850+ //! @brief Get the Geographic satellite subpoint Vector
4851+ //! @details To implement this operation, next references has been used:
4852+ //! Orbital Coordinate Systems, Part III By Dr. T.S. Kelso
4853+ //! http://www.celestrak.com/columns/v02n03/
4854+ //! @param[in] ai_Time Epoch time for subpoint calculation. (of course, this must be
4855+ //! refactorized to be computed in the setEpoch function)
4856+ //! @return gVector Geographical coordinates\n
4857+ //! Latitude: Coord[0] measured in degrees\n
4858+ //! Longitude: Coord[1] measured in degrees\n
4859+ //! Altitude: Coord[2] measured in Km.\n
4860+ gVector getSubPoint(gTime ai_Time);
4861+
4862+ int getErrorCode()
4863+ {
4864+ return satrec.error;
4865+ }
4866+
4867+private:
4868+ // sgp4 proceses variables
4869+ double tumin, mu, radiusearthkm, xke, j2, j3, j4, j3oj2;
4870+ elsetrec satrec;
4871+
4872+ std::string m_SatName;
4873+ gVector m_Position;
4874+ gVector m_Vel;
4875+};
4876+
4877+#endif // _GSATTEME_HPP_
4878
4879=== added file 'plugins/Satellites/src/gsatellite/gTime.cpp'
4880--- plugins/Satellites/src/gsatellite/gTime.cpp 1970-01-01 00:00:00 +0000
4881+++ plugins/Satellites/src/gsatellite/gTime.cpp 2010-11-04 00:01:48 +0000
4882@@ -0,0 +1,347 @@
4883+/***************************************************************************
4884+ * Name: gTime.cpp
4885+ *
4886+ * Description:
4887+ ***************************************************************************/
4888+
4889+/***************************************************************************
4890+ * Copyright (C) 2004 by JL Trabajo *
4891+ * ph03696@homeserver *
4892+ * *
4893+ * This program is free software; you can redistribute it and/or modify *
4894+ * it under the terms of the GNU General Public License as published by *
4895+ * the Free Software Foundation; either version 2 of the License, or *
4896+ * (at your option) any later version. *
4897+ * *
4898+ * This program is distributed in the hope that it will be useful, *
4899+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
4900+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
4901+ * GNU General Public License for more details. *
4902+ * *
4903+ * You should have received a copy of the GNU General Public License *
4904+ * along with this program; if not, write to the *
4905+ * Free Software Foundation, Inc., *
4906+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
4907+ ***************************************************************************/
4908+
4909+
4910+#include <cassert>
4911+// gtime
4912+#include "gTime.hpp"
4913+// GExcpt
4914+#include "gException.hpp"
4915+#include "stdsat.h"
4916+#include <math.h>
4917+
4918+#include <stdio.h>
4919+#include <stdlib.h>
4920+
4921+// Class GTimeSpan
4922+
4923+//////////////////////////////////////////////////////////////////////////////
4924+// Referencies:
4925+// Astronomical Formulae for Calculators.
4926+// Jean Meeus
4927+// Chapter 3: Julian Day and Calendar Date. PG's 23, 24, 25
4928+//
4929+void gTime::setTime(int year, double day)
4930+{
4931+ assert((day >= 0.0) && (day < 367.0));
4932+
4933+ // Now calculate Julian date
4934+
4935+ year--;
4936+
4937+ int A = (year / 100);
4938+ int B = 2 - A + (A / 4);
4939+
4940+ double JDforYear = (int)(365.25 * year) +
4941+ (int)(30.6001 * 14) + //MM = 1 then MM=12 + 1 for the expresion (30.6001 * (mm +1))
4942+ 1720994.5 + B;
4943+
4944+ m_time = JDforYear + day;
4945+}
4946+
4947+
4948+// Constructors
4949+
4950+gTime gTime::getCurrentTime()
4951+{
4952+
4953+ time_t rawtime;
4954+ struct tm * timeinfo;
4955+
4956+ time(&rawtime);
4957+ timeinfo = gmtime(&rawtime);
4958+
4959+ return gTime(*timeinfo);
4960+}
4961+
4962+
4963+
4964+gTime::gTime(int year, double day)
4965+{
4966+ setTime(year, day);
4967+}
4968+
4969+gTime::gTime(double ai_jDays)
4970+{
4971+ m_time= ai_jDays;
4972+}
4973+
4974+gTime::gTime(int nYear, int nMonth, int nDay, int nHour, int nMin, double nSec)
4975+{
4976+ // Calculate N, the day of the year (1..366)
4977+ int N;
4978+ int F1 = (int)((275.0 * nMonth) / 9.0);
4979+ int F2 = (int)((nMonth + 9.0) / 12.0);
4980+
4981+ if(isLeapYear(nYear))
4982+ {
4983+ // Leap year
4984+ N = F1 - F2 + nDay - 30;
4985+ }
4986+ else
4987+ {
4988+ // Common year
4989+ N = F1 - (2 * F2) + nDay - 30;
4990+ }
4991+
4992+ double dDay = N + (nHour + (nMin + (nSec / 60.0)) / 60.0) / 24.0;
4993+
4994+
4995+ setTime(nYear, dDay);
4996+
4997+}
4998+
4999+
5000+gTime::gTime(const gTime& timeSrc):m_time(timeSrc.m_time)
The diff has been truncated for viewing.