Création de la branche annexe imagerie satellitaire
This commit is contained in:
parent
431533174f
commit
70488b90cd
130
codes/carteLelbc32.py
Normal file
130
codes/carteLelbc32.py
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
''' Programme de placement de tags images sur un fond OpenStreetMap
|
||||||
|
On place des images géotaguées dans un répertoire
|
||||||
|
Le programme en extrait les coordonnées GPS et la date
|
||||||
|
Il crée des tags avec comme titre le nom des fichiers et la date
|
||||||
|
et les place sur le fond de carte aux coordonnées GPS
|
||||||
|
'''
|
||||||
|
|
||||||
|
#importation des module
|
||||||
|
import os
|
||||||
|
import folium
|
||||||
|
import exifread
|
||||||
|
|
||||||
|
def lalatitude(ref,GPSLatitude):
|
||||||
|
'''
|
||||||
|
Convertit les coordonnées GPS EXIF en degrés à virgule flottante
|
||||||
|
:param ref, GPSLongitude:
|
||||||
|
:type ref: string, GPSLongitude: exifread.utils.Ratio
|
||||||
|
:rtype: float
|
||||||
|
'''
|
||||||
|
|
||||||
|
d = GPSLatitude.values[0].num
|
||||||
|
m = GPSLatitude.values[1].num
|
||||||
|
s = GPSLatitude.values[2].num
|
||||||
|
|
||||||
|
if ref == 'N':
|
||||||
|
latitude = d + (m / 60.) + (s / 3600.)
|
||||||
|
elif ref == 'S':
|
||||||
|
latitude = -1*(d + (m / 60.0) + (s / 3600.0))
|
||||||
|
else:
|
||||||
|
print('La latitude est fausse !')
|
||||||
|
return latitude
|
||||||
|
|
||||||
|
def lalongitude(ref,GPSLongitude):
|
||||||
|
'''
|
||||||
|
Convertit les coordonnées GPS EXIF en degrés à virgule flottante
|
||||||
|
:param ref, GPSLongitude:
|
||||||
|
:type ref: string, GPSLongitude: exifread.utils.Ratio
|
||||||
|
:rtype: float
|
||||||
|
'''
|
||||||
|
|
||||||
|
d = GPSLongitude.values[0].num
|
||||||
|
m = GPSLongitude.values[1].num
|
||||||
|
s = GPSLongitude.values[2].num
|
||||||
|
|
||||||
|
if ref == 'W':
|
||||||
|
longitude = -1*(d + (m / 60.0) + (s / 3600.0))
|
||||||
|
elif ref == 'E':
|
||||||
|
longitude = d + (m / 60.0) + (s / 3600.0)
|
||||||
|
else:
|
||||||
|
print('La longitude est fausse !')
|
||||||
|
return longitude
|
||||||
|
|
||||||
|
# Récupération du facteur de zoom
|
||||||
|
print('Facteur de zoom (nombre entier) :\n\
|
||||||
|
9 : grande zone\n\
|
||||||
|
11 : zone\n\
|
||||||
|
13 : village ou ville\n\
|
||||||
|
16 : petite route')
|
||||||
|
facteurZoom = input('Veuillez entrer le facteur de zoom : ')
|
||||||
|
print('Facteur de zoom : {}'.format(facteurZoom))
|
||||||
|
|
||||||
|
# Ouverture de l'image en mode de lecture binaire
|
||||||
|
path = './images/'
|
||||||
|
fichiers=os.listdir(path)
|
||||||
|
i = 0 #indice des images
|
||||||
|
for nom in fichiers:
|
||||||
|
print("{} : {}".format(i,nom))
|
||||||
|
|
||||||
|
adresseImage = "./images/"+nom
|
||||||
|
titre = nom.split('.')[0]
|
||||||
|
f = open(adresseImage, 'rb')
|
||||||
|
|
||||||
|
# Récupération des tags EXIF
|
||||||
|
tags = exifread.process_file(f, details=False)
|
||||||
|
|
||||||
|
for tag in tags.keys():
|
||||||
|
if tag in ('GPS GPSLatitudeRef',
|
||||||
|
'GPS GPSLatitude',
|
||||||
|
'GPS GPSLongitudeRef',
|
||||||
|
'GPS GPSLongitude',
|
||||||
|
'Image ImageDateTime'):
|
||||||
|
latitude = lalatitude(tags['GPS GPSLatitudeRef'].values,
|
||||||
|
tags['GPS GPSLatitude'])
|
||||||
|
longitude = lalongitude(tags['GPS GPSLongitudeRef'].values,
|
||||||
|
tags['GPS GPSLongitude'])
|
||||||
|
date = tags['EXIF DateTimeOriginal']
|
||||||
|
|
||||||
|
try:
|
||||||
|
print("Latitude : {}, longitude : {}, date : {}".format(latitude,
|
||||||
|
longitude, date))
|
||||||
|
except NameError:
|
||||||
|
print('Fichier sans données GPS : ',nom)
|
||||||
|
else:
|
||||||
|
#création de l'objet Python carte, centrée sur les coordonnées
|
||||||
|
#latitude et longitude de la première image
|
||||||
|
|
||||||
|
if i == 0:
|
||||||
|
carte = folium.Map(location=[latitude, longitude],zoom_start=facteurZoom)
|
||||||
|
|
||||||
|
#création d'un marqueur
|
||||||
|
folium.Marker([latitude, longitude],
|
||||||
|
popup="<h4>{}</h4> <br> <i>{}</i> <br><br> <img src='{}' width='300'"
|
||||||
|
.format(titre,date,adresseImage)).add_to(carte)
|
||||||
|
|
||||||
|
#création d'un simple cercle
|
||||||
|
folium.Circle(
|
||||||
|
radius=100,
|
||||||
|
location=[latitude, longitude],
|
||||||
|
popup='Gallet Park',
|
||||||
|
color='crimson',
|
||||||
|
fill=False,
|
||||||
|
).add_to(carte)
|
||||||
|
|
||||||
|
#création d'un marqueur en forme de cercle
|
||||||
|
folium.CircleMarker(
|
||||||
|
location=[latitude, longitude],
|
||||||
|
radius=50,
|
||||||
|
popup=titre,
|
||||||
|
color='#3186cc',
|
||||||
|
fill=True,
|
||||||
|
fill_color='#3186cc'
|
||||||
|
).add_to(carte)
|
||||||
|
|
||||||
|
#dereferencement des variables pour lever l'exception
|
||||||
|
del latitude, longitude
|
||||||
|
#changement d'image
|
||||||
|
i = i + 1
|
||||||
|
|
||||||
|
#création du fichier HTML
|
||||||
|
carte.save('ma_carte.html')
|
Binary file not shown.
@ -543,14 +543,14 @@ La clé du changement de paradigme est donc qu'il ne faut surtout pas se laisser
|
|||||||
\centering
|
\centering
|
||||||
\begin{subfigure}{\textwidth}
|
\begin{subfigure}{\textwidth}
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=11cm]{images/modeleSol.eps}
|
\includegraphics[width=10cm]{images/modeleSol.eps}
|
||||||
\caption{Modèle sol \citep[pp. 42-43]{FA2019}}\label{modelesol}
|
\caption{Modèle sol \citep[pp. 42-43]{FA2019}}\label{modelesol}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
\begin{subfigure}{\textwidth}
|
\begin{subfigure}{\textwidth}
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=11cm]{images/carteSol.eps}
|
\includegraphics[width=10cm]{images/carteSol.eps}
|
||||||
\caption{Carte sol \citep[pp. 44-45]{FA2019}}\label{cartesol}
|
\caption{Carte sol \citep[pp. 44-45]{FA2019}}\label{cartesol}
|
||||||
\end{subfigure}
|
\end{subfigure}
|
||||||
\caption[Construction]{Modèle et carte}\label{modelecarte}
|
\caption[Construction]{Modèle et carte}\label{modelecarte}
|
||||||
@ -1031,7 +1031,7 @@ Après import du module \verb|exifread| à la ligne \ref{ligne:exifread}, son fo
|
|||||||
language=python,caption={Le code de la carte},
|
language=python,caption={Le code de la carte},
|
||||||
label={listing:exif},numbers=left,firstnumber=62,
|
label={listing:exif},numbers=left,firstnumber=62,
|
||||||
firstline=62,lastline=90,numberstyle=\tiny,numbersep=6pt,stepnumber=2]
|
firstline=62,lastline=90,numberstyle=\tiny,numbersep=6pt,stepnumber=2]
|
||||||
{codes/carteLelbc3.py}
|
{codes/carteLelbc32.py}
|
||||||
|
|
||||||
Les données EXIF-GPS fournissant les latitudes et longitudes en mode degré-minute-seconde, il était nécessaire de les convertir en degrés flottants. Pour cela les deux fonctions du listing \ref{listing:conversionangle} ont été utilisées.
|
Les données EXIF-GPS fournissant les latitudes et longitudes en mode degré-minute-seconde, il était nécessaire de les convertir en degrés flottants. Pour cela les deux fonctions du listing \ref{listing:conversionangle} ont été utilisées.
|
||||||
|
|
||||||
@ -1122,11 +1122,11 @@ Il s'agit d'un exemple où l'informatique intervient en cartographie avec du cod
|
|||||||
Mais c'est aussi une approche qui permet aux enseignants de mieux se rendre compte des multiples interactions entre le code et la cartographie. Et à ce propos, la bibliothèque folium dépasse clairement les limites de ce qui a été réalisé dans cette annexe. En effet, on peut voir à l'adresse suivante \url{https://portailsig.org/content/python-leaflet-folium-ou-comment-creer-des-cartes-interactives-simplement.html} que beaucoup de types de données vectorielles, comme les polygones et les polylines, sont disponibles et que différents formats, comme geojson, sont supportés. Cela permet la création de cartes choroplèthes par exemple.
|
Mais c'est aussi une approche qui permet aux enseignants de mieux se rendre compte des multiples interactions entre le code et la cartographie. Et à ce propos, la bibliothèque folium dépasse clairement les limites de ce qui a été réalisé dans cette annexe. En effet, on peut voir à l'adresse suivante \url{https://portailsig.org/content/python-leaflet-folium-ou-comment-creer-des-cartes-interactives-simplement.html} que beaucoup de types de données vectorielles, comme les polygones et les polylines, sont disponibles et que différents formats, comme geojson, sont supportés. Cela permet la création de cartes choroplèthes par exemple.
|
||||||
|
|
||||||
\subsection{Le code complet}
|
\subsection{Le code complet}
|
||||||
Voici finalement le code complet qui constitue le script produisant la page html de la carte géotaguée.
|
Voici finalement avec le listing \ref{listing:horsligne2}, le code complet qui constitue le script produisant la page html de la carte géotaguée.
|
||||||
|
|
||||||
\lstinputlisting[
|
\lstinputlisting[
|
||||||
language=python,caption={Le code complet},
|
language=python,caption={Le code complet},
|
||||||
label={listing:horsligne},numbers=left,numberstyle=\tiny,numbersep=6pt]
|
label={listing:horsligne2},numbers=left,numberstyle=\tiny,numbersep=6pt]
|
||||||
{codes/carteLelbc3.py}
|
{codes/carteLelbc3.py}
|
||||||
|
|
||||||
\section{Cartographie de terrain}
|
\section{Cartographie de terrain}
|
||||||
@ -1149,4 +1149,20 @@ Pour cela, il est nécessaire de disposer de cartes papier des zones à cartogra
|
|||||||
\caption{Création d'un atlas physique}\label{figure:fieldpapers}
|
\caption{Création d'un atlas physique}\label{figure:fieldpapers}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
\section{Imagerie satellitaire}
|
||||||
|
Cette section est une introduction à l'imagerie satellitaire. QGis est au centre de cette découverte qui a pour objectif de présenter ses possibilités de superposition d'information météorologique, océanographiques, \dots{} On peut ainsi imaginer faire travailler des élèves sur différentes situations météorologiques pour leur permettre d'apprendre à lire des cartes météo ou leur faire découvrir les fond océaniques pour étudier les plaques tectoniques.
|
||||||
|
|
||||||
|
Par ailleurs, beaucoup de problèmes caractéristiques à la fois de la construction de l'information géographique, des droits sur celle-ci ou de la gestion informatique des éléments cartographiques, étant présents dans l'imagerie satellitaire, l'apprentissage de son utilisation est un exercice particulièrement pertinent à tout les points de vue.
|
||||||
|
|
||||||
|
\subsection{Introduction}
|
||||||
|
Le premier problème auquel l'étudiant va être confronté est simplement de savoir où trouver des images satellites. Il peut sembler évident, dans une société où l'image du monde est omniprésente, qu'on puisse en disposer sans difficultés. Or, ce n'est pas le cas. Il est même difficile d'y parvenir dans la mesure où on ne se satisfait pas de la représentation de Google Map et qu'on désire obtenir des images aux contenus particulier, comme l'état des sols ou si on désire maitriser les droits sur ces images.
|
||||||
|
|
||||||
|
Pour se rendre compte de ces problèmes, le site du \og Global Investigative Journalism Network \fg{} publie un \og Guide pour trouver et utiliser des images satellites \fg\footnote{gijn.org : \url{https://gijn.org/guide-pour-trouver-et-utiliser-des-images-satellites/}} qui, malgré son orientation vers l'utilisation journalistique des images, constitue une bonne entrée en matière.
|
||||||
|
|
||||||
|
Cet article donne aussi des motivations intéressantes à l'utilisation des images satellites~:
|
||||||
|
\begin{quotation}
|
||||||
|
\og Les images satellites sont de puissants outils de découverte et d’analyse, et permettent également d’illustrer de manière très précise une enquête. Les journalistes utilisent déjà les images satellites pour des reportages dans des zones de conflit, sur le changement climatique, les réfugiés, les feux de forêts, l’exploitation minière illégale, les marées noires, la déforestation, l’esclavage et de nombreux autres sujets. Dans le cadre du journalisme d’investigation, le potentiel de l’exploitation de ces images venues de l’espace est également considérable.\footnote{gijn.org : \url{https://gijn.org/guide-pour-trouver-et-utiliser-des-images-satellites/}}\fg
|
||||||
|
\end{quotation}
|
||||||
|
\subsection{Arcgisonline.com}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
Loading…
Reference in New Issue
Block a user