Index: points/trunk/points.py =================================================================== --- (revision ) +++ points/trunk/points.py (revision 31) @@ -1,0 +1,140 @@ +#!/usr/bin/env python + +""" +Generate glider goto list. + +Usage: + + python points.py +""" + +import os +from datetime import datetime + +months = {1: 'Jan', + 2: 'Feb', + 3: 'Mar', + 4: 'Apr', + 5: 'May', + 6: 'Jun', + 7: 'Jul', + 8: 'Aug', + 9: 'Sep', + 10: 'Oct', + 11: 'Nov', + 12: 'Dec'} + +LB1ADCP = [3310.172, -7820.007] +LB2ADCP = [3256.419, -7805.926] +LB3ADCP = [3251.142, -7800.793] + +glider_dir = '/var/opt/gmc/gliders' + +file_name = "goto_l20.ma" +glider_name = "pelagia" +glider_pos = [3313.310, -7810.844] +steps = 15 + +first_template = \ +"""# +# Filename: %s +# File creation time: %s +# Generated by: %s +# + +behavior_name=goto_list + + + b_arg: num_legs_to_run(nodim) -2 # -1 loop, -2 run once, > 0 = this m$ + b_arg: start_when(enum) 0 # 0 baw_immediately + b_arg: list_stop_when(enum) 7 # BAW_WHEN_WPT_DIST + + # SATISFYING RADIUS + b_arg: list_when_wpt_dist(m) 100 + + # LIST PARAMETERS + b_arg: initial_wpt(enum) 0 # 0 to n-1, -1 first after last, -2 c$ + b_arg: num_waypoints(nodim) %u + + + +""" + +last_template = \ +""" +""" + +def ddmm2decdeg(ddmm): + sign = ddmm < 0 + ddmm = abs(ddmm) + dd = (ddmm // 100) + mm = ddmm - (dd * 100) + dm = mm / 60 + if sign: + decdeg = -(dd + dm) + else: + decdeg = dd + dm + return decdeg + +def decdeg2ddmm(decdeg): + dd = int(decdeg) + dm = decdeg - dd + mm = dm * 60 + ddmm = (dd * 100) + mm + return ddmm + +def latlondict(latlonlist): + return {'lat': latlonlist[0], + 'lon': latlonlist[1]} + +def latlonlist(latlondict): + return [latlondict['lat'], latlondict['lon']] + +def line(target, origin, steps=steps): + vector = {'lat': target['lat'] - origin['lat'], + 'lon': target['lon'] - origin['lon']} + divs = {'lat': vector['lat'] / steps, + 'lon': vector['lon'] / steps} + return [{'lat': origin['lat'] + (x * divs['lat']), + 'lon': origin['lon'] + (x * divs['lon'])} + for x in range(1, steps + 1)] + +def swap(seq): + return [seq[1], seq[0]] + +if __name__ == "__main__": + LB1ADCP = map(ddmm2decdeg, LB1ADCP) + LB2ADCP = map(ddmm2decdeg, LB2ADCP) + LB3ADCP = map(ddmm2decdeg, LB3ADCP) + glider_pos = map(ddmm2decdeg, glider_pos) + + LB1ADCP = latlondict(LB1ADCP) + LB2ADCP = latlondict(LB2ADCP) + LB3ADCP = latlondict(LB3ADCP) + glider_pos = latlondict(glider_pos) + + points = line(LB2ADCP, glider_pos) + points = [latlonlist(point) for point in points] + points = [map(decdeg2ddmm, point) for point in points] + + points = [swap(point) for point in points] + + now = datetime.now() + now = "%02d-%s-%04d %02d:%02d:%02d UTC" % (now.day, + months[now.month], + now.year, + now.hour, + now.minute, + now.second, + ) + + handle = open(os.path.join(glider_dir, + glider_name, + "to-glider", + file_name), + "w") + handle.write(first_template % (file_name, now, __file__, steps)) + handle.writelines(["\t%.4f\t%.4f\n" % tuple(point) for point in points]) + handle.write(last_template) + handle.close() +