From 8183967eeef2d3fb13afa5e28859239613b33c6c Mon Sep 17 00:00:00 2001 From: Jogi Hofmüller Date: Sat, 13 Aug 2011 09:55:41 +0000 Subject: - implemented downloading and parsing TLEs from http://www.celestrak.com/NORAD/elements/amateur.txt git-svn-id: https://svn.spreadspace.org/mur.sat@140 7de4ea59-55d0-425e-a1af-a3118ea81d4c --- tools/mmd/MmdSatellite.py | 60 +++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 20 deletions(-) (limited to 'tools/mmd/MmdSatellite.py') diff --git a/tools/mmd/MmdSatellite.py b/tools/mmd/MmdSatellite.py index e6a0c08..97f516a 100644 --- a/tools/mmd/MmdSatellite.py +++ b/tools/mmd/MmdSatellite.py @@ -4,28 +4,10 @@ import ephem import time import os import sys +import urllib from MmdDb import Db from MmdLocation import Location -# 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 @@ -44,7 +26,8 @@ def dms2degdec (lonlat): class Satellite: def __init__ (self, location = False): - self.name = 'RADIOSCAF-B/ARISSAT-1' + self.name = 'RADIOSCAF-B' + self.nickname = 'ARISSAT-1' self.tle_filename = '/usr/local/mmd/tles/current' self.db = Db () self.initSatellite (location) @@ -150,14 +133,51 @@ class Satellite: return self._computeTrajectory () def _updateTLEFile (self): + ''' + store new TLE data in file with format + YYYYMMDDhhmmss (Year Month Day hour minute second) + and make symlink to self.tle_filename + ''' + if not self._getTLEFileFromNetwork (): + return False + filename = '/usr/local/mmd/tles/{0}'.format (time.strftime ('%Y%m%d%H%M%S')) + for line in self.tle_data: + if line.startswith (self.name): + tle = open (filename, 'w') + tle.write (line) + tle.write (self.tle_data.next ()) + tle.write (self.tle_data.next ()) + tle.close () + return self._compareAndLinkNewTLEFile (filename) return False + def _compareAndLinkNewTLEFile (self, filename): + old_data = open (self.tle_filename).read () + new_data = open (filename).read () + if old_data == new_data: + os.unlink (filename) + return False + os.unlink (self.tle_filename) + os.symlink (filename, self.tle_filename) + return True + def _updateTrajectory (self): self.db.satelliteDeleteObsoleteSSPs (time.strftime ('%s')) def getLatestSSP (self): return self.db.satelliteGetLatestSSP () + def _getTLEFileFromNetwork (self): + ''' + retreive TLE update from NORAD + ''' + networkfile = 'http://www.celestrak.com/NORAD/elements/amateur.txt' + try: + self.tle_data = urllib.urlopen (networkfile) + except IOError: + return False + return True + if __name__ == "__main__": satellite = Satellite () # print satellite.longitude, satellite.latitude -- cgit v1.2.3