###############################################################################
##                  TP : Itinéraires grandes villes                          ##
###############################################################################

import matplotlib.pyplot as plt
import sqlite3 as lt            # Bibliothèque pour les requêtes SQL
import numpy as np
dbh=lt.connect('dots.db')
cur=dbh.cursor()


## Tracé de la carte de France et Fonction Calcul  -  Code fourni

def points(idd,nump):

    cur.execute("select contours_departements.x,contours_departements.y FROM departements join contours_departements on contours_departements.id_departement=departements.id where departements.id=? and contours_departements.numero_poly=?",(idd,nump))
    result=cur.fetchall()
    return result

def polygones(idd):
    cur.execute("select distinct numero_poly FROM contours_departements where id_departement=?",(idd,))
    result=cur.fetchall()
    return result

def liste_dep_plusieurs_polygones():
    cur.execute("select id,nom from departements")
    result=cur.fetchall()
    Resultat=[]
    for i in result:
        if i[0]!=1:
            Resultat.append(i[1])
    print("Résultat de la question 8")
    print(Resultat)

def carte_dep(idd):
    Liste_poly=polygones(idd)
    for k in Liste_poly:
        nump=k[0]
        X,Y=[],[]
        Liste=points(idd,nump)
        for i in Liste:
            X.append(i[0])
            Y.append(i[1])
        X.append(Liste[0][0])
        Y.append(Liste[0][1])
        plt.plot(X,Y,color='b')

def carteFrance():
    plt.axis('equal')
    plt.axes().set_aspect(1.5)
    for n in range(1,92):
        if n!=29 and n!=30:
            carte_dep(n)
    plt.grid()

def Grandes_Communes(Pop_min):
    cur.execute("SELECT c.nom AS Nom , AVG(cc.x) AS Longitude , AVG(cc.y) AS Latitude , population FROM communes AS c JOIN contours_communes AS cc ON c.id=cc.id_commune WHERE population>=? and id_departement<>29 and id_departement<>30 GROUP BY cc.id_commune",(Pop_min,))
    result=cur.fetchall()
    return result

def Calcul(D,C1,C2):
    lon1,lon2,lat1,lat2=D[C1][0],D[C2][0],D[C1][1],D[C2][1]
    lon1,lon2=lon1*np.pi/180,lon2*np.pi/180     # Longitudes
    lat1,lat2=lat1*np.pi/180,lat2*np.pi/180     # Latitudes
    d=2*6371*np.arcsin(np.sqrt((np.sin((lat2-lat1)/2))**2+np.cos(lat1)*np.cos(lat2)*(np.sin((lon2-lon1)/2))**2))
    return d        # On retourne la distance

## Question 4 - Dictionnaire des communes

# def Dict_Communes(Pop_min):








## Question 5 - Tracé de la carte des communes

# def Trace_Carte(Pop_min):









## Question 7 - Réduction des agglomérations

# def reduction_agglo(D_com):
















## Question 9 - Construction du Graphe des étapes de moins de autonomie km

# def Constr_graphe(Pop_min,autonomie):

















## Question 10 - Tracé d'une étape entre deux villes

# def Trace_etape(D_com,C1,C2):




## Question 11 - Tracé du graphe sur la carte

# def Trace_graphe(Pop_min,autonomie):
