From 062f7d3099a338b58729c904e971761fce78724a Mon Sep 17 00:00:00 2001 From: wgaylord Date: Fri, 15 Feb 2019 10:08:35 -0600 Subject: [PATCH] Progress --- server/satnogs.py | 13 ++- views/globe/Worker.js | 55 +++++++----- views/globe/globe.html | 185 +++++++++++++++++++++++++++++++++++------ 3 files changed, 203 insertions(+), 50 deletions(-) diff --git a/server/satnogs.py b/server/satnogs.py index eedb264..05f0068 100644 --- a/server/satnogs.py +++ b/server/satnogs.py @@ -74,11 +74,16 @@ def getActive(): 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) @@ -87,6 +92,10 @@ def GetGroundStations(): 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) @@ -153,7 +162,7 @@ def index(): def api_active_stations(): sations = [] for x in Stations: - sations.append({'id':x['id'],'name':x['name'],'lat_lng':[x["lat"],x['lng']]}) + 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/') diff --git a/views/globe/Worker.js b/views/globe/Worker.js index 72639f5..480f6e6 100644 --- a/views/globe/Worker.js +++ b/views/globe/Worker.js @@ -1,37 +1,44 @@ self.importScripts("satellite.js"); +self.importScripts("moment.min.js"); +self.importScripts("https://cesiumjs.org/releases/1.53/Build/Cesium/Cesium.js") norad = "" groundStations = [] -TLE = [] +satrec = null Orbits = [] +name = "" onmessage = function(e) { norad = e.data[0] - TLE = e.data[1] + name = e.data[1][0] + satrec = self.satellite_js.twoline2satrec(e.data[1][1],e.data[1][2]); getStations() - getOrbit() + Orbits = getObrit() } setInterval(function(){ getStations() -}, 20000); +}, 10000); setInterval(function(){ - var satrec = self.satellite_js.twoline2satrec(TLE[1],TLE[2]); + 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) - 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]) + postMessage([norad,name,self.Cesium.Ellipsoid.WGS84.cartographicToCartesian(new self.Cesium.Cartographic(positionGd.longitude, positionGd.latitude, (positionGd.height*1000))),groundStations[0],groundStations[1],Orbits]) -}, 1000); +}, 10000); function getStations(){ var xhttp = new XMLHttpRequest(); @@ -48,17 +55,19 @@ 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 + +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/globe/globe.html b/views/globe/globe.html index 67fa0c2..313a611 100644 --- a/views/globe/globe.html +++ b/views/globe/globe.html @@ -1,6 +1,7 @@ + @@ -16,38 +17,172 @@