From d9d3c3aa58a346a13eb1a7a1ffe87008a6e1a69e Mon Sep 17 00:00:00 2001 From: wgaylord Date: Wed, 20 Feb 2019 14:00:22 -0600 Subject: [PATCH] Totally recode whole system. --- Leap_Second.dat | 41 ++ README.md | 11 +- deltat.data | 552 ++++++++++++++++++ deltat.preds | 37 ++ server/requirments.txt => requirments.txt | 0 satnogs.py | 226 +++++++ ...ogs_api_client.py => satnogs_api_client.py | 0 satnogs_api_client.pyc | Bin 0 -> 5049 bytes server/README.md | 3 - server/satnogs.py | 197 ------- server/satnogs_api_client.pyc | Bin 5133 -> 0 bytes server/templates/index.html | 14 - {views => static}/globe/Worker.js | 0 .../globe/active-station-marker.png | Bin {views => static}/globe/globe.html | 0 {views => static}/globe/moment.min.js | 0 .../globe/satellite-marker-dark.png | Bin .../globe/satellite-marker-light.png | Bin {views => static}/globe/satellite.js | 0 {views => static}/globe/station-marker.png | Bin static/globe2/Worker.js | 73 +++ .../globe2}/active-station-marker.png | Bin static/globe2/globe.html | 39 ++ static/globe2/moment.min.js | 1 + .../globe2}/satellite-marker-dark.png | Bin .../globe2}/satellite-marker-light.png | Bin {views/map => static/globe2}/satellite.js | 0 .../map => static/globe2}/station-marker.png | Bin static/globe2/test.czml | 1 + templates/index.html | 39 ++ views/map/Worker.js | 64 -- views/map/map.html | 189 ------ 32 files changed, 1011 insertions(+), 476 deletions(-) create mode 100644 Leap_Second.dat create mode 100644 deltat.data create mode 100644 deltat.preds rename server/requirments.txt => requirments.txt (100%) create mode 100644 satnogs.py rename server/satnogs_api_client.py => satnogs_api_client.py (100%) create mode 100644 satnogs_api_client.pyc delete mode 100644 server/README.md delete mode 100644 server/satnogs.py delete mode 100644 server/satnogs_api_client.pyc delete mode 100644 server/templates/index.html rename {views => static}/globe/Worker.js (100%) rename {views => static}/globe/active-station-marker.png (100%) rename {views => static}/globe/globe.html (100%) rename {views => static}/globe/moment.min.js (100%) rename {views => static}/globe/satellite-marker-dark.png (100%) rename {views => static}/globe/satellite-marker-light.png (100%) rename {views => static}/globe/satellite.js (100%) rename {views => static}/globe/station-marker.png (100%) create mode 100644 static/globe2/Worker.js rename {views/map => static/globe2}/active-station-marker.png (100%) create mode 100644 static/globe2/globe.html create mode 100644 static/globe2/moment.min.js rename {views/map => static/globe2}/satellite-marker-dark.png (100%) rename {views/map => static/globe2}/satellite-marker-light.png (100%) rename {views/map => static/globe2}/satellite.js (100%) rename {views/map => static/globe2}/station-marker.png (100%) create mode 100644 static/globe2/test.czml create mode 100644 templates/index.html delete mode 100644 views/map/Worker.js delete mode 100644 views/map/map.html diff --git a/Leap_Second.dat b/Leap_Second.dat new file mode 100644 index 0000000..0bb8f6a --- /dev/null +++ b/Leap_Second.dat @@ -0,0 +1,41 @@ +# Value of TAI-UTC in second valid beetween the initial value until +# the epoch given on the next line. The last line reads that NO +# leap second was introduced since the corresponding date +# Updated through IERS Bulletin 57 issued in January 2019 +# +# +# File expires on 28 December 2019 +# +# +# MJD Date TAI-UTC (s) +# day month year +# --- -------------- ------ +# + 41317.0 1 1 1972 10 + 41499.0 1 7 1972 11 + 41683.0 1 1 1973 12 + 42048.0 1 1 1974 13 + 42413.0 1 1 1975 14 + 42778.0 1 1 1976 15 + 43144.0 1 1 1977 16 + 43509.0 1 1 1978 17 + 43874.0 1 1 1979 18 + 44239.0 1 1 1980 19 + 44786.0 1 7 1981 20 + 45151.0 1 7 1982 21 + 45516.0 1 7 1983 22 + 46247.0 1 7 1985 23 + 47161.0 1 1 1988 24 + 47892.0 1 1 1990 25 + 48257.0 1 1 1991 26 + 48804.0 1 7 1992 27 + 49169.0 1 7 1993 28 + 49534.0 1 7 1994 29 + 50083.0 1 1 1996 30 + 50630.0 1 7 1997 31 + 51179.0 1 1 1999 32 + 53736.0 1 1 2006 33 + 54832.0 1 1 2009 34 + 56109.0 1 7 2012 35 + 57204.0 1 7 2015 36 + 57754.0 1 1 2017 37 diff --git a/README.md b/README.md index d966412..62d32a2 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,3 @@ -# SatnogsMap +#Satnogs-Map -Uses Satnogs data to generate a map of all stations on Production and all sats currently observed. - - - -Currently hosted at satnogs.minecraft16.ml - - -The server itself is in the server folder and the views are in the view folder. \ No newline at end of file +Uses CesiumJS and a python backend to make a very nice map view of the satnogs network. \ No newline at end of file diff --git a/deltat.data b/deltat.data new file mode 100644 index 0000000..d3a2ecb --- /dev/null +++ b/deltat.data @@ -0,0 +1,552 @@ + 1973 2 1 43.4724 + 1973 3 1 43.5648 + 1973 4 1 43.6737 + 1973 5 1 43.7782 + 1973 6 1 43.8763 + 1973 7 1 43.9562 + 1973 8 1 44.0315 + 1973 9 1 44.1132 + 1973 10 1 44.1982 + 1973 11 1 44.2952 + 1973 12 1 44.3936 + 1974 1 1 44.4841 + 1974 2 1 44.5646 + 1974 3 1 44.6425 + 1974 4 1 44.7386 + 1974 5 1 44.8370 + 1974 6 1 44.9302 + 1974 7 1 44.9986 + 1974 8 1 45.0584 + 1974 9 1 45.1284 + 1974 10 1 45.2064 + 1974 11 1 45.2980 + 1974 12 1 45.3897 + 1975 1 1 45.4761 + 1975 2 1 45.5632 + 1975 3 1 45.6450 + 1975 4 1 45.7375 + 1975 5 1 45.8284 + 1975 6 1 45.9133 + 1975 7 1 45.9820 + 1975 8 1 46.0407 + 1975 9 1 46.1067 + 1975 10 1 46.1825 + 1975 11 1 46.2789 + 1975 12 1 46.3713 + 1976 1 1 46.4567 + 1976 2 1 46.5445 + 1976 3 1 46.6311 + 1976 4 1 46.7302 + 1976 5 1 46.8284 + 1976 6 1 46.9247 + 1976 7 1 46.9970 + 1976 8 1 47.0709 + 1976 9 1 47.1450 + 1976 10 1 47.2362 + 1976 11 1 47.3413 + 1976 12 1 47.4319 + 1977 1 1 47.5214 + 1977 2 1 47.6049 + 1977 3 1 47.6837 + 1977 4 1 47.7781 + 1977 5 1 47.8771 + 1977 6 1 47.9687 + 1977 7 1 48.0348 + 1977 8 1 48.0942 + 1977 9 1 48.1608 + 1977 10 1 48.2460 + 1977 11 1 48.3439 + 1977 12 1 48.4355 + 1978 1 1 48.5344 + 1978 2 1 48.6324 + 1978 3 1 48.7294 + 1978 4 1 48.8365 + 1978 5 1 48.9353 + 1978 6 1 49.0319 + 1978 7 1 49.1013 + 1978 8 1 49.1591 + 1978 9 1 49.2286 + 1978 10 1 49.3070 + 1978 11 1 49.4018 + 1978 12 1 49.4945 + 1979 1 1 49.5861 + 1979 2 1 49.6805 + 1979 3 1 49.7602 + 1979 4 1 49.8556 + 1979 5 1 49.9489 + 1979 6 1 50.0347 + 1979 7 1 50.1019 + 1979 8 1 50.1622 + 1979 9 1 50.2260 + 1979 10 1 50.2968 + 1979 11 1 50.3831 + 1979 12 1 50.4599 + 1980 1 1 50.5387 + 1980 2 1 50.6160 + 1980 3 1 50.6866 + 1980 4 1 50.7658 + 1980 5 1 50.8454 + 1980 6 1 50.9187 + 1980 7 1 50.9761 + 1980 8 1 51.0278 + 1980 9 1 51.0843 + 1980 10 1 51.1538 + 1980 11 1 51.2319 + 1980 12 1 51.3063 + 1981 1 1 51.3808 + 1981 2 1 51.4526 + 1981 3 1 51.5160 + 1981 4 1 51.5985 + 1981 5 1 51.6809 + 1981 6 1 51.7573 + 1981 7 1 51.8133 + 1981 8 1 51.8532 + 1981 9 1 51.9014 + 1981 10 1 51.9603 + 1981 11 1 52.0328 + 1981 12 1 52.0985 + 1982 1 1 52.1668 + 1982 2 1 52.2316 + 1982 3 1 52.2938 + 1982 4 1 52.3680 + 1982 5 1 52.4465 + 1982 6 1 52.5180 + 1982 7 1 52.5751 + 1982 8 1 52.6178 + 1982 9 1 52.6668 + 1982 10 1 52.7340 + 1982 11 1 52.8056 + 1982 12 1 52.8792 + 1983 1 1 52.9565 + 1983 2 1 53.0445 + 1983 3 1 53.1268 + 1983 4 1 53.2197 + 1983 5 1 53.3024 + 1983 6 1 53.3747 + 1983 7 1 53.4335 + 1983 8 1 53.4778 + 1983 9 1 53.5300 + 1983 10 1 53.5845 + 1983 11 1 53.6523 + 1983 12 1 53.7256 + 1984 1 1 53.7882 + 1984 2 1 53.8367 + 1984 3 1 53.8830 + 1984 4 1 53.9443 + 1984 5 1 54.0042 + 1984 6 1 54.0536 + 1984 7 1 54.0856 + 1984 8 1 54.1084 + 1984 9 1 54.1463 + 1984 10 1 54.1914 + 1984 11 1 54.2452 + 1984 12 1 54.2958 + 1985 1 1 54.3427 + 1985 2 1 54.3911 + 1985 3 1 54.4320 + 1985 4 1 54.4898 + 1985 5 1 54.5456 + 1985 6 1 54.5977 + 1985 7 1 54.6355 + 1985 8 1 54.6532 + 1985 9 1 54.6776 + 1985 10 1 54.7174 + 1985 11 1 54.7741 + 1985 12 1 54.8253 + 1986 1 1 54.8712 + 1986 2 1 54.9161 + 1986 3 1 54.9581 + 1986 4 1 54.9997 + 1986 5 1 55.0476 + 1986 6 1 55.0912 + 1986 7 1 55.1132 + 1986 8 1 55.1328 + 1986 9 1 55.1532 + 1986 10 1 55.1898 + 1986 11 1 55.2416 + 1986 12 1 55.2838 + 1987 1 1 55.3222 + 1987 2 1 55.3613 + 1987 3 1 55.4063 + 1987 4 1 55.4629 + 1987 5 1 55.5111 + 1987 6 1 55.5524 + 1987 7 1 55.5812 + 1987 8 1 55.6004 + 1987 9 1 55.6262 + 1987 10 1 55.6656 + 1987 11 1 55.7168 + 1987 12 1 55.7698 + 1988 1 1 55.8197 + 1988 2 1 55.8615 + 1988 3 1 55.9130 + 1988 4 1 55.9663 + 1988 5 1 56.0220 + 1988 6 1 56.0700 + 1988 7 1 56.0939 + 1988 8 1 56.1105 + 1988 9 1 56.1314 + 1988 10 1 56.1611 + 1988 11 1 56.2068 + 1988 12 1 56.2582 + 1989 1 1 56.3000 + 1989 2 1 56.3399 + 1989 3 1 56.3790 + 1989 4 1 56.4283 + 1989 5 1 56.4804 + 1989 6 1 56.5352 + 1989 7 1 56.5697 + 1989 8 1 56.5983 + 1989 9 1 56.6328 + 1989 10 1 56.6739 + 1989 11 1 56.7332 + 1989 12 1 56.7972 + 1990 1 1 56.8553 + 1990 2 1 56.9111 + 1990 3 1 56.9755 + 1990 4 1 57.0471 + 1990 5 1 57.1136 + 1990 6 1 57.1738 + 1990 7 1 57.2226 + 1990 8 1 57.2597 + 1990 9 1 57.3073 + 1990 10 1 57.3643 + 1990 11 1 57.4334 + 1990 12 1 57.5016 + 1991 1 1 57.5653 + 1991 2 1 57.6333 + 1991 3 1 57.6973 + 1991 4 1 57.7711 + 1991 5 1 57.8407 + 1991 6 1 57.9058 + 1991 7 1 57.9576 + 1991 8 1 57.9975 + 1991 9 1 58.0425 + 1991 10 1 58.1043 + 1991 11 1 58.1679 + 1991 12 1 58.2389 + 1992 1 1 58.3092 + 1992 2 1 58.3833 + 1992 3 1 58.4537 + 1992 4 1 58.5401 + 1992 5 1 58.6228 + 1992 6 1 58.6917 + 1992 7 1 58.7410 + 1992 8 1 58.7836 + 1992 9 1 58.8406 + 1992 10 1 58.8986 + 1992 11 1 58.9714 + 1992 12 1 59.0438 + 1993 1 1 59.1218 + 1993 2 1 59.2003 + 1993 3 1 59.2747 + 1993 4 1 59.3574 + 1993 5 1 59.4434 + 1993 6 1 59.5242 + 1993 7 1 59.5850 + 1993 8 1 59.6343 + 1993 9 1 59.6928 + 1993 10 1 59.7588 + 1993 11 1 59.8386 + 1993 12 1 59.9111 + 1994 1 1 59.9845 + 1994 2 1 60.0564 + 1994 3 1 60.1231 + 1994 4 1 60.2042 + 1994 5 1 60.2804 + 1994 6 1 60.3530 + 1994 7 1 60.4012 + 1994 8 1 60.4440 + 1994 9 1 60.4900 + 1994 10 1 60.5578 + 1994 11 1 60.6324 + 1994 12 1 60.7059 + 1995 1 1 60.7853 + 1995 2 1 60.8663 + 1995 3 1 60.9387 + 1995 4 1 61.0277 + 1995 5 1 61.1103 + 1995 6 1 61.1870 + 1995 7 1 61.2454 + 1995 8 1 61.2881 + 1995 9 1 61.3378 + 1995 10 1 61.4036 + 1995 11 1 61.4760 + 1995 12 1 61.5525 + 1996 1 1 61.6287 + 1996 2 1 61.6846 + 1996 3 1 61.7433 + 1996 4 1 61.8132 + 1996 5 1 61.8823 + 1996 6 1 61.9497 + 1996 7 1 61.9969 + 1996 8 1 62.0343 + 1996 9 1 62.0714 + 1996 10 1 62.1202 + 1996 11 1 62.1809 + 1996 12 1 62.2382 + 1997 1 1 62.2950 + 1997 2 1 62.3506 + 1997 3 1 62.3995 + 1997 4 1 62.4754 + 1997 5 1 62.5463 + 1997 6 1 62.6136 + 1997 7 1 62.6571 + 1997 8 1 62.6942 + 1997 9 1 62.7383 + 1997 10 1 62.7926 + 1997 11 1 62.8567 + 1997 12 1 62.9146 + 1998 1 1 62.9659 + 1998 2 1 63.0217 + 1998 3 1 63.0807 + 1998 4 1 63.1462 + 1998 5 1 63.2053 + 1998 6 1 63.2599 + 1998 7 1 63.2844 + 1998 8 1 63.2961 + 1998 9 1 63.3126 + 1998 10 1 63.3422 + 1998 11 1 63.3871 + 1998 12 1 63.4339 + 1999 1 1 63.4673 + 1999 2 1 63.4979 + 1999 3 1 63.5319 + 1999 4 1 63.5679 + 1999 5 1 63.6104 + 1999 6 1 63.6444 + 1999 7 1 63.6642 + 1999 8 1 63.6739 + 1999 9 1 63.6926 + 1999 10 1 63.7147 + 1999 11 1 63.7518 + 1999 12 1 63.7927 + 2000 1 1 63.8285 + 2000 2 1 63.8557 + 2000 3 1 63.8804 + 2000 4 1 63.9075 + 2000 5 1 63.9393 + 2000 6 1 63.9691 + 2000 7 1 63.9799 + 2000 8 1 63.9833 + 2000 9 1 63.9938 + 2000 10 1 64.0093 + 2000 11 1 64.0400 + 2000 12 1 64.0670 + 2001 1 1 64.0908 + 2001 2 1 64.1068 + 2001 3 1 64.1282 + 2001 4 1 64.1584 + 2001 5 1 64.1833 + 2001 6 1 64.2094 + 2001 7 1 64.2117 + 2001 8 1 64.2073 + 2001 9 1 64.2116 + 2001 10 1 64.2223 + 2001 11 1 64.2500 + 2001 12 1 64.2761 + 2002 1 1 64.2998 + 2002 2 1 64.3192 + 2002 3 1 64.3450 + 2002 4 1 64.3735 + 2002 5 1 64.3943 + 2002 6 1 64.4151 + 2002 7 1 64.4132 + 2002 8 1 64.4118 + 2002 9 1 64.4097 + 2002 10 1 64.4168 + 2002 11 1 64.4329 + 2002 12 1 64.4511 + 2003 1 1 64.4734 + 2003 2 1 64.4893 + 2003 3 1 64.5053 + 2003 4 1 64.5269 + 2003 5 1 64.5471 + 2003 6 1 64.5597 + 2003 7 1 64.5512 + 2003 8 1 64.5371 + 2003 9 1 64.5359 + 2003 10 1 64.5415 + 2003 11 1 64.5544 + 2003 12 1 64.5654 + 2004 1 1 64.5736 + 2004 2 1 64.5891 + 2004 3 1 64.6015 + 2004 4 1 64.6176 + 2004 5 1 64.6374 + 2004 6 1 64.6549 + 2004 7 1 64.6530 + 2004 8 1 64.6379 + 2004 9 1 64.6372 + 2004 10 1 64.6400 + 2004 11 1 64.6543 + 2004 12 1 64.6723 + 2005 1 1 64.6876 + 2005 2 1 64.7052 + 2005 3 1 64.7313 + 2005 4 1 64.7575 + 2005 5 1 64.7811 + 2005 6 1 64.8001 + 2005 7 1 64.7995 + 2005 8 1 64.7876 + 2005 9 1 64.7831 + 2005 10 1 64.7921 + 2005 11 1 64.8096 + 2005 12 1 64.8311 + 2006 1 1 64.8452 + 2006 2 1 64.8597 + 2006 3 1 64.8850 + 2006 4 1 64.9175 + 2006 5 1 64.9480 + 2006 6 1 64.9794 + 2006 7 1 64.9895 + 2006 8 1 65.0028 + 2006 9 1 65.0138 + 2006 10 1 65.0371 + 2006 11 1 65.0773 + 2006 12 1 65.1122 + 2007 1 1 65.1464 + 2007 2 1 65.1833 + 2007 3 1 65.2145 + 2007 4 1 65.2494 + 2007 5 1 65.2921 + 2007 6 1 65.3279 + 2007 7 1 65.3413 + 2007 8 1 65.3452 + 2007 9 1 65.3496 + 2007 10 1 65.3711 + 2007 11 1 65.3972 + 2007 12 1 65.4296 + 2008 1 1 65.4573 + 2008 2 1 65.4868 + 2008 3 1 65.5152 + 2008 4 1 65.5450 + 2008 5 1 65.5781 + 2008 6 1 65.6127 + 2008 7 1 65.6287 + 2008 8 1 65.6370 + 2008 9 1 65.6493 + 2008 10 1 65.6760 + 2008 11 1 65.7097 + 2008 12 1 65.7461 + 2009 1 1 65.7768 + 2009 2 1 65.8025 + 2009 3 1 65.8237 + 2009 4 1 65.8595 + 2009 5 1 65.8973 + 2009 6 1 65.9323 + 2009 7 1 65.9509 + 2009 8 1 65.9534 + 2009 9 1 65.9628 + 2009 10 1 65.9839 + 2009 11 1 66.0147 + 2009 12 1 66.0420 + 2010 1 1 66.0699 + 2010 2 1 66.0961 + 2010 3 1 66.1310 + 2010 4 1 66.1683 + 2010 5 1 66.2072 + 2010 6 1 66.2356 + 2010 7 1 66.2409 + 2010 8 1 66.2335 + 2010 9 1 66.2349 + 2010 10 1 66.2441 + 2010 11 1 66.2751 + 2010 12 1 66.3054 + 2011 1 1 66.3246 + 2011 2 1 66.3406 + 2011 3 1 66.3624 + 2011 4 1 66.3957 + 2011 5 1 66.4289 + 2011 6 1 66.4619 + 2011 7 1 66.4749 + 2011 8 1 66.4751 + 2011 9 1 66.4829 + 2011 10 1 66.5056 + 2011 11 1 66.5383 + 2011 12 1 66.5706 + 2012 1 1 66.6030 + 2012 2 1 66.6340 + 2012 3 1 66.6569 + 2012 4 1 66.6925 + 2012 5 1 66.7289 + 2012 6 1 66.7579 + 2012 7 1 66.7708 + 2012 8 1 66.7740 + 2012 9 1 66.7846 + 2012 10 1 66.8103 + 2012 11 1 66.8400 + 2012 12 1 66.8779 + 2013 1 1 66.9069 + 2013 2 1 66.9443 + 2013 3 1 66.9762 + 2013 4 1 67.0258 + 2013 5 1 67.0716 + 2013 6 1 67.1100 + 2013 7 1 67.1266 + 2013 8 1 67.1331 + 2013 9 1 67.1458 + 2013 10 1 67.1717 + 2013 11 1 67.2091 + 2013 12 1 67.2460 + 2014 1 1 67.2810 + 2014 2 1 67.3136 + 2014 3 1 67.3457 + 2014 4 1 67.3890 + 2014 5 1 67.4318 + 2014 6 1 67.4666 + 2014 7 1 67.4858 + 2014 8 1 67.4989 + 2014 9 1 67.5111 + 2014 10 1 67.5353 + 2014 11 1 67.5711 + 2014 12 1 67.6070 + 2015 1 1 67.6439 + 2015 2 1 67.6765 + 2015 3 1 67.7117 + 2015 4 1 67.7591 + 2015 5 1 67.8012 + 2015 6 1 67.8402 + 2015 7 1 67.8606 + 2015 8 1 67.8822 + 2015 9 1 67.9120 + 2015 10 1 67.9546 + 2015 11 1 68.0055 + 2015 12 1 68.0514 + 2016 1 1 68.1024 + 2016 2 1 68.1577 + 2016 3 1 68.2044 + 2016 4 1 68.2664 + 2016 5 1 68.3188 + 2016 6 1 68.3704 + 2016 7 1 68.3964 + 2016 8 1 68.4094 + 2016 9 1 68.4305 + 2016 10 1 68.4630 + 2016 11 1 68.5078 + 2016 12 1 68.5537 + 2017 1 1 68.5927 + 2017 2 1 68.6298 + 2017 3 1 68.6671 + 2017 4 1 68.7135 + 2017 5 1 68.7623 + 2017 6 1 68.8033 + 2017 7 1 68.8245 + 2017 8 1 68.8373 + 2017 9 1 68.8477 + 2017 10 1 68.8689 + 2017 11 1 68.9006 + 2017 12 1 68.9355 + 2018 1 1 68.9676 + 2018 2 1 68.9875 + 2018 3 1 69.0175 + 2018 4 1 69.0499 + 2018 5 1 69.0823 + 2018 6 1 69.1070 + 2018 7 1 69.1134 + 2018 8 1 69.1142 + 2018 9 1 69.1207 + 2018 10 1 69.1356 + 2018 11 1 69.1646 + 2018 12 1 69.1964 + 2019 1 1 69.2201 diff --git a/deltat.preds b/deltat.preds new file mode 100644 index 0000000..7a65c88 --- /dev/null +++ b/deltat.preds @@ -0,0 +1,37 @@ + MJD YEAR TT-UT Pred UT1-UTC Pred ERROR + 58484.000 2019.00 69.34 -0.152 0.117 + 58575.000 2019.25 69.48 -0.295 0.162 + 58666.000 2019.50 69.62 -0.440 0.215 + 58758.000 2019.75 69.71 -0.527 0.273 + 58849.000 2020.00 69.87 0.335 + 58940.000 2020.25 70.03 0.399 + 59032.000 2020.50 70.16 0.465 + 59123.000 2020.75 70.24 0.532 + 59214.000 2021.00 70.39 0.600 + 59306.000 2021.25 70.55 0.668 + 59397.000 2021.50 70.68 0.736 + 59488.000 2021.75 70.76 0.803 + 59580.000 2022.00 70.91 0.870 + 59671.000 2022.25 71.06 0.936 + 59762.000 2022.50 71.18 1.000 + 59853.000 2022.75 71.25 1.064 + 59945.000 2023.00 71.40 1.126 + 60036.000 2023.25 71.54 1.186 + 60127.000 2023.50 71.67 1.245 + 60219.000 2023.75 71.74 1.302 + 60310.000 2024.00 71.88 1.358 + 60401.000 2024.25 72.03 1.411 + 60493.000 2024.50 72.15 1.463 + 60584.000 2024.75 72.22 1.514 + 60675.000 2025.00 72.36 1.562 + 60767.000 2025.25 72.50 1.609 + 60858.000 2025.50 72.62 1.654 + 60949.000 2025.75 72.69 1.697 + 61041.000 2026.00 72.83 1.738 + 61132.000 2026.25 72.98 1.778 + 61223.000 2026.50 73.10 1.816 + 61314.000 2026.75 73.17 1.853 + 61406.000 2027.00 73.32 1.887 + 61497.000 2027.25 73.46 1.921 + 61588.000 2027.50 73.58 1.953 + 61680.000 2027.75 73.66 1.983 diff --git a/server/requirments.txt b/requirments.txt similarity index 100% rename from server/requirments.txt rename to requirments.txt diff --git a/satnogs.py b/satnogs.py new file mode 100644 index 0000000..4657eae --- /dev/null +++ b/satnogs.py @@ -0,0 +1,226 @@ +from datetime import datetime , timedelta +import requests +from tqdm import tqdm +from flask import Flask , render_template,redirect,url_for +import json +from collections import defaultdict +import random +from apscheduler.schedulers.background import BackgroundScheduler +from satnogs_api_client import fetch_satellites, DB_BASE_URL,fetch_tle_of_observation ,get_paginated_endpoint +from satellite_tle import fetch_tles +from skyfield.api import EarthSatellite,utc,load + +scheduler = BackgroundScheduler() +app = Flask(__name__) + +ts = load.timescale() + + +broken = defaultdict(set) + +Sats = defaultdict(list) +Passes = defaultdict(list) +Stations = [] +TLEs = defaultdict(list) +Transmitters = defaultdict(dict) +CZML = [] + +def getFuture(): + print "Getting future Passes" + global Sats + global TLEs + + observations = defaultdict(dict ) + + start = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S%z') + end = (datetime.utcnow() + timedelta(hours=4,minutes=30)).strftime('%Y-%m-%dT%H:%M:%S%z') + + passes = get_paginated_endpoint("https://network.satnogs.org/api/jobs/") + obs = get_paginated_endpoint("https://network.satnogs.org/api/observations/?end="+end+"&format=json&start="+start) + for x in tqdm(obs): + observations[x["id"]] = x + ground_stations = {} + Sats = defaultdict(list) + for x in tqdm(passes): + if x["id"] in observations: + try: + start = datetime.strptime(x["start"],'%Y-%m-%dT%H:%M:%Sz') + start = start.replace(tzinfo=utc) + end = datetime.strptime(x["end"],'%Y-%m-%dT%H:%M:%Sz') + end = end.replace(tzinfo=utc) + # "transmitter":Transmitters[observations[x["id"]]["norad_cat_id"]][x["transmitter"]] + Sats[observations[x["id"]]["norad_cat_id"]].append({"station":x["ground_station"],"transmitter":Transmitters[observations[x["id"]]["norad_cat_id"]][x["transmitter"]],"start":start,"end":end,"id":x["id"]}) + TLEs[observations[x["id"]]["norad_cat_id"]]=[x["tle0"],x["tle1"],x["tle2"]] + except Exception as e: + print "Error on observation number: "+str(x["id"])+ " "+str(e) + broken[observations[x["id"]]["norad_cat_id"]].update([x["transmitter"]]) + print str(len(Sats))+" Future passes found." + + + +def GetGroundStations(): + print "Getting Ground Stations" + + stations = get_paginated_endpoint("https://network.satnogs.org/api/stations/") + + + + + return stations + + +def updateTLE(): + print "Updating TLE" + global TLEs + sats = fetch_satellites(None,DB_BASE_URL) + satnogs_db_norad_ids = set(sat['norad_cat_id'] for sat in sats if sat['status'] != 're-entered') + # Remove satellites with temporary norad ids + temporary_norad_ids = set(filter(lambda norad_id: norad_id >= 99900, satnogs_db_norad_ids)) + satnogs_db_norad_ids = satnogs_db_norad_ids - temporary_norad_ids + + # Fetch TLEs for the satellites of interest + + tles = fetch_tles(satnogs_db_norad_ids) + TLEs = {} + for norad_id, (source, tle) in tqdm(tles.items()): + TLEs[norad_id] = [str(tle[0]),str(tle[1]),str(tle[2])] + print('\nTLEs for {} of {} requested satellites found ({} satellites with temporary norad ids skipped).'.format(len(tles), len(satnogs_db_norad_ids), len(temporary_norad_ids))) + + + +@scheduler.scheduled_job('interval',days=5) +def updateTransmitters(): + global Transmitters + print "Updating Transmitters" + temp = requests.get("https://db.satnogs.org/api/transmitters/").json() + for x in tqdm(temp): + Transmitters[x["norad_cat_id"]][x["uuid"]] = [x["description"],[random.randint(0,255),random.randint(0,255),random.randint(0,255),255]] + +@scheduler.scheduled_job('interval',hours=1) +def updatePasses(): + getFuture() + +@scheduler.scheduled_job('interval',hours=1) +def updateStations(): + global Stations + print "Updating Stations" + Stations = GetGroundStations() + +@scheduler.scheduled_job('interval',minutes=30) +def updateCZML(): + doc = {} + doc["id"] = "document" + doc["name"] = "sats" + doc["version"]="1.0" + doc["clock"]={} + doc["clock"]["interval"]="0000-00-00T00:00:00Z/9999-12-31T24:00:00Z" + doc["clock"]["currentTime"] = datetime.utcnow().isoformat()+"Z" + doc["clock"]["step"] = "SYSTEM_CLOCK_MULTIPLER" + CZML.append(doc) + + StationList = {} + + for x in tqdm(Stations): + color = [0,230,64,255] + if x["status"] == "Testing": + color = [248,148,6,255] + if x["status"] == "Offline": + color = [255,0,0,50] + + station = {} + station["id"] = str(x["id"]) + station["name"] = x["name"] + station["point"] = {} + station["show"] = True + station["point"]["color"] = {} + station["point"]["color"]["rgba"] = color + station["point"]["outlineColor"] = {} + station["point"]["outlineColor"]["rgba"] = [255,255,255,color[3]] + station["point"]["outlineWidth"] = 2.0 + station["position"] = {} + station["point"]["pixelSize"]=7.0 + station["position"]["cartographicDegrees"] = [x["lng"],x['lat'],x["altitude"]] + station["description"] = "ID: "+str(x["id"])+"
Total Observations: "+str(x["observations"])+"
Status: "+x["status"]+"
QTH: "+x["qthlocator"]+"
Description: "+x["description"] + CZML.append(station) + + + + #CZML.append({"point": {"color": {"rgba": [255, 0, 0, 255]}, "pixelSize": 7.0}, "position": {"interpolationDegree": 5, "epoch": "2019-02-20T18:15:31Z", "cartographicRadians": [0, 0.3926577985153905, 1.1691578160879883, 656892.3748016874, 60, 0.3350659338545192, 1.1089605458602834, 655874.386965892, 120, 0.2890197452488876, 1.047837527650023, 654785.5379851013, 180, 0.2509867794693532, 0.9860631482739753, 653641.7898772621, 240, 0.21870672074331488, 0.9238091562480084, 652460.3348020877, 300, 0.19067493892518161, 0.8611882322528641, 651259.3247753858, 360, 0.16585423673939337, 0.7982775055158141, 650057.5822615812, 420, 0.14350728383857447, 0.7351319146596802, 648874.2959984386, 480, 0.12309537649675795, 0.6717921438438812, 647728.7068061114, 540, 0.10421508370803956, 0.60828951924056, 646639.7884730175], "referenceFrame": "INERTIAL", "interpolationAlgorithm": "LAGRANGE"}, "show": True, "id": "485092", "name": "KKS-1 (KISEKI)"}) + #return + + for x in tqdm(Sats.keys()): + for y in Sats[x]: + sat = {} + sat["id"] = str(y["id"]) + sat["name"] = TLEs[x][0] + sat["show"] = True + sat["point"] = {} + sat["point"]["color"] = {} + sat["point"]["color"]["rgba"] = [255,0,0,255] + sat["point"]["pixelSize"]=8.0 + sat["position"] = {} + sat["position"]["cartographicDegrees"]=[] + temp = y["start"] + satObj = EarthSatellite(TLEs[x][1],TLEs[x][2],TLEs[x][0]) + time = 0 + while temp <= y["end"]+timedelta(minutes=1): + + subpoint = satObj.at(ts.utc(temp)).subpoint() + lat = subpoint.latitude.degrees + lng = subpoint.longitude.degrees + elevation = subpoint.elevation.m + sat["position"]["cartographicDegrees"].extend([time,lng,lat,elevation]) + time+=60 + temp = temp+timedelta(minutes=1) + sat["position"]["interpolationAlgorithm"] = "LAGRANGE" + sat["position"]["interpolationDegree"] = 5 + sat["position"]["epoch"] = (y["start"].isoformat()+"Z").replace("+00:00","") + sat["path"] = {"show":{"interval":(y["start"].isoformat()+"Z").replace("+00:00","")+"/"+((y["end"]+timedelta(minutes=1)).isoformat()+"Z").replace("+00:00",""),"boolean":True},"width":2,"material":{"solidColor":{"color":{"rgba":[0,255,0,255]}}},"leadTime":100000,"trailTime":100000 } + + ##sat["label"] = {"show":{"interval":(y["start"].isoformat()+"Z").replace("+00:00","")+"/"+((y["end"]+timedelta(minutes=1)).isoformat()+"Z").replace("+00:00",""),"boolean":True},"horizontalOrigin":"LEFT","font":"12px sans-serif","text":TLEs[x][0]} + CZML.append(sat) + for x in tqdm(Sats.keys()): + for y in Sats[x]: + sat = {} + sat["id"] = str(y["id"])+"Link" + sat["polyline"] = {"show":{"interval":(y["start"].isoformat()+"Z").replace("+00:00","")+"/"+((y["end"]+timedelta(minutes=1)).isoformat()+"Z").replace("+00:00",""),"boolean":True},"width":3,"material":{"solidColor":{"color":{"rgba":[255,0,0,255]}}},"followSurface":False,"positions":{"references":[str(y["id"])+"#position",str(y["station"])+"#position"]}} + CZML.append(sat) + + + +@app.route("/") +def index(): + return render_template("index.html") + + + +@app.route('/future_sats') +def api_future_sats(): + return json.dumps(Sats) + +@app.route("/czml") +def api_czml(): + return json.dumps(CZML) + +@app.route("/broken") +def api_broken(): + output = defaultdict(list) + for x in broken.keys(): + output[x]=list(broken[x]) + + + return json.dumps(output) + + + + + +#updatePasses() +updateStations() +updateTransmitters() +getFuture() +updateCZML() +#updateTLE() +#updatePasses() +scheduler.start() +app.run(use_reloader=False,host = "0.0.0.0",port=5001) \ No newline at end of file diff --git a/server/satnogs_api_client.py b/satnogs_api_client.py similarity index 100% rename from server/satnogs_api_client.py rename to satnogs_api_client.py diff --git a/satnogs_api_client.pyc b/satnogs_api_client.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91a2e0bcb2f30ce869fb71493d419f57f5680b25 GIT binary patch literal 5049 zcmcIo(QX^Z6}_{RC{d<@977$=iFJ*lw=eIDv9Rs?#%4W?7iold)KvpEiU}y zgSEY`RDS_}e=bJsKVc;JXQVGOFtTgJ@H&uwAiIH%!LG?}O%k*-lFZ2NtR%CtTbHCR zyK|hJ%*j`{xgqI-B=c%tQ@f#dQ|$${7bUqSUy1B4X=hVAuS>G1oy(Fesc}P+>uRh> ziY=CP+D-1Y)4G8}XaB}u%fNC=Xoh8$yXat)cU@NG9s4@^4xJm?yX|(Ky5AM$@jFTS z#fFVtUi9onQTFVs7w4QA|Mt{)vVUgiJ7Y$QC&cD$>vLV?V#2=B|z&teECWi-VyC?i#E?{4~ONnPGW$mbyw3 zW5q>W@)*%D?xhh9)Fyu0_oF*9-KohsOD`>>5n1!Gj+%`7?TB|{q z9-?!6kP+a0Tp$Jr!O4sq2?JHWB6y;_CN7XaqsLSsp2Ygg85z$Cp7&&yQ61MA;XjES z040HZja%xnjR8M~iz-g`BW(73+{S~ni+yY<~jFYGvyC_RO zd_MjWLR2~$cs%@c>1)E2F@KK`eFFxN`T46dR)i%YYdH3CAZ3k*|I|Ez1Q;BGx49;o z={-6=I6B5=<0p>cojRW<>-^-tEYVvoEtIx_rSJ7pKxSBOwQ*q?rn=Nji||tn04iS@(kK*BQ9oDo@eV9fJ69VKD2;xFszt3PHK$X{X z6{+$*1&e{KQO*EjgepNSVIWc$1F3=23^uQUY+MK=W6)7Hbc#H+#M{nsHXLSoZ@pI* zqdZ{(frPEU$q8?6_@Fa>RnV((+h)KQ(61Z=nUr;!{Qo-yLT)-0d@|N=t;q{}g9twU zj=(rOW*tk8vwfH!exHk86%y94xJSadjmh1I7_`KS1ONlmlBuIrNCc~9BJXs)GWQM) z#NSsSBxOJ!vJ~;8RLuudK|;e+rSv?*L9**K9H)842ZY!=$2%4O?FSPLRUUf(6RjbA zd}W@a7&YDkaz$CGw! z#eyj0u!OxgEYq!b*IOHJzjbfF+`8kfHhV37{qB0kw4(N%^^9FDCZs9Cs8UXZ zQ<>^ectHnP`l)={G%mY`N;krBs4NWExsHmaQbE%f`QQkasU!Om?$8bTx2h6 zAQ^WLQTp*fm>;=*8r?Z__1;ye>?_#LBZM0k2h+Lnw-~d85bM4MK4?L*mEfki=@G;1 zGC>TF2YgiJyrQQIqcHq9Tz@{ki?0@^p8AZrit(_pPBSX&pplLE zJ{!J)(eTG;ycDZCe8@X^8&2YXV;635;(az0X??U|{H$NZiHF8j6);pTo;;eU)L+r# zrFCw>%vGO-;JUemZ;P7i2#W~+k>f@s-eN;sN%#&MK9#TVIWK%0jaF(XGNxbF!XI*! zTdU_jDMxAeU3UF|&0B0py^z&(_)|7NWAg! datetime.utcnow() or datetime.strptime(x["end"],'%Y-%m-%dT%H:%M:%Sz') < datetime.utcnow(): - passes.remove(x) - else: - if ground_stations.has_key(x["ground_station"]): - ground_stations[x["ground_station"]].append(x) - else: - ground_stations[x["ground_station"]] = [] - ground_stations[x["ground_station"]].append(x) - passes = [] - for x in ground_stations: - start = datetime.utcnow() - current = {"start":datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S%z')+"z"} - for y in ground_stations[x]: - if datetime.strptime(y["start"],'%Y-%m-%dT%H:%M:%Sz') < datetime.strptime(current["start"],'%Y-%m-%dT%H:%M:%Sz'): - current = y - passes.append(current) - Passes =[] - for x in passes: - temp = Pass() - temp.id = x["id"] - temp.start = datetime.strptime(x["start"],'%Y-%m-%dT%H:%M:%Sz') - temp.end = datetime.strptime(x["end"],'%Y-%m-%dT%H:%M:%Sz') - temp.ground_station = x["ground_station"] - temp.transmitter = x["transmitter"] - temp.norad = str(x["norad_cat_id"]) - try: - temp.satellite = requests.get("https://db.satnogs.org/api/satellites/"+str(x["norad_cat_id"])).json() - except: - temp.satellite = {"name":""} - Passes.append(temp) - - - - return Passes - - -def GetGroundStations(): - stations = get_paginated_endpoint("https://network.satnogs.org/api/stations/?status=2") - stations += get_paginated_endpoint("https://network.satnogs.org/api/stations/?status=1") - - for x in stations: - - if x["last_seen"] == None: - stations.remove(x) - continue - if x["status"] == "Offline": - stations.remove(x) - continue - - if datetime.strptime(x["last_seen"],'%Y-%m-%dT%H:%M:%Sz') < (datetime.utcnow()- timedelta(10,0,0,0)): - stations.remove(x) - for x in stations: - if x["last_seen"] == None: - stations.remove(x) - continue - - if x["status"] == "Offline": - stations.remove(x) - continue - - if datetime.strptime(x["last_seen"],'%Y-%m-%dT%H:%M:%Sz') < (datetime.utcnow()- timedelta(10,0,0,0)): - stations.remove(x) - - - return stations - -@scheduler.scheduled_job('interval',days=5) -def updateTransmitters(): - global Transmitters - print "Updating Transmitters" - temp = requests.get("https://db.satnogs.org/api/transmitters/").json() - for x in temp: - if str(x["norad_cat_id"]) in Transmitters.keys(): - Transmitters[str(x["norad_cat_id"])][x["uuid"]] = [x["description"],"#"+str("%06x" % random.randint(0, 0xFFFFFF))] - else: - Transmitters[str(x["norad_cat_id"])]={} - Transmitters[str(x["norad_cat_id"])][x["uuid"]] = [x["description"],"#"+str("%06x" % random.randint(0, 0xFFFFFF))] - #print Transmitters - -@scheduler.scheduled_job('interval',minutes=2) -def updatePasses(): - global Passes - global Occuring_sats - print "Updating Passes" - Passes = getActive() - Occuring_sats = {} - for x in Passes: - if x.satellite['norad_cat_id'] not in TLEs.keys(): - q = fetch_tle_of_observation(x.id) - TLEs[ x.norad ] = [str(x.satellite["name"]),str(q[0]),str(q[1])] - Occuring_sats[x.norad] = TLEs[x.norad] - -@scheduler.scheduled_job('interval',hours=1) -def updateStations(): - global Stations - print "Updating Stations" - Stations = GetGroundStations() - -@scheduler.scheduled_job('interval',days=1) -def updateTLE(): - print "Updating TLE" - global TlEs - sats = fetch_satellites(None,DB_BASE_URL) - satnogs_db_norad_ids = set(sat['norad_cat_id'] for sat in sats if sat['status'] != 're-entered') - # Remove satellites with temporary norad ids - temporary_norad_ids = set(filter(lambda norad_id: norad_id >= 99900, satnogs_db_norad_ids)) - satnogs_db_norad_ids = satnogs_db_norad_ids - temporary_norad_ids - - # Fetch TLEs for the satellites of interest - - tles = fetch_tles(satnogs_db_norad_ids) - TLEs = {} - for norad_id, (source, tle) in tles.items(): - TLEs[norad_id] = [str(tle[0]),str(tle[1]),str(tle[2])] - print('\nTLEs for {} of {} requested satellites found ({} satellites with temporary norad ids skipped).'.format(len(tles), len(satnogs_db_norad_ids), len(temporary_norad_ids))) - - -@app.route("/") -def index(): - return render_template("index.html") - - -@app.route('/active_stations') -def api_active_stations(): - sations = [] - for x in Stations: - sations.append({'id':x['id'],'name':x['name'],'lat_lng':[x["lat"],x['lng'],x["altitude"]],'type':x["status"],'description':x["description"],'total_obs':x["observations"],'qthlocator':x["qthlocator"]}) - return json.dumps(sations) - -@app.route('/stations_from_sat/') -def api_occuring_observations(norad): - obs = [] - trans = [] - for x in Passes: - if x.norad == norad: - obs.append([x.ground_station,Transmitters[norad][x.transmitter][1]]) - trans.append(x.transmitter) - #print Transmitters[norad].values() - - transList = [] - for x in set(trans): - transList.append(Transmitters[norad][x]) - #print transList,norad - return json.dumps([obs,transList]) - -@app.route('/occuring_sats') -def api_occuring_sats(): - return json.dumps(Occuring_sats) - - - - - -updatePasses() -updateStations() -updateTLE() -updateTransmitters() -scheduler.start() -app.run(use_reloader=False,host = "0.0.0.0",port=5001) \ No newline at end of file diff --git a/server/satnogs_api_client.pyc b/server/satnogs_api_client.pyc deleted file mode 100644 index 056e5206cf9a13d75cccc5f714cea6a178b2d18a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5133 zcmcIoU2hx56}_{RC{d<9EZ0@sq>b7l4HGwF;~*;PI7)5HD2fyeu!<8vRk~PlSJX=6 zF1<5M?OJ?k(zGbh*S_=@^sRrRzo$Q-J?GAfrX-^%P)Rh0cV}j2X74@c+`F#*YjNT4 zAKcpOO7$1u_vd27{sTsWe@6Nu10%ae46g&}2eKRJ80?zt)+9kYBgu^H&Pp;XyLCzG zvOCAg$(($Rn;ViYNHVYXHMJXRH`QKHdr^{W^0mnBl6E$=b6Ju_?Oc&$Nsa50EUU39 zDYjVAX*amnPU|`jo&6hsEd$Ffp&6E0?xKTH-gQ}#ckJuvJ9KVn@3z}{>V8|4$L}QR zmm4;AdC{{QMcK2jUYv7g{M%FG$^Mz4@0=MrzjBxEoyE6???bxzZ!nz5k)fwgM7|O; z4&)?|qX4!TS~XhZnmq0EDcLh4$8{94XQ`_s zF;-l}C65se<6au!U@dfrHuhs!5AW_hwrOeix`)|*wzr+yV^<9Kc6^ApV|)0Zh|6Rz zOuI#r?qTYeX}MP+Ac}`s)a_^3dt>;_G1ho4Zk6S+OA{O_85RH)PhnTlh*>oYK{L2* zt_QT%f-W6JANg1#&ilAPC=iL0895Tht9(W9V0lekAb&!SsUkfI`ByVCo)tXy$t;6A zt~1bo6gdD`0{I5F)MXn3ehe2?xa>#R?D@Ej2Wc1ke7cy}x9yMch-tr{xipIMqKuQM z8@nh=K72m@5h7JO8hAYXbm?-Um7#x+NPPna0Q$wNGFG5L3~u4r$AOeJ9{w})1WI6V z2;SzJXr}k*_!#LJn~k41MtSOdp0o3l`?5rDx$KDA26njDO97x^xz)ynWwh#2GcAHq z5ee)LVh`rdqfbBoB>XsfaDV4f^f>&L`xYjhc5XlV?8N{V&TQfD4Jkef*?wj{VM2mM zDWJ|)%D~$?X;>DC;{u>l`3$@%Jrn50DIZzyMFvM#yKLvU?_uSG)O8P|sa+$oE;=ZS z0l>l;mMoXqdhMpEnTA;onlrD}RNUx6epTEKVe}wffjs>+v9tZf4s{G*DPN}|5&Oys zFaRnC@Br5kH&BFnMg=rr0N{TF22^SYrNZ?buK|4XWD!b5?I%z>>NL9s^JVx)UyJw( z8N%=;8{QQ%{^1Qa{j;cED$IwCOQ%I=$ z(7}*Pj~Yel;hAXt868!$#y(mjMhkKB$pzsd+23c( z5U0xdxhhwApDM<9)~IoSG$NKDq%aV$i}BR>X?B~}cs4G?lcDG+H#$Y0TEcGUI2#VL zytm#fi&361xj@&}-{gchH+<|F#wzyJxNS4;3+PwIfm+HzEe!rU5<+e|g#q%{Z>@<9 zdxH-i29EeRJ7yirk+Xf6AAX;UUNInUVGj?8bNiFY4>4#783}+1rYuuOtH=n}%tZPb z0p;->7=VEF7W2&=Nv zhk>9C>FTR?AQi$p@I}s~?;fMyQbPnD1Cuw zU8tJT$+F8-rNJz7KA6L7U#HF?uQUG#GDfuvBF)LsJgaQ*Z*2?K&giG zD2hC3$5xz}5-9b(Ck%_-d&4r_dUw6G@%CHy_RFn1-fFYg(&g{2XG}S2-&xPt)nc-m zqL0ewL`{{q4ka2?fkmQfs!ijvd#L0iDu>F+aGmR@k}5GYwUHf;n3+1VFZK@Ipsy>G zX%EZKVGa^?_Yg%Q4}|%V>!;D3Ggt3jq4d6jT|H2^Z*ef4H-CdMOC+&EY~X_ylv@pM zm>V8A%sdm|@RWc_RsSo9DzF%8E|`S?Gk>x$r(Zj&iWRR=*` zYc@e7xM34j33PT7Y=W$AqK1U1ZbE9IsGHPUs46&ESJKUsfYfgYF4UD$YpAphty>#% zjMur}v+PM0^e*k^s46!CU;y+46-eiE)fAK%4St68rH4802Vu&_>( zE-R*yjrdj^zJby3$7sAvt7Lr0J9ryT;(ucoZgJv$HWYAuv|;?LU&M(=$Q745R5d<8 zG*Pg>pvTMZ+=7{_J`2IJxruL!dhCdf2>&bOMkU^bLtIJt4jVq4e>32`@NG0&+Myho ze%A|s$Wd;s4*awnrQvtk^#e9Ik&OE3 k7Bi|{N3&v@K@+b5`l&UqH`kg=&DBPuxzcDht~Hka18$>-$^ZZW diff --git a/server/templates/index.html b/server/templates/index.html deleted file mode 100644 index a5bca89..0000000 --- a/server/templates/index.html +++ /dev/null @@ -1,14 +0,0 @@ - -
-
. -
-
- -
-
- - -
-
-
-
diff --git a/views/globe/Worker.js b/static/globe/Worker.js similarity index 100% rename from views/globe/Worker.js rename to static/globe/Worker.js diff --git a/views/globe/active-station-marker.png b/static/globe/active-station-marker.png similarity index 100% rename from views/globe/active-station-marker.png rename to static/globe/active-station-marker.png diff --git a/views/globe/globe.html b/static/globe/globe.html similarity index 100% rename from views/globe/globe.html rename to static/globe/globe.html diff --git a/views/globe/moment.min.js b/static/globe/moment.min.js similarity index 100% rename from views/globe/moment.min.js rename to static/globe/moment.min.js diff --git a/views/globe/satellite-marker-dark.png b/static/globe/satellite-marker-dark.png similarity index 100% rename from views/globe/satellite-marker-dark.png rename to static/globe/satellite-marker-dark.png diff --git a/views/globe/satellite-marker-light.png b/static/globe/satellite-marker-light.png similarity index 100% rename from views/globe/satellite-marker-light.png rename to static/globe/satellite-marker-light.png diff --git a/views/globe/satellite.js b/static/globe/satellite.js similarity index 100% rename from views/globe/satellite.js rename to static/globe/satellite.js diff --git a/views/globe/station-marker.png b/static/globe/station-marker.png similarity index 100% rename from views/globe/station-marker.png rename to static/globe/station-marker.png diff --git a/static/globe2/Worker.js b/static/globe2/Worker.js new file mode 100644 index 0000000..480f6e6 --- /dev/null +++ b/static/globe2/Worker.js @@ -0,0 +1,73 @@ +self.importScripts("satellite.js"); +self.importScripts("moment.min.js"); +self.importScripts("https://cesiumjs.org/releases/1.53/Build/Cesium/Cesium.js") + +norad = "" +groundStations = [] +satrec = null +Orbits = [] +name = "" + +onmessage = function(e) { + norad = e.data[0] + name = e.data[1][0] + satrec = self.satellite_js.twoline2satrec(e.data[1][1],e.data[1][2]); + getStations() + Orbits = getObrit() +} + +setInterval(function(){ + getStations() +}, 10000); + +setInterval(function(){ + getObrit() +}, 60000*5); + +setInterval(function(){ + + var gmst = self.satellite_js.gstime(new Date()); + var positionAndVelocity = self.satellite_js.propagate(satrec, new Date()); + var positionEci = positionAndVelocity.position + var positionGd = self.satellite_js.eciToGeodetic(positionEci, gmst) + + if (groundStations[1] == undefined){ + groundStations.push([]) + } + + postMessage([norad,name,self.Cesium.Ellipsoid.WGS84.cartographicToCartesian(new self.Cesium.Cartographic(positionGd.longitude, positionGd.latitude, (positionGd.height*1000))),groundStations[0],groundStations[1],Orbits]) + + +}, 10000); + +function getStations(){ +var xhttp = new XMLHttpRequest(); + xhttp.onreadystatechange = function() { + if (this.readyState == 4 && this.status == 200) { + groundStations = JSON.parse(this.responseText); + } + }; + xhttp.open("GET", "/stations_from_sat/"+norad, true); + xhttp.send(); +} + +function degress (radians) { + return radians * 180 / Math.PI; +}; + + +function getObrit(){ + + satelliteOrbit = [] + for (var i = 0; i < 30; i++){ + time = moment().subtract(10,"m").add(i*1,"m") + var gmst = self.satellite_js.gstime(new Date(time.valueOf())); + var positionAndVelocity = self.satellite_js.propagate(satrec, new Date(time.valueOf())); + var positionEci = positionAndVelocity.position + var positionGd = self.satellite_js.eciToGeodetic(positionEci, gmst) + + satelliteOrbit = satelliteOrbit.concat(self.Cesium.Ellipsoid.WGS84.cartographicToCartesian(new self.Cesium.Cartographic(positionGd.longitude, positionGd.latitude, positionGd.height*1000))); + } + return satelliteOrbit + + } \ No newline at end of file diff --git a/views/map/active-station-marker.png b/static/globe2/active-station-marker.png similarity index 100% rename from views/map/active-station-marker.png rename to static/globe2/active-station-marker.png diff --git a/static/globe2/globe.html b/static/globe2/globe.html new file mode 100644 index 0000000..b5b13d0 --- /dev/null +++ b/static/globe2/globe.html @@ -0,0 +1,39 @@ + + + + + + + + + + +
+ + + +Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License diff --git a/static/globe2/moment.min.js b/static/globe2/moment.min.js new file mode 100644 index 0000000..2a3358f --- /dev/null +++ b/static/globe2/moment.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function c(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e){return void 0===e}function d(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function h(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function f(e,t){var n,s=[];for(n=0;n>>0,s=0;sDe(e)?(r=e+1,o-De(e)):(r=e,o),{year:r,dayOfYear:a}}function Ie(e,t,n){var s,i,r=Ve(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+Ae(i=e.year()-1,t,n):a>Ae(e.year(),t,n)?(s=a-Ae(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function Ae(e,t,n){var s=Ve(e,t,n),i=Ve(e+1,t,n);return(De(e)-s+i)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),H("week","w"),H("isoWeek","W"),L("week",5),L("isoWeek",5),ue("w",B),ue("ww",B,z),ue("W",B),ue("WW",B,z),fe(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=k(e)});I("d",0,"do","day"),I("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),I("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),I("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),I("e",0,0,"weekday"),I("E",0,0,"isoWeekday"),H("day","d"),H("weekday","e"),H("isoWeekday","E"),L("day",11),L("weekday",11),L("isoWeekday",11),ue("d",B),ue("e",B),ue("E",B),ue("dd",function(e,t){return t.weekdaysMinRegex(e)}),ue("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ue("dddd",function(e,t){return t.weekdaysRegex(e)}),fe(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:g(n).invalidWeekday=e}),fe(["d","e","E"],function(e,t,n,s){t[s]=k(e)});var je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var $e=ae;var qe=ae;var Je=ae;function Be(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],l=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),s=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),r=this.weekdays(n,""),a.push(s),o.push(i),u.push(r),l.push(s),l.push(i),l.push(r);for(a.sort(e),o.sort(e),u.sort(e),l.sort(e),t=0;t<7;t++)o[t]=de(o[t]),u[t]=de(u[t]),l[t]=de(l[t]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,t){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ke(e,t){return t._meridiemParse}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,Qe),I("k",["kk",2],0,function(){return this.hours()||24}),I("hmm",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)}),I("hmmss",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+U(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),H("hour","h"),L("hour",13),ue("a",Ke),ue("A",Ke),ue("H",B),ue("h",B),ue("k",B),ue("HH",B,z),ue("hh",B,z),ue("kk",B,z),ue("hmm",Q),ue("hmmss",X),ue("Hmm",Q),ue("Hmmss",X),ce(["H","HH"],ge),ce(["k","kk"],function(e,t,n){var s=k(e);t[ge]=24===s?0:s}),ce(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ce(["h","hh"],function(e,t,n){t[ge]=k(e),g(n).bigHour=!0}),ce("hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s)),g(n).bigHour=!0}),ce("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i)),g(n).bigHour=!0}),ce("Hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s))}),ce("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i))});var et,tt=Te("Hours",!0),nt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:He,monthsShort:Re,week:{dow:0,doy:6},weekdays:je,weekdaysMin:ze,weekdaysShort:Ze,meridiemParse:/[ap]\.?m?\.?/i},st={},it={};function rt(e){return e?e.toLowerCase().replace("_","-"):e}function at(e){var t=null;if(!st[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=et._abbr,require("./locale/"+e),ot(t)}catch(e){}return st[e]}function ot(e,t){var n;return e&&((n=l(t)?lt(e):ut(e,t))?et=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),et._abbr}function ut(e,t){if(null===t)return delete st[e],null;var n,s=nt;if(t.abbr=e,null!=st[e])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=st[e]._config;else if(null!=t.parentLocale)if(null!=st[t.parentLocale])s=st[t.parentLocale]._config;else{if(null==(n=at(t.parentLocale)))return it[t.parentLocale]||(it[t.parentLocale]=[]),it[t.parentLocale].push({name:e,config:t}),null;s=n._config}return st[e]=new P(b(s,t)),it[e]&&it[e].forEach(function(e){ut(e.name,e.config)}),ot(e),st[e]}function lt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return et;if(!o(e)){if(t=at(e))return t;e=[e]}return function(e){for(var t,n,s,i,r=0;r=t&&a(i,n,!0)>=t-1)break;t--}r++}return et}(e)}function dt(e){var t,n=e._a;return n&&-2===g(e).overflow&&(t=n[_e]<0||11Pe(n[me],n[_e])?ye:n[ge]<0||24Ae(n,r,a)?g(e)._overflowWeeks=!0:null!=u?g(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[me]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=ht(e._a[me],s[me]),(e._dayOfYear>De(r)||0===e._dayOfYear)&&(g(e)._overflowDayOfYear=!0),n=Ge(r,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ye]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=s[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ge]&&0===e._a[pe]&&0===e._a[ve]&&0===e._a[we]&&(e._nextDay=!0,e._a[ge]=0),e._d=(e._useUTC?Ge:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&0<=e&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(g(e).weekdayMismatch=!0)}}var ft=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_t=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],gt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],pt=/^\/?Date\((\-?\d+)/i;function vt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(g(e).iso=!0,t=0,n=yt.length;tn.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ln.isLocal=function(){return!!this.isValid()&&!this._isUTC},ln.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ln.isUtc=Vt,ln.isUTC=Vt,ln.zoneAbbr=function(){return this._isUTC?"UTC":""},ln.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},ln.dates=n("dates accessor is deprecated. Use date instead.",nn),ln.months=n("months accessor is deprecated. Use month instead",Fe),ln.years=n("years accessor is deprecated. Use year instead",Oe),ln.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),ln.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e={};if(w(e,this),(e=Yt(e))._a){var t=e._isUTC?y(e._a):Tt(e._a);this._isDSTShifted=this.isValid()&&0ID: 2
Total Observations: 16189
Status: Online
QTH: EM69uf
Description: Yaesu G-5500 with M2 cross yagi antennas and S-band parabolic dish", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [39.236, -86.305, 280]}, "id": 2, "name": "KB9JHU"}, {"description": "ID: 6
Total Observations: 27104
Status: Online
QTH: KM18ub
Description: USRP B200mini, Wimo X-Quad VHF and SatNOGS Helical 438-2 UHF Since 2018-08-23 is static targeting zenith", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [38.048444, 23.739312, 119]}, "id": 6, "name": "Apomahon"}, {"description": "ID: 7
Total Observations: 9940
Status: Online
QTH: KM17ux
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [37.97034, 23.71394, 65]}, "id": 7, "name": "Stony"}, {"description": "ID: 12
Total Observations: 10311
Status: Online
QTH: FN42fr
Description: Back to normal service with Omnidirectional Lindenblad", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [42.74479, -71.538182, 67]}, "id": 12, "name": "W2BFJ"}, {"description": "ID: 15
Total Observations: 10268
Status: Online
QTH: PF95id
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-34.8463, 138.6949, 8]}, "id": 15, "name": "VK5QI-2M"}, {"description": "ID: 21
Total Observations: 14691
Status: Online
QTH: KM16bx
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [36.96089, 22.14489, 45]}, "id": 21, "name": "Avia"}, {"description": "ID: 22
Total Observations: 9784
Status: Online
QTH: EN63ag
Description: Home made QFH antenna, LNA and FM band filter. Trees on north and houses on south side block some signals.\r\nOpen for scheduling by Observers. \r\nI have an auto-scheduler running every hour which will schedule observations for the next 2 hours.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [43.283, -87.977, 229]}, "id": 22, "name": "Ferns-1"}, {"description": "ID: 23
Total Observations: 7128
Status: Online
QTH: OF77xw
Description: RPi 3, RTL-SDR v3, Mini-Kits 144-148MHz preamp, Stanislav Palo VHF turnstile", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-32.066, 115.988, 6]}, "id": 23, "name": "Zath-VHF"}, {"description": "ID: 24
Total Observations: 8640
Status: Online
QTH: OF77xw
Description: RPi 3, RTL-SDR v3, Mini-Kits 430MHz preamp, Stanislav Palo UHF turnstile", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-32.066, 115.988, 6]}, "id": 24, "name": "Zath-UHF"}, {"description": "ID: 27
Total Observations: 4533
Status: Online
QTH: EM97se
Description: Turnstile Antenna, LNA4ALL, NooElec NESDR SMArt", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [37.194, -80.489, 634]}, "id": 27, "name": "NB3T - VHF"}, {"description": "ID: 28
Total Observations: 5103
Status: Online
QTH: EM97se
Description: Turnstile Antenna, LNA4ALL, NooElec NESDR SMArt", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [37.194, -80.489, 634]}, "id": 28, "name": "NB3T - UHF"}, {"description": "ID: 31
Total Observations: 11019
Status: Online
QTH: IO74do
Description: QFH, Preamp/Filter, RTLSDR. Noisy environment.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [54.594049, -5.713397, 10]}, "id": 31, "name": "GI7UGV - UHF"}, {"description": "ID: 33
Total Observations: 6588
Status: Online
QTH: IO84el
Description: No rotator RPi with NooElec SMArt dongle and a Wimo TA-1 turnstile antenna loft mounted", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [54.488, -3.588, 10]}, "id": 33, "name": "G7KSE"}, {"description": "ID: 34
Total Observations: 2506
Status: Online
QTH: IO82vx
Description: UHF and VHF yagi on a azimuth rotator with fixed 30 degree zenith a little too low at the moment however good results from within an urban area.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [52.996593, -2.195347, 110]}, "id": 34, "name": "2E0EZT ground station"}, {"description": "ID: 36
Total Observations: 4131
Status: Online
QTH: JN76mu
Description: 2018-10-13: Service restored :)\r\n\r\noffsite location in the alps with low noise, operating with pstrotator hamlib interface", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [46.839383, 15.011715, 1641]}, "id": 36, "name": "oe8rke"}, {"description": "ID: 37
Total Observations: 11553
Status: Online
QTH: JO30cr
Description: Please:\r\n - use the DUV transmitter for AMSAT-FOX satellites!\r\n - schedule observations for AX.25 transmitters (APRS/AFSK1k2/FSK9k6 etc)\r\n - skip NOAA observations for a while (testing new decoders) //", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [50.749782, 6.216089, 275]}, "id": 37, "name": "DL4PD"}, {"description": "ID: 38
Total Observations: 3648
Status: Online
QTH: JN36qu
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [46.83592, 7.35009, 909]}, "id": 38, "name": "Technikraum Lanzenh\u00e4usern"}, {"description": "ID: 39
Total Observations: 13080
Status: Online
QTH: JO32eu
Description: Ground station using a RTLSDR with a Stanislav Palo VHF turnstile antenna.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [52.8344, 6.3785, 10]}, "id": 39, "name": "CGBSAT-VHF"}, {"description": "ID: 40
Total Observations: 14297
Status: Online
QTH: JO32eu
Description: Ground station using an RTLSDR and Stanislav Palo UHF turnstile.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [52.8344, 6.3785, 10]}, "id": 40, "name": "CGBSAT-UHF"}, {"description": "ID: 43
Total Observations: 2533
Status: Online
QTH: JN25tg
Description: USRP1 with TVRX Daughterboard and DBSRX Daughterboard+ DIY UHF Yagi OR DIY VHF Yagi OR DIY S-Band Helical + DIY metal rotator ( https://wiki.satnogs.org/Metal_antenna_rotator ) + \r\n[Big mountain on west]\r\nCurrently the change of frequency band is manual and involve mechanic stuff. The antenna currently used are not very high gain because of the space limitation. I'am working to get everything outdoor, but waterproofing everything take time. Frequency may not be very accurate (big temp drifft).", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [45.2676834, 5.6080818, 350]}, "id": 43, "name": "Grenoble - F4HVX - S-band/L-band/VHF/UHF"}, {"description": "ID: 47
Total Observations: 10535
Status: Online
QTH: JN47tt
Description: DB0RV SatNOGS station in Weingarten / \r\nWinkler-Antenna 137MHz-Turnstile /\r\n20m Ultraflexx 7 cable / \r\nNooElec FM Distill Bandstop Filter/\r\nNooElec NeSDR Smart 0.5ppm / \r\nRaspberry Pi 3b+", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [47.8067, 9.633, 450]}, "id": 47, "name": "DB0RV"}, {"description": "ID: 49
Total Observations: 7436
Status: Online
QTH: JO65hp
Description: AMSAT OZ ground station. Wimo VHF/UHF X-Quads with preamp and bandpass filters. Yaesu G-5500 rotator with G6LVB computer interface. Airspy One connected to PC (AMD Athlon II X4 620) running Ubuntu server 18.04.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [55.634, 12.601, 10]}, "id": 49, "name": "OZ7SAT"}, {"description": "ID: 50
Total Observations: 3196
Status: Online
QTH: EL19ru
Description: UHF omni eggbeater antenna with UHF preamplifier", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [29.854689, -96.53481, 8]}, "id": 50, "name": "N5CNB-UHF"}, {"description": "ID: 56
Total Observations: 3599
Status: Online
QTH: RE43ds
Description: QFH Antenna", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-46.2128, 168.333, 45]}, "id": 56, "name": "ZL4VBJ VHF"}, {"description": "ID: 61
Total Observations: 710
Status: Online
QTH: JO73fj
Description: First TEONITE ground station", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [53.378957, 14.469831, 5]}, "id": 61, "name": "TEONITE-001"}, {"description": "ID: 62
Total Observations: 2954
Status: Online
QTH: KG33wg
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-26.709, 27.834, 1499]}, "id": 62, "name": "ZR6TG Sat Ground Station (VHF)"}, {"description": "ID: 65
Total Observations: 1105
Status: Online
QTH: QG62pd
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-27.8635, 153.3152, 7]}, "id": 65, "name": "QG62"}, {"description": "ID: 66
Total Observations: 3860
Status: Online
QTH: EN72ef
Description: Arrow UHF Corner Reflector, Fixed 20 Deg Elevation & Pointed 45 Deg NorthEast, AMSAT LNA,, MFJ Duplexer, \r\n Raspberry Pi3b", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [42.209, -85.6075, 275]}, "id": 66, "name": "KE8FZT - UHF"}, {"description": "ID: 67
Total Observations: 1839
Status: Online
QTH: JN13xp
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [43.641937, 3.929062, 119]}, "id": 67, "name": "Massena"}, {"description": "ID: 77
Total Observations: 2621
Status: Online
QTH: EL19ru
Description: Eggbeater antenna with preamplifier", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [29.855, -96.535, 6]}, "id": 77, "name": "N5CNB-VHF"}, {"description": "ID: 85
Total Observations: 1293
Status: Online
QTH: JO41wx
Description: Experimental station with an AirSpy HF+ receiver. 2m band only, V-dipole antenna.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [51.974237, 9.865202, 7]}, "id": 85, "name": "Alfeld"}, {"description": "ID: 91
Total Observations: 21110
Status: Online
QTH: IO80xs
Description: Timestep Stainless Steel QFH + LNA (136-150MHz), \r\n70cms Eggbeater (400-470MHz) + GaAs FET LNA, \r\nL-Band LHCP omni + GaAs FET LNA (1500-1600MHz), \r\nM0EYT antenna switcher", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [50.77, -2.02, 60]}, "id": 91, "name": "M0EYT"}, {"description": "ID: 92
Total Observations: 277
Status: Online
QTH: EN85gb
Description: 2019/02/03 - using old scanner antenna until summer 2019. In the process of building of Satnogs Rotator 3.1.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [45.05265, -83.45755, 180]}, "id": 92, "name": "APN01"}, {"description": "ID: 96
Total Observations: 2166
Status: Online
QTH: QF56pj
Description: VHF quadrilateral helix with LNA and BPF into RTL-SDR v3", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-33.62, 151.33, 10]}, "id": 96, "name": "sam210723 VHF"}, {"description": "ID: 98
Total Observations: 3203
Status: Online
QTH: FN42gh
Description: Running on a Raspberry Pi 3 B+. with Airspy. Sample rate was reduced to 2.5E6 and automatic decoding began on June 8, 2018. Raspberry Pi was not able to ingest all data from Airspy at default sample rate of 10E6. --- Station offline Dec 8 2018 - and not sure why -- will bring back online soon. hopefully", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [42.31404, -71.44789, 62]}, "id": 98, "name": "Grove-UHF-01"}, {"description": "ID: 101
Total Observations: 4569
Status: Online
QTH: JN18cp
Description: DIY VHF Turnstile + FM BC block filter + preamp.\r\nHave a high horizon (min 45deg) on the north-east, do not select\r\ntoo low satellites in this direction \r\n///\r\nChanges:\r\n2018-07-24 A reflector has been added to the antenna;\r\n2018-11-21 evening : 20dB preamp + block FM filter added\r\n2019-01-02 upgrade to satnogs-client v0.8 / gr-satnogs v1.5\r\n2019-01-06 testing & auto adjust gain depending on max elevation", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.64358, 2.231068, 110]}, "id": 101, "name": "Marcs"}, {"description": "ID: 102
Total Observations: 3414
Status: Online
QTH: JO21sl
Description: Turnstile antenna over chicken wire ground screen on flat roof. SPF5189z LNA mounted at the antenna feed point, Pi3 and rtlsdr inside. Added LRPT demodulator/processor generating images from LRPT passes. So go ahead and schedule those Meteor-M 2 LRPT observations!", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [51.4719052, 5.5584172, 10]}, "id": 102, "name": "PA3RVG VHF"}, {"description": "ID: 105
Total Observations: 1645
Status: Online
QTH: FN20ha
Description: Temporary ground station using a RPi 3+, RTL-SDR, and fixed VHF 3 element tape measure Yagi pointing South. Observations from SE to SW possible.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [40.03, -75.34, 122]}, "id": 105, "name": "KU2Y"}, {"description": "ID: 110
Total Observations: 2321
Status: Online
QTH: JN79xs
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [49.7625772, 15.9192975, 592]}, "id": 110, "name": "ok1phu-1"}, {"description": "ID: 129
Total Observations: 1570
Status: Online
QTH: CM87vt
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [37.818732, -122.180725, 300]}, "id": 129, "name": "Chabot Space and Science Center"}, {"description": "ID: 130
Total Observations: 820
Status: Online
QTH: JN18cv
Description: Station without rotor, for testing purpose.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.882767, 2.17693, 50]}, "id": 130, "name": "XTOPHE"}, {"description": "ID: 134
Total Observations: 2821
Status: Online
QTH: KN00rc
Description: So far works good with NOAA Satellites | Based on: Raspberry Pi 3 B+, RTL-SDR v3, FM notch/LNA module | 137MHz Turnstile Antenna | RF Gain 20.7 | facebook.com/ioannis.kedros", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [40.083765, 21.427368, 600]}, "id": 134, "name": "Grevena Station"}, {"description": "ID: 141
Total Observations: 3101
Status: Online
QTH: JN88md
Description: Running on RaspberryPi 3 B+ with AirSpy-mini and WiMo TA-1 antenna. !!!Only East passes!!!", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.15076, 17.05083, 200]}, "id": 141, "name": "balcony-only-east-passes"}, {"description": "ID: 146
Total Observations: 4297
Status: Online
QTH: LL34js
Description: Homemade UHF QFH + short VHF YAGI looking 90degrees elevation + LNA for both +combiner+splitter + RTL SDR 1ppm TCXO", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [24.779153, 46.801434, 612]}, "id": 146, "name": "RIYADH2"}, {"description": "ID: 147
Total Observations: 3146
Status: Online
QTH: JN08vp
Description: Yagi approximately oriented North.\r\nTopfkreis antenna since 2018-07-28.\r\nTurnstile antenna since 2018-08-04 (about 15H00 UT).\r\nSDR changed to AirspyMini since 2018-10-06.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.63488, 1.828597, 200]}, "id": 147, "name": "F6KKR"}, {"description": "ID: 150
Total Observations: 4107
Status: Online
QTH: JN88qa
Description: Satellite ground service.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.033, 17.387, 124]}, "id": 150, "name": "OM1LD"}, {"description": "ID: 158
Total Observations: 260
Status: Online
QTH: OF78vf
Description: Rpi3 with RTLSDR + LNA", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-31.763375, 115.759183, 40]}, "id": 158, "name": "Picosat Systems - UHF"}, {"description": "ID: 171
Total Observations: 1010
Status: Online
QTH: JN34wq
Description: Satellite station located at IQ1RY ARI Radio Club in Bra, Italy.\r\nUHF 42 El. Crossed Yagi M2-436CP42UG + SP7000\r\nVHF 11 El Yagi\r\nOriginally built to support the PICPOT, E-St@r and E-St@r-II cubesats from Politecnico di Torino.\r\nwww.aribra.it\r\nwww.cubesatteam-polito.com", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [44.6993377, 7.8363904, 270]}, "id": 171, "name": "IQ1RY ARI Sezione di Bra"}, {"description": "ID: 173
Total Observations: 1944
Status: Online
QTH: JO53ck
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [53.451984, 10.221032, 15]}, "id": 173, "name": "DF3LZ"}, {"description": "ID: 175
Total Observations: 4645
Status: Online
QTH: JO60lt
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [50.82612, 12.93976, 322]}, "id": 175, "name": "Rocinante"}, {"description": "ID: 177
Total Observations: 1403
Status: Online
QTH: FM08xn
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [38.555972, -78.062523, 186]}, "id": 177, "name": "KO2F-VHF-1"}, {"description": "ID: 183
Total Observations: 2817
Status: Online
QTH: KO85qq
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [55.693167, 37.347033, 200]}, "id": 183, "name": "SPUTNIX-R2ANF-VHF/UHF-stationary"}, {"description": "ID: 187
Total Observations: 4099
Status: Online
QTH: FN20gg
Description: Note: This station will become an exclusive UHF station in the coming days. AA4TX Parasitic Lindenblad is under construction.\r\n\r\nPlease do not use this station for achieving \"100% utilization\" SatNogs goal. This station is to be used only for targeted specific observations. Mass scheduling of observations with the only intent being \"station utilization\" will be considered abuse. Please don't ruin it for others by abusing this station.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [40.27361, -75.461618, 54]}, "id": 187, "name": "K3RLD UHF Lindenblad"}, {"description": "ID: 201
Total Observations: 1473
Status: Online
QTH: FM08xn
Description: This station is collocated with Ground Station 177.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [38.555972, -78.062523, 186]}, "id": 201, "name": "KO2F-UHF-1"}, {"description": "ID: 212
Total Observations: 786
Status: Online
QTH: EN72ef
Description: Arrow VHF Corner Reflector, Fixed 20 Deg Elevation & Pointed 45 Deg NorthEast, LNA, Raspberry Pi3b", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [42.209, -85.607, 275]}, "id": 212, "name": "KE8FZT - VHF"}, {"description": "ID: 213
Total Observations: 1674
Status: Online
QTH: DM26kb
Description: VHF Turnstile. NO UHF at this time.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [36.0494, -115.1427, 640]}, "id": 213, "name": "W5SAT_VHF"}, {"description": "ID: 216
Total Observations: 732
Status: Online
QTH: EM98di
Description: UHF moxon, minikit eme235, rtl-sdr, RPi3 Satnogs image.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [38.353, -81.687, 270]}, "id": 216, "name": "CWVRPi3uhf"}, {"description": "ID: 217
Total Observations: 1251
Status: Online
QTH: IO73xe
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [53.177, -4.05, 198]}, "id": 217, "name": "MW6CYK"}, {"description": "ID: 223
Total Observations: 2938
Status: Online
QTH: FM29jr
Description: Gloucester County ARC clubhouse station, Mullica Hill NJ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [39.7155, -75.2099, 30]}, "id": 223, "name": "W2MMD GCARC Clubhouse"}, {"description": "ID: 229
Total Observations: 610
Status: Online
QTH: KN12qp
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [42.6563, 23.3692, 550]}, "id": 229, "name": "Neterra Sofia Teleport"}, {"description": "ID: 237
Total Observations: 1202
Status: Online
QTH: CM97ag
Description: UHF Eggbeater", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [37.254, -121.98, 94]}, "id": 237, "name": "KF6ZEO-1"}, {"description": "ID: 248
Total Observations: 1241
Status: Online
QTH: KP20kf
Description: SatNOGS station of Helsinki Hacklab.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [60.2220032462, 24.851911068, 15]}, "id": 248, "name": "Helsinki Hacklab"}, {"description": "ID: 255
Total Observations: 1347
Status: Online
QTH: IM98pg
Description: Ham radio Station.\r\nUsing QFH + RTL-SDR V3 with the project.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [38.2768, -0.6711, 120]}, "id": 255, "name": "EA5BZ - Elche"}, {"description": "ID: 271
Total Observations: 1012
Status: Online
QTH: JN16nx
Description: RPi3+RTLSDR V3+VHF Turnstile homemade", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [46.9778, 3.0969, 189]}, "id": 271, "name": "F5SNV"}, {"description": "ID: 272
Total Observations: 3224
Status: Online
QTH: FN20gg
Description: Please do not use this station for achieving \"100% utilization\" SatNogs goal. This station is to be used only for targeted specific observations. The goal of THIS station to be an available resource for observers who need \"last minute\" type observation utility. Mass scheduling of observations with the only intent being \"station utilization\" will be considered abuse. Please don't ruin it for others by abusing this station.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [40.27361, -75.461618, 54]}, "id": 272, "name": "K3RLD VHF QFH"}, {"description": "ID: 282
Total Observations: 2251
Status: Online
QTH: JN69ps
Description: VHF cross dipole", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [49.7838, 13.2864, 372]}, "id": 282, "name": "Dolni Vlkys1"}, {"description": "ID: 291
Total Observations: 4662
Status: Online
QTH: CN89dk
Description: Eggbeater installed Nov 4, 2018. Discone before this date.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [49.4348, -123.6685, 40]}, "id": 291, "name": "COSPAR 8049"}, {"description": "ID: 296
Total Observations: 1151
Status: Online
QTH: EM95wa
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [35.0109999, -80.1, 120]}, "id": 296, "name": "bob"}, {"description": "ID: 305
Total Observations: 756
Status: Online
QTH: PF95gc
Description: Dual Moxon antenna: https://sat.fg8oj.com/images/VHFUHFSatelite.pdf with Minikits Pre-amp mounted at the antenna https://www.minikits.com.au/electronic-kits/rf-amplifiers/rf-preamplifiers/2m-RX-Preamplifier", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-34.8786, 138.5017, 12]}, "id": 305, "name": "VK5KJP-VHF"}, {"description": "ID: 307
Total Observations: 824
Status: Online
QTH: JN38wa
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.0009, 7.8467, 288]}, "id": 307, "name": "FraunhoferEMI"}, {"description": "ID: 308
Total Observations: 628
Status: Online
QTH: FM05qt
Description: 73 Darrell W4CX", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [35.832, -78.645, 87]}, "id": 308, "name": "W4CX"}, {"description": "ID: 327
Total Observations: 1146
Status: Online
QTH: JO21sk
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [51.417, 5.575, 9]}, "id": 327, "name": "PA1RB - Geldrop Netherlands"}, {"description": "ID: 329
Total Observations: 498
Status: Online
QTH: HM77fr
Description: Raspberry Pi 3B+ using a RTL-SDR Blog v3 SDR dongle connected to Diamond X300 antenna.\r\nNo LNA for now. Best results are obtained in VHF.\r\nKeep in mind this Raspberry is also used on my field activations (very sporadic and mainly during Spring/Summer). When such the station will be taken offline.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [37.7423198, -25.5565093, 80]}, "id": 329, "name": "CU2ZG"}, {"description": "ID: 331
Total Observations: 862
Status: Online
QTH: PF95gc
Description: Dual Moxon antenna https://sat.fg8oj.com/images/VHFUHFSatelite.pdf\r\nwith\r\nMinikits pre-amp located at antenna https://www.minikits.com.au/electronic-kits/rf-amplifiers/rf-preamplifiers/70cm-RX-Preamplifier", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-34.8766, 138.5017, 12]}, "id": 331, "name": "VK5KJP-UHF"}, {"description": "ID: 334
Total Observations: 423
Status: Online
QTH: PF95hb
Description: VK5TCP", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [-34.953, 138.603, 49]}, "id": 334, "name": "CyberOps III"}, {"description": "ID: 335
Total Observations: 931
Status: Online
QTH: JO20kl
Description: Relatively a newcomer to Satellites monitoring; borned 1955, licenced in 1976 ; located near Namur , in a quiet (no RFnoise) area, with a 6\u00b0el/360\u00b0az horizon on top of my mast.\r\nRadio set (main SAT): Kenwood TS-2000.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [50.485, 4.85, 195]}, "id": 335, "name": "ON4LS"}, {"description": "ID: 355
Total Observations: 470
Status: Online
QTH: JN58ug
Description: I/Q data can be recorded upon request.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.267233, 11.670682, 490]}, "id": 355, "name": "Black Mensa Ground Station"}, {"description": "ID: 356
Total Observations: 904
Status: Online
QTH: FN32fp
Description: Limited horizon to the South. No pre-amplifiers. No polarization switching. Just metal sticks and a rotor.\r\nStation may be offline during high winds, deep cold, or when needed for personal use.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [42.63968, -73.57149, 195]}, "id": 356, "name": "K2MTS"}, {"description": "ID: 366
Total Observations: 569
Status: Online
QTH: KM69kv
Description: Turnstile antenna changed with pure VHF one with director, driven and reflector elements model... LNA test are unsuccessfull, back to antenna directly connected to rtlsdr unit. Also Rapberry Pi 3 unit replaced with new Pi3+ model. Old one crashed too many times...", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [39.887351, 32.848974, 1046]}, "id": 366, "name": "TA2ANK"}, {"description": "ID: 368
Total Observations: 524
Status: Online
QTH: JO73mi
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [53.340457, 15.05798, 10]}, "id": 368, "name": "SR1GEO_RACK02"}, {"description": "ID: 376
Total Observations: 559
Status: Online
QTH: JN48kt
Description: Maria Sp\u00e4ht Sternwarte\r\nhttps://astrohd.de", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.833301, 8.83896, 460]}, "id": 376, "name": "AstroHD"}, {"description": "ID: 377
Total Observations: 360
Status: Online
QTH: JN81ff
Description: Home Made UHF Turnstile, RTL-SDR", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [41.248025, 16.421258, 30]}, "id": 377, "name": "IZ7BOJ"}, {"description": "ID: 380
Total Observations: 372
Status: Online
QTH: JN58ug
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.265545, 11.668187, 520]}, "id": 380, "name": "jle-tum-VHF"}, {"description": "ID: 387
Total Observations: 740
Status: Online
QTH: IN93ht
Description: Thanks to Georges F5SMP (82 yr-old OM) for hosting this ground-station on the Atlantic coast. \r\nAntenna is a discone on a tree, about 10 mtrs height with 360\u00b0 view over flat land. \r\nObviously result is better on 2m band. 73's", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [43.795, -1.401, 20]}, "id": 387, "name": "F5SMP"}, {"description": "ID: 394
Total Observations: 298
Status: Online
QTH: JN39vk
Description: Station for DL0XK. (https://www.amateurfunk.uni-kl.de/station/)\r\n\r\nCurrently inside, under the roof until the weather allows for a more permanent installation.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [49.425696, 7.756691, 225]}, "id": 394, "name": "DL0XK"}, {"description": "ID: 396
Total Observations: 58
Status: Online
QTH: JO45fl
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [55.47977763, 8.43879819, 20]}, "id": 396, "name": "South Window"}, {"description": "ID: 399
Total Observations: 291
Status: Online
QTH: KM08uf
Description: Turnstile antenna tuned for 137MHz NOAA & Meteor-M2 reception. Station already tested in the staging enviroment", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [38.2292, 21.7084, 20]}, "id": 399, "name": "Patras, GR Station"}, {"description": "ID: 406
Total Observations: 477
Status: Online
QTH: JN79so
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [49.6, 15.56, 430]}, "id": 406, "name": "HBcomm"}, {"description": "ID: 411
Total Observations: 511
Status: Online
QTH: FN20wo
Description: Ground Station consists of a Raspberry Pi 3B+, a RTL-SDR.com V3 dongle and a 30db LNA connected to a home brew roof mounted 135MHZ Turnstile Antenna 25 meters in the air.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [40.586, -74.1571, 23]}, "id": 411, "name": "SatNOGS Ground Station - KD2NFC"}, {"description": "ID: 413
Total Observations: 338
Status: Online
QTH: JO43tt
Description: flexayagi FX7015 v + SSB GaAs-FET LNA-3000 + RTL2832U SDR + RPI 3 + [Kenpro Az/El Rotator + Yaesu G5400 controller + WinRotor Software (rotator setup not working automatically)]\r\nInfo: I replaced the satnogs_msk_ax25.py script with a new decoder for testing purposes. So you might wonder about decoded frames for observations using this decoder.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [53.8, 9.6, 7]}, "id": 413, "name": "caelum1"}, {"description": "ID: 420
Total Observations: 550
Status: Online
QTH: LL75oa
Description: Homebrew Egbeaters", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [25.036748, 55.167698, 14]}, "id": 420, "name": "A65DC Dubai"}, {"description": "ID: 427
Total Observations: 1868
Status: Online
QTH: JN58oe
Description: Homebrew 70cm eggbeater antenna - LNA DBA-270 (2m/70 cm) - RTL NooElec NESDR Smart - Raspberry Pi 3 with Raspbian SatNOGS.\r\n*** Please avoid west passes when selecting observations, as that direction is mostly obstructed. ***", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.168584, 11.226905, 536]}, "id": 427, "name": "DL1UNX-FFB UHF"}, {"description": "ID: 430
Total Observations: 480
Status: Online
QTH: KM17kd
Description: EggBeater EGB435R with RTL-SDR", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [37.158136, 22.893258, 10]}, "id": 430, "name": "Leonidio"}, {"description": "ID: 432
Total Observations: 620
Status: Online
QTH: FN42ft
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [42.8099, -71.5389, 55]}, "id": 432, "name": "kc1fha"}, {"description": "ID: 438
Total Observations: 471
Status: Online
QTH: KN05or
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [45.7469444, 21.2125, 80]}, "id": 438, "name": "Timisoara - VHF QHA"}, {"description": "ID: 439
Total Observations: 358
Status: Online
QTH: IN52pe
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [42.201315, -8.731402, 40]}, "id": 439, "name": "EB1AO"}, {"description": "ID: 440
Total Observations: 206
Status: Online
QTH: MK69mb
Description: A folded dipole antenna with a preamplifier + filter centered at 144Mhz.\r\nI am a member of the MOVE-II (https://www.move2space.de/MOVE-II/) team and use this GS mainly for looking at MOVE-II.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [19.047611, 73.07766, 250]}, "id": 440, "name": "mumbai-gs"}, {"description": "ID: 442
Total Observations: 898
Status: Online
QTH: JN58oe
Description: Homebrew 2m Lindenblad antenna - LNA DBA-270 (2m/70 cm) - RTL NooElec NESDR Smart - Raspberry Pi 3 with Raspbian SatNOGS. *** Please avoid west passes when selecting observations, as that direction is mostly obstructed. ***", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.168584, 11.226905, 536]}, "id": 442, "name": "DL1UNX-FFB VHF"}, {"description": "ID: 444
Total Observations: 908
Status: Online
QTH: JN18br
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.728034, 2.148761, 100]}, "id": 444, "name": "Saclay1"}, {"description": "ID: 446
Total Observations: 583
Status: Online
QTH: JN35sb
Description: Test software and hardware. \r\n73 de pino@ik1jns", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [45.074, 7.5207, 350]}, "id": 446, "name": "ik1jns"}, {"description": "ID: 452
Total Observations: 635
Status: Online
QTH: JO56dg
Description: RTL-SDR and Comet GP9N with SSB 2m/70cm preamp", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [56.2781, 10.2661, 100]}, "id": 452, "name": "OZ1SKY"}, {"description": "ID: 458
Total Observations: 259
Status: Online
QTH: JO20gr
Description: Located in the south-eastern suburbs of Brussels, I share my station with XYL Fran\u00e7oise ON5FB.\r\nOn a Pi3B+, with a VHF egg-beater and a RTL-SDR stick.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [50.71051, 4.54113, 96]}, "id": 458, "name": "ON4KRW Rixensart"}, {"description": "ID: 479
Total Observations: 200
Status: Online
QTH: JO10nw
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [50.931238, 3.09277, 20]}, "id": 479, "name": "ON4API"}, {"description": "ID: 480
Total Observations: 196
Status: Online
QTH: CN85qm
Description: ", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [45.512, -122.615, 50]}, "id": 480, "name": "shed"}, {"description": "ID: 488
Total Observations: 56
Status: Online
QTH: CN75xa
Description: Temporary 3 el UHF Yagi pointed toward zenith with preamp. Approx 90 deg beamwidth.", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [45.01, -124.01, 30]}, "id": 488, "name": "W7KKE"}, {"description": "ID: 492
Total Observations: 265
Status: Online
QTH: JN18cp
Description: Homemade UHF Turnstile + 30dB preamp //\r\npreamp activated since 2019-02-16", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [48.64358, 2.231068, 3]}, "id": 492, "name": "Marcs-UHF"}, {"description": "ID: 494
Total Observations: 236
Status: Online
QTH: JO52gx
Description: Rasperry Pi, HackRF One", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [52.963364, 10.506565, 70]}, "id": 494, "name": "Clemens_UE"}, {"description": "ID: 500
Total Observations: 63
Status: Online
QTH: KO81ds
Description: RTL-SDR v3, UHF Eggbeater II", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [51.762829, 36.253933, 219]}, "id": 500, "name": "SWSU Omnidirectional"}, {"description": "ID: 506
Total Observations: 0
Status: Online
QTH: CN87wl
Description: Better hardware someday :P", "show": true, "point": {"color": {"rgba": [0, 230, 64, 1]}}, "position": {"cartographicDegrees": [47.46, -122.09, 160]}, "id": 506, "name": "KI7ZWX"}, {"description": "ID: 4
Total Observations: 389
Status: Testing
QTH: KM18ua
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [38.024, 23.733, 120]}, "id": 4, "name": "SV1IYO"}, {"description": "ID: 54
Total Observations: 454
Status: Testing
QTH: FN42ig
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [42.291, -71.297, 43]}, "id": 54, "name": "IntimelyEights-vhf"}, {"description": "ID: 55
Total Observations: 78
Status: Testing
QTH: FN42ig
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [42.291, -71.297, 46]}, "id": 55, "name": "IntimelyEights-uhf"}, {"description": "ID: 68
Total Observations: 95
Status: Testing
QTH: JN47wc
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [47.094166, 9.900062, 1034]}, "id": 68, "name": "OE9CPV - stoffl"}, {"description": "ID: 83
Total Observations: 128
Status: Testing
QTH: KN34bp
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [44.6257, 26.1241, 5]}, "id": 83, "name": "YO3GCF-VHF-1"}, {"description": "ID: 87
Total Observations: 1255
Status: Testing
QTH: IO91rf
Description: 15.04.2018, Testing software with temporary home rig location, 23.04.2018, Home rig set, added LNA and filter for 145M band. Enjoy! 26.04.2018, Rig won't get 137M, 07.05.2018, Updated to 0.6.1, In case it was not clear, this station will not receive NOAA. 29.08.2018, now sitting in Surrey Space Centre temporarily. 14.12.2018: Tracking ESEO only on UHF, no tracking available for other sats. 08.02.2019: Added ISS for ARISS SSTV Event.", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [51.245, -0.558, 30]}, "id": 87, "name": "M0IEB"}, {"description": "ID: 93
Total Observations: 322
Status: Testing
QTH: IN71pp
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [41.6621, -4.7055, 710]}, "id": 93, "name": "GS UVA"}, {"description": "ID: 100
Total Observations: 2406
Status: Testing
QTH: KM17uw
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [37.9556463, 23.7199816, 80]}, "id": 100, "name": "SV1RVP"}, {"description": "ID: 109
Total Observations: 221
Status: Testing
QTH: JM19on
Description: UHF-VHF KLM ANTENNAS ROTATOR KENPRO 5600B\r\nUHF-VHF M2 ANTENNAS ROTATOR YAESU 1000+YAESU G-550\r\nG3RUH 9600BAUD MODEM\r\nG3RUH 1200 BPSK MODEM\r\nTNC2 1200 AFSK MODEM\r\nFT-736\r\nKENWOOD TS-2000X", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [39.5666, 3.2095, 100]}, "id": 109, "name": "EA6WQ - Tomas Orzaez"}, {"description": "ID: 121
Total Observations: 126
Status: Testing
QTH: EM89as
Description: Yaesu G5500 Rotator with a UHF/VHF Yagi Antenna", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [39.7909343, -83.999431, 255]}, "id": 121, "name": "Hummingbird"}, {"description": "ID: 123
Total Observations: 552
Status: Testing
QTH: OM20br
Description: BG8DIV ZHOU KUN", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [30.7158, 104.113, 535]}, "id": 123, "name": "BG8DIV"}, {"description": "ID: 127
Total Observations: 76
Status: Testing
QTH: JN47qq
Description: Mobile Satellite Receiving Station", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [47.668509, 9.392484, 400]}, "id": 127, "name": "MSRS-GKL"}, {"description": "ID: 140
Total Observations: 126
Status: Testing
QTH: JN58ki
Description: Currently problems with strong FM radio stations.", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [48.354816, 10.904797, 40]}, "id": 140, "name": "DF0HSA"}, {"description": "ID: 182
Total Observations: 215
Status: Testing
QTH: FJ13tv
Description: Disconne atenna on a small valley sourounded by moutains and river", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [3.9, -76.4, 1000]}, "id": 182, "name": "lcho1"}, {"description": "ID: 191
Total Observations: 350
Status: Testing
QTH: PM95sq
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [35.6943, 139.5723, 60]}, "id": 191, "name": "7J1AJH"}, {"description": "ID: 198
Total Observations: 14
Status: Testing
QTH: IO82xl
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [52.467, -2.022, 200]}, "id": 198, "name": "G4DPZ Twin 70cm Wimo X-Quad"}, {"description": "ID: 207
Total Observations: 545
Status: Testing
QTH: JO47xa
Description: GP on a rusty table leg", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [57.0140675, 9.9864619, 20]}, "id": 207, "name": "AAUSAT GND"}, {"description": "ID: 227
Total Observations: 390
Status: Testing
QTH: JO60lt
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [50.826321, 12.939698, 322]}, "id": 227, "name": "Roach"}, {"description": "ID: 232
Total Observations: 557
Status: Testing
QTH: PF95ig
Description: 2m/70cm Wimo X-Quads, on a RF HamDesign SPX-02 Rotator. Minikits masthead preamps, RTLSDR v3. May be used for special events and new sats, though please contact me first! (Darkside on #satnogs)", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [-34.721, 138.693, 80]}, "id": 232, "name": "VK5QI-AZ/EL"}, {"description": "ID: 246
Total Observations: 3830
Status: Testing
QTH: FN42mt
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [42.8065919844, -70.9730295307, 53]}, "id": 246, "name": "SATCOM North Shore"}, {"description": "ID: 254
Total Observations: 626
Status: Testing
QTH: JO94gm
Description: PW-SAT2 Satellite only. 435.275MHz+/-25kHz bandpass filter.\r\nAZ-EL Wimo WX7036. High noise environment. 437-438MHz strong QRMs from LoRa like transmissions. Band limited to 435MHz-440MHz (bandpass filter). Test setup.", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [54.52383, 18.5135, 87]}, "id": 254, "name": "SP2ZIE - 70cm"}, {"description": "ID: 256
Total Observations: 76
Status: Testing
QTH: FM08xn
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [38.555972, -78.062523, 186]}, "id": 256, "name": "KO2F-Test-1"}, {"description": "ID: 258
Total Observations: 161
Status: Testing
QTH: KM69kv
Description: Currently testing a new station:\r\nRaspi3 + RTLSDR.COM SDR + LNA + Arrow Antenna", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [39.88327, 32.849961, 1090]}, "id": 258, "name": "TA2P"}, {"description": "ID: 265
Total Observations: 86
Status: Testing
QTH: GF15wb
Description: We are building/deploying the satNOGS proyect in Uruguay, at the roof of the Engeneering School from the State University", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [-34.91887, -56.166095, 52]}, "id": 265, "name": "El_Nido"}, {"description": "ID: 280
Total Observations: 138
Status: Testing
QTH: FN42gh
Description: !!!!! --- station under construction antenna is located in guest bed room. So not an optimal setup yet", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [42.31404, -71.44789, 62]}, "id": 280, "name": "Grove-VHF-01"}, {"description": "ID: 285
Total Observations: 39
Status: Testing
QTH: JN18bq
Description: Yagi 430M-440M with SP70 preamplifier and rtl-sdr NOOS. \r\nDO NOT SCHEDULE OBSERVATIONS DUE TO ROTATOR NOISE, THANKS REMI", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [48.6923, 2.1461, 170]}, "id": 285, "name": "F6CNB-UHF"}, {"description": "ID: 294
Total Observations: 34
Status: Testing
QTH: JO32ha
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [52.037517, 6.625241, 33]}, "id": 294, "name": "Nedap - Groenlo 01 - UHF Cross Yagi"}, {"description": "ID: 299
Total Observations: 2239
Status: Testing
QTH: PF95hb
Description: VK5TCP", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [-34.9533, 138.6032, 49]}, "id": 299, "name": "CyberOps"}, {"description": "ID: 313
Total Observations: 121
Status: Testing
QTH: FN41hu
Description: UHF Dipole mounted atop Brown University's Ladd Observatory, managed by the Brown Amateur Radio Club (K1AD) and Brown Space Engineering.", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [41.839157, -71.398982, 66]}, "id": 313, "name": "Ladd Observatory"}, {"description": "ID: 318
Total Observations: 98
Status: Testing
QTH: JN58rc
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [48.11428, 11.48597, 550]}, "id": 318, "name": "DL1SAA"}, {"description": "ID: 338
Total Observations: 115
Status: Testing
QTH: EN61ev
Description: Basic station setup with RTL-SDR dongle, wideband LNA. First station, not sophisticated!", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [41.89934, -87.64517, 181]}, "id": 338, "name": "TWUSAIL"}, {"description": "ID: 349
Total Observations: 8
Status: Testing
QTH: JN88rh
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [48.3307, 17.4543, 100]}, "id": 349, "name": "JSOC"}, {"description": "ID: 363
Total Observations: 7
Status: Testing
QTH: JO89wp
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [59.63, 17.8348, 43]}, "id": 363, "name": "sa0bxi-0"}, {"description": "ID: 365
Total Observations: 636
Status: Testing
QTH: JO22ff
Description: Test-setup: VHF QFH (No view to the south), Filtered Pre-amp (142-149 Mhz) AirSpy HF+", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [52.217, 4.423, 8]}, "id": 365, "name": "DS-1"}, {"description": "ID: 375
Total Observations: 61
Status: Testing
QTH: EN82gj
Description: In test mode.", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [42.408293, -83.441385, 230]}, "id": 375, "name": "AB3DC"}, {"description": "ID: 381
Total Observations: 24
Status: Testing
QTH: EM17lr
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [37.7493, -97.0765, 381]}, "id": 381, "name": "KD0IJP"}, {"description": "ID: 392
Total Observations: 16
Status: Testing
QTH: JO51ds
Description: Raspberry Pi 2 with RTL-SDR Dongle v3", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [51.77733, 10.33085, 545]}, "id": 392, "name": "DL1MX - Buntenbock"}, {"description": "ID: 400
Total Observations: 906
Status: Testing
QTH: JN11bk
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [41.4211, 2.1541, 192]}, "id": 400, "name": "Alguer"}, {"description": "ID: 405
Total Observations: 71
Status: Testing
QTH: EM69rd
Description: Stationary test station.", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [39.146382, -86.533863, 220]}, "id": 405, "name": "blabs-satnogs-s1"}, {"description": "ID: 410
Total Observations: 34
Status: Testing
QTH: DM43ar
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [33.7292, -111.9583, 525]}, "id": 410, "name": "K7TAB GS"}, {"description": "ID: 414
Total Observations: 62
Status: Testing
QTH: MM50qd
Description: Testing with secondary antenna", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [30.1615, 71.4138, 106]}, "id": 414, "name": "PKPingu Test Station BB"}, {"description": "ID: 418
Total Observations: 1432
Status: Testing
QTH: JN89sb
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [49.0466697, 17.5268075, 200]}, "id": 418, "name": "ladam"}, {"description": "ID: 434
Total Observations: 121
Status: Testing
QTH: KN10lp
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [40.62543, 22.9577, 90]}, "id": 434, "name": "137mhz LNA Turnstile"}, {"description": "ID: 447
Total Observations: 116
Status: Testing
QTH: IO73xe
Description: J pole antenna. Good views to sea in 2 directions. Backed by a mountain", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [53.19099, -4.05784, 200]}, "id": 447, "name": "MW6DHN"}, {"description": "ID: 449
Total Observations: 238
Status: Testing
QTH: JO22fd
Description: Double cross dipole optimized for 137 MHz. Located inside but directly under a roof. Able to detect UHF for high passes (elev >25deg).", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [52.159, 4.4888, 0]}, "id": 449, "name": "LuSpace_NL"}, {"description": "ID: 451
Total Observations: 381
Status: Testing
QTH: KM25oh
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [35.31156, 25.17323, 148]}, "id": 451, "name": "SV9SEY"}, {"description": "ID: 462
Total Observations: 14
Status: Testing
QTH: FI09st
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [-0.183, -78.493, 2850]}, "id": 462, "name": "Universidad UTE"}, {"description": "ID: 471
Total Observations: 44
Status: Testing
QTH: EM69rd
Description: No-rotator station.", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [39.146, -86.534, 220]}, "id": 471, "name": "blabs-satnogs-s2"}, {"description": "ID: 484
Total Observations: 44
Status: Testing
QTH: JN18ev
Description: Paris La Villette.\r\nAntenna is currently blocked at 90deg elevation", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [48.893995, 2.387856, 70]}, "id": 484, "name": "DParabole"}, {"description": "ID: 485
Total Observations: 29
Status: Testing
QTH: EM83aq
Description: testing the waters. Rpi3 RTLSDR into scanner discone.", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [33.703, -83.92, 700]}, "id": 485, "name": "RpiSatNogs"}, {"description": "ID: 486
Total Observations: 67
Status: Testing
QTH: EM90gg
Description: N1SER SatNOGS Test Station", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [30.260274, -81.475566, 7]}, "id": 486, "name": "N1SER"}, {"description": "ID: 490
Total Observations: 0
Status: Testing
QTH: JN88ee
Description: Not mounted outside yet. Purely in test operation - won't see any signals.", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [48.18703274, 16.36450377, 225]}, "id": 490, "name": "rai38"}, {"description": "ID: 491
Total Observations: 42
Status: Testing
QTH: JN49ij
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [49.408792, 8.6868361, 100]}, "id": 491, "name": "M0MMS"}, {"description": "ID: 495
Total Observations: 9
Status: Testing
QTH: QE36mu
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [-43.139302, 147.034293, 240]}, "id": 495, "name": "Two Fifteen"}, {"description": "ID: 497
Total Observations: 51
Status: Testing
QTH: GF05sl
Description: Testing SatNOGS for future deployment in CABA.", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [-34.538, -58.466, 3]}, "id": 497, "name": "CABATest"}, {"description": "ID: 499
Total Observations: 87
Status: Testing
QTH: GF05te
Description: Raspberry Pi Mod 3 + RTL-SDR dongle", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [-34.804547, -58.387932, 40]}, "id": 499, "name": "LU7DID"}, {"description": "ID: 502
Total Observations: 70
Status: Testing
QTH: JO52gx
Description: ", "show": true, "point": {"color": {"rgba": [248, 148, 6, 1]}}, "position": {"cartographicDegrees": [52.9633, 10.5065, 70]}, "id": 502, "name": "Clemens_UE_2"}] \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..b5b13d0 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,39 @@ + + + + + + + + + + +
+ + + +Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License diff --git a/views/map/Worker.js b/views/map/Worker.js deleted file mode 100644 index 72639f5..0000000 --- a/views/map/Worker.js +++ /dev/null @@ -1,64 +0,0 @@ -self.importScripts("satellite.js"); - -norad = "" -groundStations = [] -TLE = [] -Orbits = [] - -onmessage = function(e) { - norad = e.data[0] - TLE = e.data[1] - getStations() - getOrbit() -} - -setInterval(function(){ - getStations() -}, 20000); - -setInterval(function(){ - var satrec = self.satellite_js.twoline2satrec(TLE[1],TLE[2]); - var gmst = self.satellite_js.gstime(new Date()); - var positionAndVelocity = self.satellite_js.propagate(satrec, new Date()); - var positionEci = positionAndVelocity.position - var positionGd = self.satellite_js.eciToGeodetic(positionEci, gmst) - var curLat = degress(positionGd.latitude) - var curLng = degress(positionGd.longitude) - if (groundStations[1] == undefined){ - groundStations.push([]) - } - - postMessage([norad,TLE[0],[curLat,curLng],groundStations[0],groundStations[1],Orbits]) - - -}, 1000); - -function getStations(){ -var xhttp = new XMLHttpRequest(); - xhttp.onreadystatechange = function() { - if (this.readyState == 4 && this.status == 200) { - groundStations = JSON.parse(this.responseText); - } - }; - xhttp.open("GET", "/stations_from_sat/"+norad, true); - xhttp.send(); -} - -function degress (radians) { - return radians * 180 / Math.PI; -}; - -function getOrbit(){ - var satrec = self.satellite_js.twoline2satrec(TLE[1],TLE[2]); - gmst = self.satellite_js.gstime(new Date()); - while(Orbits.length < 300){ - gmst = gmst+0.00833333333 - if (gmst > 6.28318530718){ - return - } - positionAndVelocity = self.satellite_js.propagate(satrec, (new Date() / 1000/60)); - positionEci = positionAndVelocity.position - positionGd = self.satellite_js.eciToGeodetic(positionEci, gmst) - Orbits.push([degress(positionGd.latitude),degress(positionGd.longitude)]) - } -} \ No newline at end of file diff --git a/views/map/map.html b/views/map/map.html deleted file mode 100644 index 79b7321..0000000 --- a/views/map/map.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - -
- - - - - -Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License