folium icon indicating copy to clipboard operation
folium copied to clipboard

GeoJson style is not being applied correctly

Open ocefpaf opened this issue 1 year ago • 1 comments

Describe the bug

Both in a loop or using a GeoDataframe, only the last style is applied to all geometries. We can see that in our docs:

Screenshot from 2024-04-16 21-23-04

To Reproduce

https://python-visualization.github.io/folium/latest/user_guide/geojson/geopandas_and_geo_interface.html

I also believe https://github.com/python-visualization/folium/issues/1608 is related.

Expected behavior We expect each geometry to have its own color defined by the style column.

Environment (please complete the following information):

  • Browser: all tested
  • Jupyter Notebook or html files? Both.
  • Python version: 3.11
  • folium version: 0.16.0
  • branca version: 0.7.1

Additional context In a loop one can "hack" this problem by assigning a unique value using exec (note recommended though).

import folium

m = folium.Map()
for k, glider in gdf.iterrows():
    exec(f"style_function = lambda x: {glider['style']}")  # hack it to make it work
    # style_function = lambda x: glider['style']  # shows the bug
    folium.GeoJson(
        data=glider["geometry"],
        style_function=style_function,
    ).add_to(m)
m

Possible solutions

I'll investigate more and see if I can come up with something. I did try with latest branca and folium and this is not solved yet.

ocefpaf avatar Apr 16 '24 19:04 ocefpaf

OK. We are hitting https://docs.python-guide.org/writing/gotchas/#late-binding-closures :-/ I'll see what we can do. At least we should amend the docs.

Update. The geopandas style column example has been broken for a while (since v0.9.0) and is unrelated to the late binding issue in the loop. It is likely due to https://github.com/python-visualization/folium/pull/1058

Options:

  • document that we should do style_function = lambda x, style=style: style
  • ?

ocefpaf avatar Apr 19 '24 15:04 ocefpaf

Thanks for addressing this issue @ocefpaf!

Conengmo avatar May 06 '24 08:05 Conengmo