Allow users to add new Control classes without implementing a plugin by hansthen · Pull Request #2122 · python-visualization/folium
This is a new, smaller implementation of the Control class I implemented earlier. For this PR I focused only on the user's ability to load a new control in user space, without having to write a new plugin. It is not difficult to write a plugin, but it does require knowledge of Jinja. Also, there is quite some boilerplate code involved.
With this Control clas I was able to implement the minimap and ruler plugins, using just a few lines of code.
import folium
import streamlit as st
from folium import Control, TileLayer
from streamlit_folium import st_folium
st.set_page_config(
page_title="minimap",
layout="wide"
)
m = folium.Map(
location=[39.949610, -75.150282],
zoom_start=5,
zoom_control=False
)
tiles = TileLayer(
tiles="OpenStreetMap",
show=False,
control=False,
)
tiles.add_to(m)
minimap = Control("MiniMap", tiles)
minimap.add_js_link(
"minimap_js",
"https://cdnjs.cloudflare.com/ajax/libs/leaflet-minimap/3.6.1/Control.MiniMap.min.js"
)
minimap.add_css_link(
"minimap_css",
"https://cdnjs.cloudflare.com/ajax/libs/leaflet-minimap/3.6.1/Control.MiniMap.css"
)
minimap.add_to(m)
ruler = Control("Ruler", tiles)
ruler.add_js_link(
"ruler_js",
"https://cdn.rawgit.com/gokertanrisever/leaflet-ruler/master/src/leaflet-ruler.js",
)
ruler.add_css_link(
"ruler_css",
"https://cdn.rawgit.com/gokertanrisever/leaflet-ruler/master/src/leaflet-ruler.css",
)
ruler.add_to(m)
st_folium(m, width=1600, height=600)