Gdf2Bokeh
Gdf2Bokeh est une librairie Python qui apporte une solution simple et la plus rapide possible pour la visualisation de données issues de GeoDataframe (GeoPandas) sur Bokeh !
Apportons quelques précisions sur ces libraries :
- Bokeh est une librairie dédiée à la visualisation de données sur navigateur. Le back-end et le front-end sont gérés par cette librairie. L’utilisateur a “juste” besoin de reformater ses données dans le format proposé par Bokeh.
- Les GeoDataframe permettent la manipulation de données géographiques à partir d’une structure tabulaire, GeoPandas est la surcouche géographique des Dataframe de Pandas.
L’idée de Gdf2Bokeh est de faire communiquer facilement ces 2 librairies :
L’enjeu majeur est lié à la structuration des géométries des objets géographiques. Prise en charge par Shapely, elles doivent être converties au format Bokeh. Ainsi nous proposons ici de gérer tous les types de géométries et leurs spécificités (multi/single part, polygones contenant des trous…). Cette conversion est réalisée à l’aide d’une fonction récursive supportant chaque type de géométrie. Cette méthode est présentée dans le post évoquant la problématique de la récursivité, disponible ici.
Bokeh est un outil extrêmement intéressant pour visualiser ses données, et suffisamment souple pour être utilisé comme outil de visualisation pour un projet. La multiplication des projets peut ainsi aboutir à une duplication du code (avec tous les problèmes de maintenance…) permettant les transformations géométriques… Gdf2Bokeh permet ainsi de centraliser cette étape obligatoire et de l’externaliser au sein d’une librarie installable à partir du cloud d’Anaconda. Il faut signaler que Gdf2bokeh ne dénature pas la libraire Bokeh. Cette dernière peut toujours être utilisée telle qu’elle est préconisée. Néanmoins, nous proposons aussi de nouvelles méthodes pour simplifier la cartographie des données, le tout en un minimum de lignes de codes.
Voici un example :
from bokeh.plotting import show
import geopandas as gpd
from gdf2bokeh import Gdf2Bokeh
layers_to_add = [
{
"input_gdf": gpd.GeoDataFrame.from_file("your_geo_layer.geojson"),
"legend": "My beautiful layer", # required, can be the name of an column name (from your input gdf)
"fill_color": "orange", # here we found one argument use by bokeh to style your layer. Take care about geometry type
},
{
"input_wkt": "LINESTRING(0 0, 25 25)", # you can add an input wkt
"legend": "My beautiful layer", # required
"color": "orange", # here we found one argument use by bokeh to style your layer. Take care about geometry type
}
]
# Points, LineString, MultiLineString, Polygons (+ holes) and MultiPolygons (+ holes) are supported
my_map = Gdf2Bokeh(
"My beautiful map", # required: map title
width=800, # optional: figure width, default 800
height=600, # optional: figure width, default 600
x_range=None, # optional: x_range, default None
y_range=None, # optional: y_range, default None
background_map_name="CARTODBPOSITRON", # optional: background map name, default: CARTODBPOSITRON
layers=layers_to_add # optional: bokeh layer to add from a list of dict contains geodataframe settings, see dict above
)
# to get all the bokeh layer containers (dict), in order to update them (interactivity, slider... on a bokeh serve)
bokeh_layer_containers = my_map.get_bokeh_layer_containers
show(my_map.figure)
Un Jupyter notebook pour découvrir
Pour un exemple plus concret, il est possible de parcourir ce jupyter notebook
Lien(s):
Comments