From 77702aba7c9a13b11a91863672c557ac5011c5ac Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 6 Jun 2018 12:13:12 +0200 Subject: [PATCH] exports valid kml --- rowers/courses.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/rowers/courses.py b/rowers/courses.py index cfe3ac45..4658462e 100644 --- a/rowers/courses.py +++ b/rowers/courses.py @@ -14,6 +14,16 @@ import geocoder from matplotlib import path import xml.etree.ElementTree as et +from xml.etree.ElementTree import Element, SubElement, Comment, tostring +from xml.dom import minidom + +def prettify(elem): + """Return a pretty-printed XML string for the Element. + """ + rough_string = tostring(elem, 'utf-8') + reparsed = minidom.parseString(rough_string) + return reparsed.toprettyxml(indent=" ") + import pandas as pd import numpy as np from timezonefinder import TimezoneFinder @@ -108,6 +118,48 @@ def get_polygons(polygonpms): return polygons +def coursetokml(course): + top = Element('kml') + document = SubElement(top,'Document') + name = SubElement(document, 'name') + name.text = 'Courses.kml' + folder = SubElement(document,'Folder') + foldername = SubElement(folder,'name') + foldername.text = 'Courses' + folder2 = SubElement(folder,'Folder') + coursename = SubElement(folder2,'name') + coursename.text = course.name + open = SubElement(folder2,'open') + open.text = '1' + + polygons = GeoPolygon.objects.filter(course=course).order_by("order_in_course") + + polygonsxml = [] + + for polygon in polygons: + placemark = SubElement(folder2,'Placemark') + polygonname = SubElement(placemark,'name') + polygonname.text = polygon.name + p = SubElement(placemark,'Polygon') + tessellate = SubElement(p,'tessellate') + tessellate.text = '1' + boundary = SubElement(p,'outerBoundaryIs') + ring = SubElement(boundary,'LinearRing') + coordinates = SubElement(ring,'coordinates') + coordinates.text = '' + points = GeoPoint.objects.filter(polygon=polygon).order_by("order_in_poly") + for point in points: + coordinates.text += '{lon},{lat},0 '.format( + lat = point.latitude, + lon = point.longitude, + ) + coordinates.text += '{lon},{lat},0'.format( + lat = points[0].latitude, + lon = points[0].longitude, + ) + + return prettify(top) + def kmltocourse(f): doc = et.parse(f) courses = doc.findall('.//opengis:Folder[opengis:Placemark]',ns)