import folium
import pyproj
import geopandas as gpd
Nous lisons les fichiers géographiques (format Shape d'ESRI), et les convertissions en dataframes de la bibliothèque geopandas.
cholera_deaths = gpd.read_file('Cholera_Deaths.shp',encoding='ANSI')
cholera_deaths.crs
{'proj': 'tmerc', 'lat_0': 49, 'lon_0': -2, 'k': 0.9996012717, 'x_0': 400000, 'y_0': -100000, 'ellps': 'airy', 'units': 'm', 'no_defs': True}
Nous reprojetons ces couches géographiques dans un référentiel géographique (défini par le code EPSG) exploitable sous folium. Attention, la valeur de l'attribut 'crs' écrit sous la forme "EPSG:4326" ne fonctionnera pas sous Windows (version pyproj 3.0.0.post1) :
Les deux écritures sont cependant possible sous Linux : cf. version pyproj, et ce que dit le fichier __init__.py ?
cholera_deaths = cholera_deaths.to_crs(epsg = 4326)
Comme nous avons beaucoup de cas à cartographier, nous convertissons notre geopandas dataframe en un fichier geojson, un format de données géographiques courant, directement lisible par folium.
cholera_deaths.to_file("cholera_deaths.geojson", driver='GeoJSON')
Nous initialisons la carte produite par folium, en la centrant sur un point et en définissant un niveau de zoom.
### Initialisation de la carte, et ajout direct des cas de cholera
carte_snow_1854 = folium.Map(location = [51.514 , -0.1365], zoom_start=17)
folium.GeoJson("cholera_deaths.geojson", name="Incidences").add_to(carte_snow_1854)
<folium.features.GeoJson at 0x15dc435ed08>
pumps = gpd.read_file('Pumps.shp')
pumps = pumps.to_crs(epsg = 4326)
pumps.to_file("pumps.geojson", driver = 'GeoJSON')
[folium.CircleMarker([pumps.geometry.y[i], pumps.geometry.x[i]] , popup = "Pompes", color = 'red', radius = 100).add_to(carte_snow_1854) for i in range(len(pumps.geometry.x))]
[<folium.vector_layers.CircleMarker at 0x15dc43b2388>, <folium.vector_layers.CircleMarker at 0x15dc43b2ac8>, <folium.vector_layers.CircleMarker at 0x15dc43b3c48>, <folium.vector_layers.CircleMarker at 0x15dc43b3fc8>, <folium.vector_layers.CircleMarker at 0x15dc1f42988>, <folium.vector_layers.CircleMarker at 0x15dc43b7b88>, <folium.vector_layers.CircleMarker at 0x15dc43b7e08>, <folium.vector_layers.CircleMarker at 0x15dc43b7ac8>]
La méthode LayerControl permet de gérer l'affichage de plusieurs couches géographiques
folium.LayerControl().add_to(carte_snow_1854)
<folium.map.LayerControl at 0x15dc43b3d48>
carte_snow_1854