#!/usr/bin/env python import ephem import time import os from MmdDb import Db 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 degrees = float (parts[0]) fraction = (float (parts[1]) * 60.0 + float (parts[2])) / 3600 if parts[0][0] == '-': return degrees - fraction return degrees + fraction 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 def _loadCurrentSSP (self): pass 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__": 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