Subset geoviews.Path dynamically

Is it possible to filter the paths based on rangexy bounds

def _filter_vector(vector, x_range, y_range):
    """
    Subset vector within zoom range to optimize loading.

    Args:
        vector (gv.Path)
        x_range (tuple)
        y_range (tuple)

    Returns:
        vector (gv.vector)
    """
    if x_range is None or y_range is None:
        return vector
    return vector[x_range, y_range]


import holoviews as hv
import geopandas as gpd

gdf = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
geo_vector = gv.Path(gdf).opts("Path", tools=["hover"], color="black")
range_stream = hv.streams.RangeXY(source=geo_vector)
streams = [range_stream]
filtered_vector = geo_vector.apply(_filter_vector, streams=streams)
filtered_vector

I want to do something like
gv.operation.resample_geometry(geo_vector)
from
https://geoviews.org/user_guide/Geometries.html
but it errors out.

okay this works

import holoviews as hv
import geopandas as gpd

gdf = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
range_stream = hv.streams.RangeXY(x_range=(-90, 90), y_range=(-90, 90))

def plot(x_range, y_range):
    lon_1, lon_2 = x_range
    lat_1, lat_2 = y_range
    corners = Polygon(
        [(lon_1, lat_1), (lon_2, lat_1), (lon_2, lat_2), (lon_1, lat_2)]
    )
    poly_gdf = gpd.GeoDataFrame([1], geometry=[corners], crs="EPSG:4326")
    gdf_clipped = gpd.clip(gdf.copy(), poly_gdf)
    geo_vector = gv.Polygons(gdf_clipped).opts("Path", tools=["hover"], color="black")
    return geo_vector

gv.DynamicMap(plot, streams=[range_stream])
1 Like