def main(argv): parser = OptionParser(usage='Usage: %prog [options] filename.igc', description='IGC to task converter') parser.add_option('-o', '--output', metavar='FILENAME', help='set output filename') parser.add_option('-n', '--name', metavar='NAME', help='set task name') parser.add_option('-z', '--tz-offset', metavar='HOURS', type='int', help='set timezone offset') parser.add_option('--start', metavar='NAME', help='set start turnpoint') parser.add_option('--start-count', metavar='NUMBER', type='int', help='set start count') parser.add_option('--start-radius', metavar='RADIUS', type='int', help='set start radius in meters') parser.add_option('--start-time', metavar='TIME', help='set start time') parser.add_option('--ess', metavar='NAME', help='set end of speed section turnpoint') parser.add_option('--ess-count', metavar='NUMBER', type='int', help='set end of speed section count') parser.add_option('--ess-radius', metavar='RADIUS', type='int', help='set end of speed section radius in meters') parser.add_option('--goal', metavar='NAME', help='set goal turnpoint') parser.add_option('--goal-count', metavar='NUMBER', type='int', help='set goal count') parser.add_option('--goal-radius', metavar='RADIUS', type='int', help='set start radius in meters') parser.set_defaults(tz_offset=0) parser.set_defaults(start_count=0) parser.set_defaults(ess_count=0) parser.set_defaults(goal_count=0) # options, args = parser.parse_args(argv) if len(args) < 2: parser.error('no IGC file specified') if len(args) > 2: parser.error('excess arguments on command line: %s' % repr(args[2:])) # igc = IGC(open(args[1])) if not igc.c: parser.error('%s does not contain a task' % repr(argv[1])) tps = [] for c in igc.c: if c.name == 'TAKEOFF' or c.name == 'LANDING': continue m = re.match(r'([A-Z][0-9]{2})([0-9]{3})', c.name) if m: name = m.group(1) ele = 10 * int(m.group(2)) else: name = c.name ele = 0 coord = Coord(c.lat, c.lon, ele) tp = Turnpoint(name, coord) tps.append(tp) task = Task(options.name, tps) # if options.start: start = find_nth(lambda tp: tp.name == options.start, task.tps, options.start_count) if not start: parser.error('start turnpoint %s not found' % repr(options.start)) else: start = task.tps[1] if options.start_radius: start.radius = int(options.start_radius) if options.start_time: m = re.match(r'(\d+):(\d\d)\Z', options.start_time) if not m: parser.error('invalid start time %s' % repr(options.start_time)) hour, minute = map(int, m.group(1, 2)) start.coord.dt = igc.b[0].dt.replace(hour=hour, minute=minute, second=0) \ - timedelta(seconds=3600 * options.tz_offset) # if options.ess: ess = find_nth(lambda tp: tp.name == options.ess, task.tps, options.ess_count) if not ess: parser.error('end of speed section turnpoint %s not found' % repr(options.ess)) else: ess = task.tps[-2] if options.ess_radius: ess.radius = int(options.ess_radius) # if options.goal: goal = find_nth(lambda tp: tp.name == options.goal, task.tps, options.goal_count) if not goal: parser.error('goal turnpoint %s not found' % repr(options.goal)) else: goal = task.tps[-1] if options.goal_radius: goal.radius = int(options.goal_radius) # with gpx_tag(TreeBuilder()) as tb: element = task.build_tree(tb).close() output = open(options.output, 'w') if options.output else sys.stdout output.write('<?xml version="1.0" encoding="utf-8"?>\n') pretty_write(output, element)
def main(argv): parser = optparse.OptionParser(usage='Usage: %prog [options]', description="IGC to Google Earth converter") parser.add_option('-o', '--output', metavar='FILENAME', help='set output filename') parser.add_option('-z', '--tz-offset', metavar='HOURS', type='int', help='set timezone offset') parser.add_option('-r', '--root', metavar='FILENAME', action='append', dest='roots', help='add root element') parser.add_option('-t', '--task', metavar='FILENAME', help='set task') group = optparse.OptionGroup(parser, 'Per-flight options') group.add_option('-i', '--igc', metavar='FILENAME', type='string', action='callback', callback=add_flight, help='set flight IGC file') group.add_option('-n', '--pilot-name', metavar='STRING', type='string', action='callback', callback=set_flight_option, help='set pilot name') group.add_option('-g', '--glider-type', metavar='STRING', type='string', action='callback', callback=set_flight_option, help='set glider type') group.add_option('-c', '--color', metavar='COLOR', type='string', action='callback', callback=set_flight_option, help='set track line color') group.add_option('-w', '--width', metavar='INTEGER', type='int', action='callback', callback=set_flight_option, help='set track line width') group.add_option('-u', '--url', metavar='URL', type='string', action='callback', callback=set_flight_option, help='set flight URL') group.add_option('-x', '--xc', metavar='FILENAME', type='string', action='callback', callback=set_flight_xc, help='set flight XC') parser.add_option_group(group) group = optparse.OptionGroup(parser, 'Per-photo options') group.add_option('-p', '--photo', metavar='URL', type='string', action='callback', callback=add_photo, help='add photo') group.add_option('-d', '--description', metavar='STRING', type='string', action='callback', callback=set_photo_option, help='set photo comment') parser.add_option_group(group) # parser.set_defaults(flights=[]) parser.set_defaults(roots=[]) parser.set_defaults(tz_offset=0) # options, args = parser.parse_args(argv) if len(options.flights) == 0: parser.error('no flights specified') if len(args) != 1: parser.error('extra arguments on command line: %s' % repr(args[1:])) # roots = [Verbatim(open(root).read()) for root in options.roots] task = Task.from_file(open(options.task)) if options.task else None kmz = flights2kmz(options.flights, roots=roots, tz_offset=options.tz_offset, task=task) output = options.output or default_output kmz.write(output, '2.2')
def main(argv): parser = optparse.OptionParser( usage='Usage: %prog [options]', description="IGC to Google Earth converter") parser.add_option('-o', '--output', metavar='FILENAME', help='set output filename') parser.add_option('-z', '--tz-offset', metavar='HOURS', type='int', help='set timezone offset') parser.add_option('-r', '--root', metavar='FILENAME', action='append', dest='roots', help='add root element') parser.add_option('-t', '--task', metavar='FILENAME', help='set task') group = optparse.OptionGroup(parser, 'Per-flight options') group.add_option('-i', '--igc', metavar='FILENAME', type='string', action='callback', callback=add_flight, help='set flight IGC file') group.add_option('-n', '--pilot-name', metavar='STRING', type='string', action='callback', callback=set_flight_option, help='set pilot name') group.add_option('-g', '--glider-type', metavar='STRING', type='string', action='callback', callback=set_flight_option, help='set glider type') group.add_option('-c', '--color', metavar='COLOR', type='string', action='callback', callback=set_flight_option, help='set track line color') group.add_option('-w', '--width', metavar='INTEGER', type='int', action='callback', callback=set_flight_option, help='set track line width') group.add_option('-u', '--url', metavar='URL', type='string', action='callback', callback=set_flight_option, help='set flight URL') group.add_option('-x', '--xc', metavar='FILENAME', type='string', action='callback', callback=set_flight_xc, help='set flight XC') parser.add_option_group(group) group = optparse.OptionGroup(parser, 'Per-photo options') group.add_option('-p', '--photo', metavar='URL', type='string', action='callback', callback=add_photo, help='add photo') group.add_option('-d', '--description', metavar='STRING', type='string', action='callback', callback=set_photo_option, help='set photo comment') parser.add_option_group(group) # parser.set_defaults(flights=[]) parser.set_defaults(output='igc2kmz.kmz') parser.set_defaults(roots=[]) parser.set_defaults(tz_offset=0) # options, args = parser.parse_args(argv) if len(options.flights) == 0: parser.error('no flights specified') if len(args) != 1: parser.error('extra arguments on command line: %s' % repr(args[1:])) # roots = [Verbatim(open(root).read()) for root in options.roots] task = Task.from_file(open(options.task)) if options.task else None kmz = flights2kmz(options.flights, roots=roots, tz_offset=options.tz_offset, task=task) kmz.write(options.output, '2.2')
def main(argv): parser = OptionParser( usage='Usage: %prog [options] filename.igc', description='IGC to task converter') parser.add_option('-o', '--output', metavar='FILENAME', help='set output filename') parser.add_option('-n', '--name', metavar='NAME', help='set task name') parser.add_option('-z', '--tz-offset', metavar='HOURS', type='int', help='set timezone offset') parser.add_option('--start', metavar='NAME', help='set start turnpoint') parser.add_option('--start-count', metavar='NUMBER', type='int', help='set start count') parser.add_option('--start-radius', metavar='RADIUS', type='int', help='set start radius in meters') parser.add_option('--start-time', metavar='TIME', help='set start time') parser.add_option('--ess', metavar='NAME', help='set end of speed section turnpoint') parser.add_option('--ess-count', metavar='NUMBER', type='int', help='set end of speed section count') parser.add_option('--ess-radius', metavar='RADIUS', type='int', help='set end of speed section radius in meters') parser.add_option('--goal', metavar='NAME', help='set goal turnpoint') parser.add_option('--goal-count', metavar='NUMBER', type='int', help='set goal count') parser.add_option('--goal-radius', metavar='RADIUS', type='int', help='set start radius in meters') parser.set_defaults(tz_offset=0) parser.set_defaults(start_count=0) parser.set_defaults(ess_count=0) parser.set_defaults(goal_count=0) # options, args = parser.parse_args(argv) if len(args) < 2: parser.error('no IGC file specified') if len(args) > 2: parser.error('excess arguments on command line: %s' % repr(args[2:])) # igc = IGC(open(args[1])) if not igc.c: parser.error('%s does not contain a task' % repr(argv[1])) tps = [] for c in igc.c: if c.name == 'TAKEOFF' or c.name == 'LANDING': continue m = re.match(r'([A-Z][0-9]{2})([0-9]{3})', c.name) if m: name = m.group(1) ele = 10 * int(m.group(2)) else: name = c.name ele = 0 coord = Coord(c.lat, c.lon, ele) tp = Turnpoint(name, coord) tps.append(tp) task = Task(options.name, tps) # if options.start: start = find_nth(lambda tp: tp.name == options.start, task.tps, options.start_count) if not start: parser.error('start turnpoint %s not found' % repr(options.start)) else: start = task.tps[1] if options.start_radius: start.radius = int(options.start_radius) if options.start_time: m = re.match(r'(\d+):(\d\d)\Z', options.start_time) if not m: parser.error('invalid start time %s' % repr(options.start_time)) hour, minute = map(int, m.group(1, 2)) start.coord.dt = igc.b[0].dt.replace(hour=hour, minute=minute, second=0) \ - timedelta(seconds=3600 * options.tz_offset) # if options.ess: ess = find_nth(lambda tp: tp.name == options.ess, task.tps, options.ess_count) if not ess: parser.error('end of speed section turnpoint %s not found' % repr(options.ess)) else: ess = task.tps[-2] if options.ess_radius: ess.radius = int(options.ess_radius) # if options.goal: goal = find_nth(lambda tp: tp.name == options.goal, task.tps, options.goal_count) if not goal: parser.error('goal turnpoint %s not found' % repr(options.goal)) else: goal = task.tps[-1] if options.goal_radius: goal.radius = int(options.goal_radius) # with gpx_tag(TreeBuilder()) as tb: element = task.build_tree(tb).close() output = open(options.output, 'w') if options.output else sys.stdout output.write('<?xml version="1.0" encoding="utf-8"?>\n') pretty_write(output, element)