From 48792a5645d08b6d816a00b3a7e300e337b76cb9 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 15 Oct 2008 01:01:38 +0200 Subject: [PATCH] Amend task folder (untested). --- Makefile | 2 +- igc2kmz/__init__.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ igc2kmz/task.py | 6 +++--- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index b47850b..29cb8ee 100644 --- a/Makefile +++ b/Makefile @@ -195,7 +195,7 @@ examples/2008-07-28-XPG-KVE-02.kmz: examples/2008-07-28-XPG-KVE-02.igc examples/ -x examples/2008-07-28-XPG-KVE-02.gpx examples/2008-09-05-CGP-XAGC-01-ebessos.kmz: examples/2008-09-05-CGP-XAGC-01-ebessos.igc - $(IGC2KMZ) -z 2 -o $@ \ + $(IGC2KMZ) -z 3 -o $@ \ -i $< \ -t examples/2008-09-05-CGP-XAGC-01-ebessos.gpx diff --git a/igc2kmz/__init__.py b/igc2kmz/__init__.py index 5bed58a..4a460b4 100644 --- a/igc2kmz/__init__.py +++ b/igc2kmz/__init__.py @@ -706,6 +706,48 @@ class Flight(object): return folder +def make_task_folder(globals, task): + # TODO add description + style_url = globals.stock.check_hide_children_style.url() + folder = kml.Folder(name='Task', styleUrl=style_url) + style_url = globals.stock.xc_style.url() + done = set() + for tp in task.tps: + key = tp.name + if key in done: + continue + else: + done.add(key) + point = kml.Point(coordinates=[tp.coord]) + folder.add(kml.Placemark(point, name=tp.name, styleUrl=style_url)) + done = set() + for tp in task.tps: + key = (tp.name, tp.radius) + if key in done: + continue + else: + done.add(key) + coordinates = kml.coordinates.circle(tp.coord, tp.radius) + line_string = kml.LineString(coordinates, tessellate=1) + folder.add(kml.Placemark(line_string, styleUrl=style_url)) + for i in xrange(0, len(task.tps) - 1): + tp0 = task.tps[i] + tp1 = task.tps[i + 1] + coord0 = tp0.coord.coord_at(tp0.coord.initial_bearing_to(tp1.coord), + tp0.radius) + theta = tp1.coord.initial_bearing_to(tp0.coord) + coord1 = tp1.coord.coord_at(theta, tp1.radius) + line_string1 = kml.LineString(coordinates=[coord0, coord1], + tessellate=1) + coords = [coord1.coord_at(theta - math.pi / 12.0, 400.0), + coord1, + coord1.coord_at(theta + math.pi / 12.0, 400.0)] + line_string2 = kml.LineString(coordinates=coords, tessellate=1) + multi_geometry = kml.MultiGeometry(line_string1, line_string2) + folder.add(kml.Placemark(multi_geometry, styleUrl=style_url)) + return kmz.kmz(folder) + + def flights2kmz(flights, roots=[], tz_offset=0, task=None): stock = Stock() globals = util.OpenStruct() @@ -751,6 +793,8 @@ def flights2kmz(flights, roots=[], tz_offset=0, task=None): result = kmz.kmz() result.add_siblings(stock.kmz) result.add_roots(*roots) + if globals.task: + result.add_siblings(make_task_folder(globals, globals.task)) for flight in flights: result.add_siblings(flight.to_kmz(globals)) return result diff --git a/igc2kmz/task.py b/igc2kmz/task.py index e06bfe2..de51d8a 100644 --- a/igc2kmz/task.py +++ b/igc2kmz/task.py @@ -85,14 +85,14 @@ class Turnpoint(object): desc = desc_tag.text.encode('utf_8') if desc_tag else None lat = float(element.get('lat')) lon = float(element.get('lon')) - ele_tag = element.findtag('ele') + ele_tag = element.find('ele') ele = int(ele_tag.text) if ele_tag else 0 time_tag = element.find('time') if time_tag: dt = datetime.datetime.strptime(time_tag.text, '%Y-%m-%dT%H:%M:%SZ') else: dt = None - coord = Coord(lat, lon, ele, dt) + coord = Coord.deg(lat, lon, ele, dt) radius_tag = element.find('extensions/radius') radius = int(radius_tag.text) if radius_tag else 400 enter = element.find('extensions/exit') is None @@ -127,4 +127,4 @@ class Task(object): @classmethod def from_file(cls, file): element = parse(file) - return cls.from_element(element) + return cls.from_element(element.find('/rte'))