Control geoviews polygon with range sliders

How do I link geoviews polygon with range slider

import cartopy.crs as ccrs
import holoviews as hv
import geoviews as gv
import panel as pn

gv.extension("bokeh")
pn.extension()

lat_slider = pn.widgets.RangeSlider(start=-90, end=90)
lon_slider = pn.widgets.RangeSlider(start=-180, end=180)
polygon = gv.Polygons([], crs=ccrs.PlateCarree())
tile = gv.tile_sources.ESRI()
overlay = (polygon * tile).opts(global_extent=True)

layout = pn.Row(
    pn.Column(lat_slider, lon_slider),
    overlay
)
layout
import cartopy.crs as ccrs
import holoviews as hv
import geoviews as gv
import panel as pn

gv.extension("bokeh")
pn.extension()


def rectangle(x_range, y_range):
    x1, x2 = x_range
    y1, y2 = y_range
    corners = np.array(
        [(x1, y1), (x2, y1), (x2, y2), (x1, y2)]
    )
    print(x_range, y_range)
    polygon = gv.Polygons([{("Longitude", "Latitude"): corners}])
    return polygon


lon_slider = pn.widgets.RangeSlider(start=-150, end=150)
lat_slider = pn.widgets.RangeSlider(start=-50, end=50)

tile = gv.tile_sources.ESRI()
geomap = gv.DynamicMap(pn.bind(rectangle, lon_slider, lat_slider))
overlay = (geomap * tile).opts(global_extent=True)

layout = pn.Row(pn.Column(lat_slider, lon_slider), overlay)
layout
1 Like