Gdf2Bokeh

2 minute read

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 !

Geopandas Bokeh
Libraries utilisées.

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