La photo de monsieur X
Ce programme affiche une carte, centrée sur la position où a été prise la photo de monsieur X
Simulation : Et si on faisait un programme...
Rendez-vous dans EduPython :
(re) téléchargez cette photo[1]
Dans Edupython, écrire ce programme ( largement commenté)
Enregistrez-le dans un dossier qui doit contenir la photo téléchargée
Exécutez-le
1
# Créé par vstep, le 25/01/2019 en Python 3.4
2
#chargement des bibliothèques PIL et webbrowser
3
from PIL import Image
4
import webbrowser
5
#chargement de l'image ( même dossier que le programme)
6
im = Image.open( 'photo.jpg' )
7
'''
8
# chargement des données exif, c'est un dictionnaire: les données GPS sont à la clé 34853
9
# On peut le voir avec l'aide de l'explorateur de variable de l'ide python
10
'''
11
exif_data = im._getexif()
12
'''
13
#chargement des données de la clé 34853
14
# on crée un dictionnaire pour contenir les données GPS
15
'''
16
try:
17
18
test={}
19
test=exif_data[34853]
20
#vérification
21
print(test)
22
'''
23
# explorer la variable test pour voir comment elle est structurée
24
# ce dico contient des listes
25
# la latitude est à la clé 2 qui est une liste de tuples
26
# on voit : ((47, 1), (37, 1), (29107360, 1000000)) qui correspond à
27
# 47° 37' et 29,107360''
28
# le 1er tuple ( degré, 1) le second ( minute,1) le 3ème ( seconde,1000000)
29
# on divise le 1er par le second pour avoir le nombre sous forme décimale
30
# et on transforme le tout en degré
31
'''
32
lat_deg=test[2][0][0]/test[2][0][1]
33
lat_min=test[2][1][0]/test[2][1][1]/60
34
lat_sec=test[2][2][0]/test[2][2][1]/3600
35
lat=lat_deg+lat_min+lat_sec
36
print(lat)
37
# idem pour la longitude
38
lon_deg=test[4][0][0]/test[4][0][1]
39
lon_min=test[4][1][0]/test[4][1][1]/60
40
lon_sec=test[4][2][0]/test[4][2][1]/3600
41
lon=lon_deg+lon_min+lon_sec
42
print(lon)
43
'''
44
# si on est à l'ouest du méridien de greenwich il faut changer le signe de la logitude
45
# c'est à la clé 3 que l'on a cette position
46
'''
47
if test[3]=='W':
48
lon=-lon
49
# on affiche le tout dans openstreetmap
50
zoom='18'
51
webbrowser.open('https://www.openstreetmap.org/note/new?lat='+str(lat)+'&lon='+str(lon)+'#map='+zoom+'/'+str(lat)+'/'+str(lon))
52
except:
53
print("une erreur sans doute")
Travail à réaliser :
Testez ce programme avec des photos prises avec votre smartphone
Pour les plus courageux :
Ce programme fonctionne-t-il pour une photo prise dans l'hémisphère sud ?
Si non, modifiez le programme pour qu'il en tienne compte...