예제 #1
0
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)
예제 #2
0
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')
예제 #3
0
파일: igc2kmz.py 프로젝트: scls19fr/igc2kmz
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')
예제 #4
0
파일: igc2task.py 프로젝트: Iv/igc2kmz
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)