f = open("OuCest.kml")
lignes = f.readlines()
f.close()

donnees = []
for ligne in lignes:
    if "<when>" in ligne or "<gx:coord>" in ligne:
        donnees.append(ligne)

def heure(ligne):
    t = ligne.index('T')
    z = ligne.index('Z')
    h, m, s = ligne[t+1:z].split(':')
    return [float(h), float(m), float(s)]

def coord(ligne):
    debut = ligne.index(">") + 1
    fin = ligne.index("</")
    long, lat, alt = ligne[debut:fin].split()
    return [float(long), float(lat), float(alt)]

releves = []
for i in range(0, len(donnees), 2):
    releves.append(heure(donnees[i]) + coord(donnees[i+1]))

def secondes(L):
    return 3600*L[0] + 60*L[1] + L[2]

def hms(s):
    return [s//3600, (s%3600)//60, s%60]

duree = secondes(releves[-1][0:3])-secondes(releves[0][0:3])
print('Durée de la randonnée :', hms(duree))

t_min = t_max = releves[0][0:3]
alt_min = alt_max = releves[0][5]
for r in releves:
    if r[5] > alt_max:
        alt_max = r[5]
        t_max = r[0:3]
    elif r[5] < alt_min:
        alt_min = r[5]
        t_min = r[0:3]

print('Altitude maximale :', alt_max, 'atteinte à', t_max)
print('Altitude minimale :', alt_min, 'atteinte à', t_min)

from math import cos, sin, asin, sqrt, pi

def orthodromie(A, B):
    loA, laA = A[0]*pi/180, A[1]*pi/180
    loB, laB = B[0]*pi/180, B[1]*pi/180
    return 2*6371*asin(sqrt(sin((laB-laA)/2)**2 + cos(laA)*cos(laB)*sin((loB-loA)/2)**2))

distance_parcourue = [0]
d = 0
for i in range(1, len(releves)):
    A = releves[i-1][3:5]
    B = releves[i][3:5]
    d += orthodromie(A, B)
    distance_parcourue.append(d)

print('Longueur de la randonnée :', distance_parcourue[-1])
print('Vitesse moyenne :', distance_parcourue[-1]/duree*3600)

temps_ecoule = [0]
t = 0
for i in range(1, len(releves)):
    t1 = secondes(releves[i-1][:3])
    t2 = secondes(releves[i][:3])
    t += t2 - t1
    temps_ecoule.append(t)

import numpy as np
import matplotlib.pyplot as plt

plt.plot(temps_ecoule, distance_parcourue)
plt.show()

altitudes = [r[5] for r in releves]
plt.plot(distance_parcourue, altitudes)
plt.show()

longitudes = [r[3] for r in releves]
latitudes = [r[4] for r in releves]
plt.plot(longitudes, latitudes)
plt.show()

from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(longitudes, latitudes, altitudes)
plt.show()
