| @ -0,0 +1,83 @@ | |||
| from bs4 import BeautifulSoup | |||
| import glob | |||
| import os.path | |||
| def parseTCX(filename): | |||
| file = open(filename) | |||
| xml_file = file.read() | |||
| soup = BeautifulSoup(xml_file, 'lxml') | |||
| id = soup.find("id").text | |||
| lats = [] | |||
| longs = [] | |||
| for tag in soup.find_all("trackpoint"): | |||
| lats.append(tag.find("latitudedegrees").text) | |||
| longs.append(tag.find("longitudedegrees").text) | |||
| return id[:-10], lats, longs | |||
| def single_run(id, lats, longs): | |||
| locString = "" | |||
| for i in range(0, len(lats)): | |||
| locString += longs[i] + "," + lats[i] + " " | |||
| value = """ | |||
| <Placemark> | |||
| <name>{0}</name> | |||
| <description>xx Miles</description> | |||
| <Style> | |||
| <LineStyle> | |||
| <color>ff0000e6</color> | |||
| <width>4</width> | |||
| </LineStyle> | |||
| </Style> | |||
| <LineString> | |||
| <tessellate>1</tessellate> | |||
| <altitudeMode>clampToGround</altitudeMode> | |||
| <coordinates>{1}</coordinates> | |||
| </LineString> | |||
| </Placemark> | |||
| """ | |||
| return value.format(id, locString) | |||
| def convertToKML(): | |||
| base_path = os.path.dirname(os.path.realpath(__file__)) | |||
| files = glob.glob(base_path + "/tcx/*.tcx") | |||
| header = """<?xml version="1.0" encoding="utf-8" standalone="yes"?> | |||
| <kml xmlns="http://www.opengis.net/kml/2.2"> | |||
| <Document> | |||
| <name><![CDATA[38415617200]]></name> | |||
| <visibility>1</visibility> | |||
| <open>1</open> | |||
| <Folder id="Runs"> | |||
| <name>Tracks</name> | |||
| <visibility>1</visibility> | |||
| <open>0</open> | |||
| """ | |||
| footer = """ | |||
| </Folder> | |||
| </Document> | |||
| </kml> | |||
| """ | |||
| o_file = open("outputKML.kml", "w") | |||
| o_file.write(header) | |||
| for file in files: | |||
| id, lats, longs = parseTCX(file) | |||
| o_file.write(single_run(id, lats, longs)) | |||
| print(files) | |||
| o_file.write(footer) | |||
| o_file.close() | |||
| convertToKML() | |||