summaryrefslogtreecommitdiff
path: root/tools/mmd/MmdSatellite.py
blob: 1575648560723f784aeba07202229ea47e2390f1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/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