1-une carte

samedi 18 mai 2019
par  Florent Girod

On va montrer comment créer pas à pas une carte à laquelle on va ajouter des informations grâce à un programme python

pour commencer

Faire fonctionner le code suivant :

import folium
c= folium.Map(location=[45.188529,  5.724524],zoom_start=10)
c.save('maCarte.html')

question 1 : Que s’est-il passé ?

réponse

Une page web s’ouvre, centrée sur Grenoble, à l’échelle du département.

remarque : on peut par la suite zoomer à l’aide de la molette de la souris ou d’une icône -/+ en haut à gauche de la carte.


question 2 : Modifier la valeur zoom_start=10  ; quel est l’effet obtenu ? (pour visualiser, il suffit de rafraîchir la page web en faisant F5 par exemple)

réponse

L’échelle est modifiée :

  • zoom_start=5 donne la carte de l’Europe !
  • zoom_start=20 donne une échelle permettant de voir le quartier autour duquel on est centré au départ.

question 3 : En recherchant les coordonnées (latitude, longitude) du Mont-Blanc, faites un travail similaire pour obtenir une page ouvrant sur une carte centrée sur le Mont-Blanc, avec un zoom régler sur 10.

Nommer la page "montblanc.html".

réponse

import folium
c= folium.Map(location=[45.832622,  6.865175],zoom_start=10)
c.save('montblanc.html')

marqueurs

On peut avoir envie d’ajouter des marqueurs ; compiler ce code :

import folium
c= folium.Map(location=[45.188529,  5.724524],zoom_start=20)
folium.Marker([45.188529,  5.724524], popup="place Victor Hugo").add_to(c)
c.save('maCarte.html')

question 4 : Que se passe-t-il ?

réponse

Un marqueur pointe exactement la place Victor Hugo et lorsque la souris arrive sur ce marqueur, le message ’place Victor Hugo’ apparaît.


On peut changer le type de marqueur ainsi que sa couleur en ajoutant des paramètres comme dans cet exemple :

folium.Marker([45.188529,  5.724524],popup="place de Verdun",folium.Icon(icon='ambulance', prefix="fa", color='red')).add_to(c)

question 5 : Faites différents essais en modifiant le symbole et sa couleur.

les couleurs possibles

’red’, ’blue’, ’green’, ’purple’, ’orange’, ’darkred’, ’lightred’, ’beige’, ’darkblue’, ’darkgreen’, ’cadetblue’, ’darkpurple’, ’white’, ’pink’, ’lightblue’, ’lightgreen’, ’gray’, ’black’, ’lightgray’


des icones

’home’, ’glass’, ’flag’, ’star’, ’bookmark’, ’info-sign’, ’cloud’, ’ambulance’

liste

S’il on veut pointer plusieurs lieux avec des marqueurs différents, on peut recopier plusieurs fois le code précédent en indiquant les paramètres voulus (longitude, latitude, type d’icône, couleur de l’icône) mais ce sera très long et répétitif.

On présente ici une méthode utilisant une liste :

  • une liste pour les latitudes
  • une liste pour les longitudes
  • une liste pour les types d’icône
  • une liste pour la couleur

par exemple, si on veut saisir 4 points, on aura des listes du type :

lat=[45.1167, 45.0667 , 45.1333, 45.1833]
long=[5.5833, 5.55, 5.5333, 5.6167]
nom_lieu=['Lans en Vercors', 'Villard de Lans', 'Méaudre', 'Engins']
col=['green', 'blue' ,'red', 'gray']

question 6 : choisir 4 lieux autour de Grenoble (si vous le souhaitez, les coordonnées données précédemment) sur lesquels on placera une icône en forme de bicyclette avec 4 couleurs différentes par la méthode de parcours d’une liste.


réponse

import folium

lat=[45.1167, 45.0667 , 45.1333, 45.1833]
long=[5.5833, 5.55, 5.5333, 5.6167]
nom_lieu=['Lans en Vercors', 'Villard de Lans', 'Méaudre', 'Engins']
col=['green', 'blue' ,'red', 'gray']
c= folium.Map(location=[45.166672, 5.71667],zoom_start=11)
for i in range(4):
   folium.Marker([lat[i], long[i]],popup=nom_lieu[i],icon=folium.Icon(icon="bicycle", prefix="fa", color=col[i])).add_to(c)
c.save('maCarte.html')

import

On peut faire beaucoup mieux que précédemment ! Imaginez que vous ayez envie de saisir des dizaines de points ... il sera bien plus pratique de les saisir dans un fichier annexe et de l’importer ; voici un modèle reprenant un cas similaire au précédent.

document en .csv

Enregistrez ce qui suit dans un éditeur de texte (Notepaad++ ou bloc note) et enregistrez-le dans le même dossier que votre programme en cours.

Bien penser à indiquer l’extension .csv

Lieu,Latitude,Longitude,Icon,Color

Lans-en-Vercors,45.1167,5.5833,bicycle,green

VillarddeLans,45.0667,5.55,bicycle,blue

Méaudre,45.1333,5.5333,bicycle,red

Engins,45.1833,5.6167,bicycle,gray


On peut ensuite, grâce à une fonction de la bibliothèque pandas importer ces données ; par exemple data.iloc[i,0] importe la ième ligne de la 1ère colonne (indexée à 0).

Ce qui est importé est considéré comme une chaîne de caractères (ce qui convient ici pour la première colonne qui correspond aux lieux)

Pour la seconde colonne qui donne la latitude, il faudra forcer l’import à retourner un nombre ’flottant’ par float(data.iloc[i,1])

question 7 : adapter le code précédent avec les informations précédents pour utiliser le fichier .cvs et l’importer.

réponse

import folium
import pandas#pour traiter les données
data=pandas.read_csv('import.csv',sep=',')#import des données
c= folium.Map(location=[45.166672, 5.71667],zoom_start=11)

for i in range(data.shape[0]):#nombre de lignes
   nom_lieu=data.iloc[i,0]
   lat=float(data.iloc[i,1])
   long=float(data.iloc[i,2])
   icone=data.iloc[i,3]
   col=data.iloc[i,4]
   folium.Marker([lat, long], popup=nom_lieu, icon=folium.Icon(icon=icone, prefix="fa", color=col)).add_to(c)
c.save('maCarte.html')

projet

Des idées :

* proposer un parcours thématique à Grenoble ou dans votre lieu de vie avec des indications.

* faites une cartographie de vos amis et/ou famille en incluant un code couleur et des indications.


Navigation

Articles de la rubrique