folium icon indicating copy to clipboard operation
folium copied to clipboard

Is there a way to add colormap to LayerControl?

Open koldunovn opened this issue 9 years ago • 14 comments

First of all incredible progress from the last time I have checked folium, my respect to the team!

I am trying to use some examples from Colormaps.ipynb and it seems like the colormap is not recognised by the LayerControl as one of the layers. My question have two parts:

  • Is there a way to make LayerControl aware of the colormap?
  • Most importantly is there a way to combine the layer created, say, with GeoJson and colormap, so they are switched on and off together in the LayerControl.

At the end I would like to have 2 layers on one map, but they should have different colormaps.

koldunovn avatar Jun 15 '16 15:06 koldunovn

In fact a Colormap is not a Layer in Leaflet's sense. So it's not trivial to add it to a LayerControl. But it may be possible to do that in using LayersControlEvent and writing explicit code that hides/show the colormap.

BibMartin avatar Jun 15 '16 16:06 BibMartin

@BibMartin Thanks for the reply! I certainly will not be able to implement it, since my Java Script knowledge is zero. I just found similar question here http://gis.stackexchange.com/questions/68941/how-to-add-remove-legend-with-leaflet-layers-control with an answer [EDIT, Oh I see it's basically what you have suggested]. Maybe it will help.

Anyway I think this issue now can be turned to feature quest I guess :)

koldunovn avatar Jun 15 '16 17:06 koldunovn

Anyway I think this issue now can be turned to feature quest I guess :)

True. And that would be a useful feature btw.

Thanks for the idea and for the link :wink:

BibMartin avatar Jun 15 '16 17:06 BibMartin

First of all incredible progress from the last time I have checked folium, my respect to the team!

Just to be fair team == @BibMartin lately :wink:

ocefpaf avatar Jun 15 '16 17:06 ocefpaf

Thanks to your link @koldunovn , I finally found a way of doing it. See here.

But I don't know where it should be put:

  • As a method in branca.colormap.Colormap
  • As a method in folium.map.Layer
  • As a third object as shown in the example notebook
  • As a child of one of the two objects

Well this is open to discussion (and to volunteers for a PR :wink: )

BibMartin avatar Jun 15 '16 19:06 BibMartin

@BibMartin This is just amasing! Exactly what I need! From the user perspective I think it is logical to create two separate objects and then bind them together (similar to FeatureGroup, I guess)?

koldunovn avatar Jun 15 '16 19:06 koldunovn

@BibMartin thank you for your answer that was also helpful for me. I wanted to ask if we can adjust the background of the colormap to white or any other color so we can avoid some visibility problems caused by the colors of the map itself. Thank you.

TayariAmine avatar Jul 03 '17 13:07 TayariAmine

@BibMartin merci !

arnaud-nt2i avatar Jan 11 '21 11:01 arnaud-nt2i

@BibMartin

Hello! Thanks for a solution, but don't you know, is there a way to make different layers with different colormaps as not overlay layers? So at the moment, there would be only one layer with only one colormap. If I change overlay statuses in your function, the map won't work properly.

CallMePablito avatar May 01 '21 09:05 CallMePablito

@CallMePablito

Try changing the trigger in @BibMartin 's code from overlayadd to layeradd and overlayrremove to layerremove. That worked for me even when you have overlay=False for your layers, which I believe is what you're referencing!

ajkeller10 avatar Apr 25 '22 03:04 ajkeller10

Sadly this is not working for me when my colorbar is an image added with FloatImage

EmanuelCastanho avatar Sep 08 '23 12:09 EmanuelCastanho

Thanks to your link @koldunovn , I finally found a way of doing it. See here.

But I don't know where it should be put:

  • As a method in branca.colormap.Colormap
  • As a method in folium.map.Layer
  • As a third object as shown in the example notebook
  • As a child of one of the two objects

Well this is open to discussion (and to volunteers for a PR 😉 )

Hey! I'm creating a categorical legend like this:

legend_html = """
<div style="position: fixed; 
             bottom: 50px; left: 50px; width: 200px; height: 90px; 
             border:2px solid grey; z-index:9999; font-size:14px;
             ">&nbsp; Legend <br>
             &nbsp; Category A &nbsp; <i class="fa fa-map-marker fa-2x" style="color:red"></i><br>
             &nbsp; Category B &nbsp; <i class="fa fa-map-marker fa-2x" style="color:blue"></i>
</div>
"""
m.get_root().html.add_child(folium.Element(legend_html))

Any idea how I can change your code for the BindColormap class to fit my use case? Thanks!

AtharvaShekatkar avatar Oct 13 '23 05:10 AtharvaShekatkar

@BibMartin solution used to work just fine in folium v0.14.0 but since I updated to v0.15.1 all my colormaps are initially displayed ... just like layeradd and layerremove events were not initially fired. Then interacting with Layer Control it starts working fine.

Has anybody else encountered such an issue ?

berrfred avatar Jan 28 '24 15:01 berrfred