|
|
@ -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() |