folium
folium copied to clipboard
Is there a way to add colormap to LayerControl?
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.
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 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 :)
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:
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:
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 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)?
@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.
@BibMartin merci !
@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
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!
Sadly this is not working for me when my colorbar is an image added with FloatImage
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;
"> Legend <br>
Category A <i class="fa fa-map-marker fa-2x" style="color:red"></i><br>
Category B <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!
@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 ?