diff options
Diffstat (limited to 'tools/mmd')
-rw-r--r-- | tools/mmd/MmdSatellite.py | 43 | ||||
-rw-r--r-- | tools/mmd/MmdWidgets.py | 95 |
2 files changed, 114 insertions, 24 deletions
diff --git a/tools/mmd/MmdSatellite.py b/tools/mmd/MmdSatellite.py index adb5fd8..42d4423 100644 --- a/tools/mmd/MmdSatellite.py +++ b/tools/mmd/MmdSatellite.py @@ -3,20 +3,20 @@ import ephem import time +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) + return astring + def dms2degdec (lonlat): parts = lonlat.split (':') if len (parts) != 3: return 0.0 degrees = float (parts[0]) fraction = (float (parts[1]) * 60.0 + float (parts[2])) / 3600 - # print "debug" - # print parts - # print degrees - # print float (parts[1]) * 60.0 - # print float (parts[2]) - # print fraction - # print "debug end" - if degrees < 0: + if parts[0][0] == '-': return degrees - fraction return degrees + fraction @@ -24,6 +24,9 @@ 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" +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" # line0 = "ARISSat-1" # line1 = "1 37772U 98067CK 11219.88827546 .00035107 00000-0 41770-3 0 100" @@ -38,13 +41,25 @@ if __name__ == "__main__": 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) - print sat.name, graz.next_pass (sat), graz.date, sat.sublong, sat.sublat, float (sat.range/1000) - print sat.name, graz.next_pass (sat), graz.date, dms2degdec (sat.sublong.__str__ ()), dms2degdec (sat.sublat.__str__ ()), float (sat.range/1000) - graz.date += ephem.hour - sat.compute (graz) - print sat.name, graz.next_pass (sat), graz.date, sat.sublong, sat.sublat, float (sat.range/1000) - print sat.name, graz.next_pass (sat), graz.date, dms2degdec (sat.sublong.__str__ ()), dms2degdec (sat.sublat.__str__ ()), float (sat.range/1000) + 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') # vim: tw=0 ts=2 # EOF diff --git a/tools/mmd/MmdWidgets.py b/tools/mmd/MmdWidgets.py index 4f0d582..accb87e 100644 --- a/tools/mmd/MmdWidgets.py +++ b/tools/mmd/MmdWidgets.py @@ -3,8 +3,54 @@ web widgets for MURSAT1 Dashboard """ import time +import ephem from MmdLocation import Location +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) + return astring + +def dms2degdec (lonlat): + 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 + +def computeTrajectory (longitude, latitude, elevation): + """ + test for static TLE to trajectory computation + """ + 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" + + sat = ephem.readtle (line0, line1, line2) + graz = ephem.Observer () + graz.long, graz.lat, graz.elevation = longitude, latitude, elevation + + sat.compute (graz) + array_string = 'new OpenLayers.LonLat ({0}, {1}).transform (from, to){2}' + longitude = dms2degdec (sat.sublong.__str__ ()) + latitude = dms2degdec (sat.sublat.__str__ ()) + 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) + 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__ ()), '')) + + return longitude, latitude, createJavaArray (java_array, 'trajectory') + def loginFormWidget (): html = ''' Please enter your email and password in the form below. @@ -155,30 +201,59 @@ def osmWidget (satellite, user): user_location = user.getDefaultLocation () if not user_location: user_location = Location () + longitude, latitude, java = computeTrajectory (user_location.longitude, user_location.latitude, 300) + + # + # how can we use { and } in javascript that can be ignored by python format ()? + # html = ''' <div id="osm"></div> <script src="http://www.openlayers.org/api/OpenLayers.js"></script> <script> + // satellite and user position var from = new OpenLayers.Projection ("EPSG:4326"); var to = new OpenLayers.Projection ("EPSG:900913"); - var satellite = new OpenLayers.LonLat ({0}, {1}).transform (from, to); + var sat_position = new OpenLayers.LonLat ({0}, {1}).transform (from, to); var user_location = new OpenLayers.LonLat ({2}, {3}).transform (from, to); // create a map - map = new OpenLayers.Map ("osm"); + var map = new OpenLayers.Map ("osm"); map.addLayer (new OpenLayers.Layer.OSM ()); - // set a marker - var markers = new OpenLayers.Layer.Markers ("Markers"); - map.addLayer (markers); - markers.addMarker (new OpenLayers.Marker (satellite)); - markers.addMarker (new OpenLayers.Marker (user_location)); + // create a markers + var markersLayer = new OpenLayers.Layer.Markers ("Markers"); + var sat = new OpenLayers.Marker (sat_position); + var user = new OpenLayers.Marker (user_location); + user.setOpacity (0.5); + map.addLayer (markersLayer); + markersLayer.addMarker (sat); + markersLayer.addMarker (user); + + // array build by python ;) + {4} + + // points/polygons + var lineLayer = new OpenLayers.Layer.Vector ("Polygons"); + map.addLayer (lineLayer); + map.addControl (new OpenLayers.Control.DrawFeature(lineLayer, OpenLayers.Handler.Path)); + + var points = new Array (new OpenLayers.Geometry.Point (sat_position.lon, sat_position.lat)); + + for (var i = 0; i < trajectory.length; i++) + {{ + points.push (new OpenLayers.Geometry.Point (trajectory[i].lon, trajectory[i].lat)); + }} + + var polygon = new OpenLayers.Geometry.LineString (points); + var lineStyle = {{strokeColor: '#00ff00', strokeOpacity: 1, strokeWidth: 2}}; + var lineFeature = new OpenLayers.Feature.Vector (polygon, null, lineStyle); + lineLayer.addFeatures ([lineFeature]); // center the map - map.setCenter (user_location, 2); + map.setCenter (sat_position, 2); + </script> - <!-- lon: {2} lat: {3} --> - '''.format (satellite['longitude'], satellite['latitude'], user_location.longitude, user_location.latitude) + '''.format (longitude, latitude, user_location.longitude, user_location.latitude, java) return html |