diff options
Diffstat (limited to 'tools/mmd/MmdSatellite.py')
-rw-r--r-- | tools/mmd/MmdSatellite.py | 126 |
1 files changed, 84 insertions, 42 deletions
diff --git a/tools/mmd/MmdSatellite.py b/tools/mmd/MmdSatellite.py index 42d4423..1575648 100644 --- a/tools/mmd/MmdSatellite.py +++ b/tools/mmd/MmdSatellite.py @@ -2,15 +2,34 @@ import ephem import time +import os +from MmdDb import Db -def createJavaArray (jarray, name): - astring = 'var {0} = new Array ('.format (name) - for e in jarray: - astring = '{0}\n\t{1}'.format (astring, e) - astring = '{0}\n);'.format (astring) +def createJavaArray (point_list, name): + astring = '''var {0} = new Array (\n'''.format (name) + astring = '{0}\tnew Array ('.format (astring) + last = 'west' + + for point in point_list: + if point[0][0] == '-': + if last == 'east': + astring = astring[:-1] + astring = '{0}\n\t\t),\n\tnew Array ('.format (astring) + last = 'west' + else: + last = 'east' + astring = '{0}\n\t\tnew OpenLayers.LonLat ({1}, {2}).transform (from, to),'.format (astring, point[0], point[1]) + if astring[-1] == ',': + astring = astring[:-1] + astring = '{0}\n\t\t)\n\t);'.format (astring) return astring def dms2degdec (lonlat): + ''' + convert a position argument from Deg:Min:Sec.Frac to + Deg.Frac + ''' + parts = lonlat.split (':') if len (parts) != 3: return 0.0 @@ -20,46 +39,69 @@ def dms2degdec (lonlat): return degrees - fraction return degrees + fraction -line0 = "ARISSAT-1/RADIOSCAF-B" -line1 = "1 37772U 98067CK 11220.22334818 .00031592 00000-0 37647-3 0 118" -line2 = "2 37772 51.6391 258.8215 0013530 58.1430 19.7106 15.60689826 619" +class Satellite: + + def __init__ (self): + self.name = 'RADIOSCAF-B/ARISSAT-1' + self.tle_filename = '/usr/local/mmd/tles/current' + self.db = Db () + + def getCurrentSSP (self): + pass + + def getTrajectoryAsJavaArray (self, minutes = 180): + pass + + def _loadTrajectory (self, minutes): + pass -line0 = "FENGYUN 1C DEB" -line1 = "1 30807U 99025AUR 11217.95818111 .00601080 13349-3 25872-2 0 3694" -line2 = "2 30807 099.0868 165.1314 0028608 315.8949 044.0355 15.84325581244298" + def _loadCurrentSSP (self): + pass -# line0 = "ARISSat-1" -# line1 = "1 37772U 98067CK 11219.88827546 .00035107 00000-0 41770-3 0 100" -# line2 = "2 37772 51.6395 260.5080 0013376 55.7500 298.2807 15.60679045 559" -# -# line0 = "ISS (ZARYA)" -# line1 = "1 25544U 98067A 11220.37158565 .00004586 00000-0 61164-4 0 8541" -# line2 = "2 25544 51.6393 258.0860 0012828 54.3148 131.8091 15.60282006729050" + def computeTrajectory (self): + sat = ephem.readtle (self._tle[0], self._tle[1], self._tle[2]) + graz = ephem.Observer () + graz.long, graz.lat, graz.elevation = 15.44226, 47.06576, 376 + + latest = self.db.satelliteGetLatestSSP () + if latest: + timestamp = int (latest['timestamp']) + 60 + else: + timestamp = int (time.strftime ('%s')) + 60 + while timestamp % 60 != 0: + timestamp += 1 + + print graz.date + for i in range (60 * 5): + graz.date = time.strftime ('%Y/%m/%d %H:%M:%S', time.gmtime (timestamp)) + sat.compute (graz) + self.db.satelliteInsertNewSSP (timestamp, dms2degdec (sat.sublong.__str__ ()), dms2degdec (sat.sublat.__str__ ())) + # print timestamp, dms2degdec (sat.sublong.__str__ ()), dms2degdec (sat.sublat.__str__ ()), graz.date, time.strftime ('%Y/%m/%d %H:%M:%S', time.localtime (timestamp)) + timestamp += 60 + return True + + def _loadTLE (self): + try: + tle = open (self.tle_filename, 'r') + except IOError: + return False + self._tle = [] + count = 0 + for line in tle.readlines (): + self._tle.append (line) + count += 1 + if count != 3: + return False + return True if __name__ == "__main__": - sat = ephem.readtle (line0, line1, line2) - graz = ephem.Observer () - graz.long, graz.lat, graz.elevation = '15.44226', '47.06576', 376 - # graz.date = time.strftime ('%Y/%m/%d %H:%M:S') - # sat.compute (graz) - # print sat.name, graz.next_pass (sat), graz.date, sat.sublong, sat.sublat, float (sat.range/1000) - # print sat.name, graz.date, dms2degdec (sat.sublong.__str__ ()), dms2degdec (sat.sublat.__str__ ()), float (sat.range/1000) - # graz.date += ephem.minute - # sat.compute (graz) - # print sat.name, graz.next_pass (sat), graz.date, sat.sublong, sat.sublat, float (sat.range/1000) - # print sat.name, graz.date, dms2degdec (sat.sublong.__str__ ()), dms2degdec (sat.sublat.__str__ ()), float (sat.range/1000) - sat.compute (graz) - array_string = 'new OpenLayers.LonLat ({0}, {1}).transform (from, to){2}' - java_array = [array_string.format (dms2degdec (sat.sublong.__str__ ()), dms2degdec (sat.sublat.__str__ ()), ',')] - for i in range (12 * 24): - graz.date += 5 * ephem.minute - sat.compute (graz) - # print sat.name, graz.date, dms2degdec (sat.sublong.__str__ ()), dms2degdec (sat.sublat.__str__ ()), float (sat.elevation) / 1000 - java_array.append (array_string.format (dms2degdec (sat.sublong.__str__ ()), dms2degdec (sat.sublat.__str__ ()), ',')) - - graz.date += 5 * ephem.minute - sat.compute (graz) - java_array.append (array_string.format (dms2degdec (sat.sublong.__str__ ()), dms2degdec (sat.sublat.__str__ ()), '')) - print createJavaArray (java_array, 'points') + satellite = Satellite () + try: + assert satellite._loadTLE (), 'loading TLE failed' + print satellite._tle + assert satellite.computeTrajectory (), 'computing trajectory failed' + except AssertionError as e: + print 'Error: {0}'.format (e) + # vim: tw=0 ts=2 # EOF |