La géolocalisation avec le module geopy

Ce module permet de récupérer la longitude et la latitude d'un ieu en coordonnées WGS84 exprimées en decgrés décimaux

Localisation du lycee Camille Saint Saëns


In [11]:
import geopy
from geopy.geocoders import Nominatim
geocoder = Nominatim()
adresse = "22 rue Saint Lo, Rouen, France"
location = geocoder.geocode(adresse, True, 30)
print("longitude = ",location.longitude,"latitude = ",location.latitude)


longitude =  1.0936487 latitude =  49.44228

Localisation d' adresse quelconque.

Créer un programme qui renvoie la géolocalisation d'un point dont l'adresse est saisie par l'utilisateur.


In [7]:
import geopy
from geopy.geocoders import Nominatim
geocoder = Nominatim()
adresse = input("saissez l'adresse du lieu, la ville, le pays ")
location = geocoder.geocode(adresse, True, 30)
print("Les coordonnées du point situé au ",adresse,"sont : ")
print("longitude = ",location.longitude,"°","latitude = ",location.latitude,"°")


saissez l'adresse du lieu, la ville, le pays 39 rue des pins, Labenne, France
Les coordonnées du point situé au  39 rue des pins, Labenne, France sont : 
longitude =  -1.4318865 ° latitude =  43.6020846 °

Saisie des résultats dans un fichier csv : Etape 1

Cette approche vise à illustrer la gestion simple des données.

Dans un premier temps on crée le fichier et on saisi les entêtes de colonnes. Il ne faut exécuter ce programme qu'une fois sinon le fichier est écrasé et remplacé.


In [3]:
import csv
OuvrirEnEcriture = open("Lieux.csv","w")
fname = "Lieux.csv"
writer = csv.writer(OuvrirEnEcriture)
writer.writerow( ("ID","adresse","ville","pays","longitude","latitude") )
OuvrirEnEcriture.close()

Saisie des résultats dans un fichier csv : Etape 2

On va maintenant rentrer dans le fichier des lignes correspondant à la saisie des données.

Le fichier est ouvert avec l'argument "a" pour ajouter


In [23]:
import csv
import geopy
from geopy.geocoders import Nominatim
fichier="Lieux.csv"
OuvrirEnEcritureAjout = open("Lieux.csv","a")
writer = csv.writer(OuvrirEnEcritureAjout)
geocoder = Nominatim()
adresse = input("saissez l'adresse du lieu : ")
ville = input("saisissez le nom de la ville : ")
pays = input("saisissez le pays : ")
requete = adresse +","+ville+","+ pays
ID = int(input("indiquez l'id du lieu"))
#print(requete)
location = geocoder.geocode(requete, True, 30)
print("Les coordonnées du point situé au ",adresse," à ",ville," en ",pays,"sont : ")
print("longitude = ",location.longitude,"°","latitude = ",location.latitude,"°")
writer.writerow((ID,adresse,ville,pays,location.longitude,location.latitude))
OuvrirEnEcritureAjout.close()


saissez l'adresse du lieu : rue saint Lo
saisissez le nom de la ville : rouen
saisissez le pays : france
indiquez l'id du lieu1
Les coordonnées du point situé au  rue saint Lo  à  rouen  en  france sont : 
longitude =  1.0936487 ° latitude =  49.44228 °

Saisie des résultats dans une base de donées sqlite

Cette approche vise à illustrer la gestion des données dans une base de données dédiée. On commence par créer la table d'attribut de la base de donnée. On choisit les titres des entêtes de colonnes et on qualifie le type de donées à placer dedans.


In [28]:
import sqlite3
conn = sqlite3.connect("Lieux.db")
cursor = conn.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS lieux (
id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
adresse TEXT,
ville TEXT,
pays TEXT,
longitude FLOAT,
latitude FLOAT)
""")
conn.commit()

Supprimer une table


In [27]:
#import sqlite3
#cursor = conn.cursor()
#cursor.execute("""
#DROP TABLE lieux
#""")
#conn.commit()

Saisie des résultats dans une base de données sqlite : étape 2

Il reste maintenant à remplir la base de données.


In [6]:
import sqlite3
import geopy
from geopy.geocoders import Nominatim
geocoder = Nominatim()
#On ouvre la base de données
conn = sqlite3.connect("Lieux.db")
cursor = conn.cursor()
# On saisit les éléments à stocker
adresse = input("saissez l'adresse du lieu : ")
ville = input("saisissez le nom de la ville : ")
pays = input("saisissez le pays : ")
requete = adresse +","+ville+","+ pays
ID = int(input("indiquez l'id du lieu : "))
# on cherche les coordonnées su lieu
location = geocoder.geocode(requete, True, 30)
# on publie le résultat
print("Les coordonnées du point situé au ",adresse," à ",ville," en ",pays,"sont : ")
print("longitude = ",location.longitude,"°","latitude = ",location.latitude,"°")
# On stocke les données dans la base
cursor.execute('''INSERT INTO lieux VALUES (?,?,?,?,?,?);''', (ID, adresse, ville, pays, location.longitude, location.latitude))
conn.commit()
cursor.execute('''SELECT * FROM lieux;''')
enregistrements = cursor.fetchall()
for lieux in enregistrements:
    print("Le lieu n %s est situé : %s , à , %s en %s à %s ° de longitude et %s ° de latitude" % (lieux[0], lieux[1], lieux[2], lieux[3], lieux[4], lieux[5]))
conn.close()


saissez l'adresse du lieu : rue jacques Lelieur
saisissez le nom de la ville : rouen 
saisissez le pays : france
indiquez l'id du lieu : 3
Les coordonnées du point situé au  rue jacques Lelieur  à  rouen   en  france sont : 
longitude =  1.0903994 ° latitude =  49.438624 °
Le lieu n 0 est situé : rue damiette , à , rouen en france à 1.0983731 ° de longitude et 49.4405501 ° de latitude
Le lieu n 1 est situé : Rue Saint Lo , à , Rouen en France à 1.0936487 ° de longitude et 49.44228 ° de latitude
Le lieu n 2 est situé : Rue des Carmes , à , Rouen en France à 1.0943843 ° de longitude et 49.4414582 ° de latitude
Le lieu n 3 est situé : rue jacques Lelieur , à , rouen  en france à 1.0903994 ° de longitude et 49.438624 ° de latitude

Ressource pour la Base de données

ce lien permet de retrouver les commandes pour traiter une base sqlite


In [ ]: