NSI 2023-2024: découverte du module folium et API

1. Mise en place

Créer un dossier TP_folium et enregistrer dans ce dossier le fichier python avec le code ci-dessous :

# on importe le module folium
import folium
# on définit un point géographique par ses coordonnées
# longitude et lattitude
coords = (48.8398094,2.5840685)
# on crée une carte centrée sur ce point géographique
map = folium.Map(location=coords, tiles='OpenStreetMap', zoom_start=5)
# on considère un nouveau point
coords = (48.8490591,2.577023)
# on ajoute un marqueur correspondant à ce point sur la carte
folium.Marker(location=coords, popup = "MacDo").add_to(map)
# on considère un nouveau point
coords = (48,2.57)
# on ajoute un marqueur correspondant à ce point sur la carte
folium.Marker(location=coords, popup = "MacDo").add_to(map)
# on sauvegarde la carte dans notre dossier sous la forme
# d'un fichier html
map.save(outfile='map.html')

On utilise dans de ce tp le module python folium :
https://python-visualization.github.io/folium/
Si ce module n’est pas installé , installer le avec la commande :
pip install folium

Tester votre programme et consulter votre dossier TP_folium, ce programme python a permis la création d’un fichier html. Ouvrez ce fichier dans votre navigateur favori.

Exercice 1 : Modifier votre programme pour afficher une carte centrée sur Lille permettant d’afficher la position du Lycée Faidherbe.

On désire à présent utiliser ce module pour afficher la position survolée par la station spatiale internationale ISS en temps réel.

Station Spatiale Internationale

2. Récupérer des informations sur ISS via une requête serveur

On va à présent utiliser la bibliothèque request : https://requests-fr.readthedocs.io/en/latest/user/quickstart.html
Cette bibliothèque permet d’effectuer simplement des échanges de requêtes http en particulier avec une API.

En informatique, une interface de programmation d’application ou interface de programmation applicative (souvent désignée par le terme API pour Application Programming Interface) est un ensemble normalisé de classes, de méthodes, de fonctions et de constantes qui sert de façade par laquelle un logiciel offre des services à d’autres logiciels. Elle est offerte par une bibliothèque logicielle ou un service web, le plus souvent accompagnée d’une description qui spécifie comment des programmes consommateurs peuvent se servir des fonctionnalités du programme fournisseur.

https://fr.wikipedia.org/wiki/Interface_de_programmation

Pour obtenir les renseignements nécessaires sur l’ISS, on va utiliser l’API :
http://api.open-notify.org/
Cette API nous donne au format JSON différents renseignements sur la station spatiale internationale.

JavaScript Object Notation (JSON) est un format de données textuelles dérivé de la notation des objets du langage JavaScript. Il permet de représenter de l’information structurée comme le permet XML par exemple

https://fr.wikipedia.org/wiki/JavaScript_Object_Notation

Modifier le programme précédent en :


import requests
import folium


donnees_ISS = requests.get('http://api.open-notify.org/iss-now.json').json()

Exécuter le programme.

Exercice 2 :
1. Après avoir exécuté le programme, déterminer à l’aide de commandes en console le type de la variable donnees_ISS et son contenu.
2. Modifier votre programme pour afficher à l’aide de folium la zone géographique survolée par ISS.
On pourra avoir besoin d’utiliser la méthode float qui permet de transformer une chaîne de caractères en un flottant.

Exercice 3 :
Modifier votre programme pour afficher les différentes positions survolées par ISS à différents instants.
On pourra pour cela utiliser la bibliothèque time et la méthode time.sleep(mon_temps).
On peut aussi compléter le programme ci-dessous en reprenant ce qui a été fait auparavant.

# on importe le module folium
import folium
import requests
import time
# on utilise la méthode sleep de time pour faire une pause
# time.sleep(temps_en_secondes)
donnees_ISS = requests.get('http://api.open-notify.org/iss-now.json').json()
longitude=float( donnees_ISS['iss_position']['longitude'])
latitude=float( donnees_ISS['iss_position']['latitude'])
coords = ( latitude , longitude )
map = folium.Map(location=coords, tiles='OpenStreetMap', zoom_start=3)
# on ajoute 10 marqueurs
for i in range(10):
    donnees_ISS = requests.get('http://api.open-notify.org/iss-now.json').json()
    longitude=float( donnees_ISS['iss_position']['longitude'])
    latitude=float( donnees_ISS['iss_position']['latitude'])
    coords = ( latitude , longitude )
    folium.Marker(location=coords, popup = "ISS").add_to(map)
    time.sleep(5)
# on sauvegarde la carte dans notre dossier sous la forme
# d'un fichier html
map.save(outfile='position_Iss.html')

Pour préparer le tp prochain :
On désire afficher sur une carte les stations V’Lille ayant encore des vélos disponibles à partir des données figurant sur la page :
https://opendata.lillemetropole.fr/explore/dataset/vlille-realtime/export/

En vous inspirant de ce qui a été fait pour la station ISS, créer un programme permettant d’afficher les stations ayant encore des vélos disponibles ou des places disponibles.

Proposition de Correction :