def test_box_edit_callback_initialized_js(self): boxes = Polygons([Box(0, 0, 1)]) BoxEdit(source=boxes) plot = bokeh_renderer.get_plot(boxes) cb = plot.callbacks[0].callbacks[0] self.assertEqual(plot.handles['rect_source'].js_property_callbacks, {'change:data': [cb], 'patching': [cb]})
def __init__(self, poly_data=[], **params): super(SelectRegionPanel, self).__init__(**params) self.boxes = gv.Polygons(poly_data).options( fill_alpha=0.5, color='grey', line_color='white', line_width=2, width=self.width, height=self.height ) if not self.boxes: self.boxes = self.boxes.options(global_extent=True) self.box_stream = BoxEdit(source=self.boxes, num_objects=1)
def test_box_edit_callback(self): boxes = Polygons([Box(0, 0, 1)]) box_edit = BoxEdit(source=boxes) plot = bokeh_server_renderer.get_plot(boxes) self.assertIsInstance(plot.callbacks[0], BoxEditCallback) callback = plot.callbacks[0] source = plot.handles['rect_source'] self.assertEqual(source.data, {'x': [0], 'y': [0], 'width': [1], 'height': [1]}) data = {'x': [0, 1], 'y': [0, 1], 'width': [0.5, 2], 'height': [2, 0.5]} callback.on_msg({'data': data}) element = Polygons([Box(0, 0, (0.5, 2)), Box(1, 1, (2, 0.5))]) self.assertEqual(box_edit.element, element)
def test_box_edit_callback(self): boxes = Rectangles([(-0.5, -0.5, 0.5, 0.5)]) box_edit = BoxEdit(source=boxes) plot = bokeh_server_renderer.get_plot(boxes) self.assertIsInstance(plot.callbacks[0], BoxEditCallback) callback = plot.callbacks[0] source = plot.handles['cds'] self.assertEqual(source.data['x'], [0]) self.assertEqual(source.data['y'], [0]) self.assertEqual(source.data['width'], [1]) self.assertEqual(source.data['height'], [1]) data = {'x': [0, 1], 'y': [0, 1], 'width': [0.5, 2], 'height': [2, 0.5]} callback.on_msg({'data': data}) element = Rectangles([(-0.25, -1, 0.25, 1), (0, 0.75, 2, 1.25)]) self.assertEqual(box_edit.element, element)
def bbox_selector(metadata_csv=None, metadata_csv_lon_column='Longitude', metadata_csv_lat_column='Latitude', bounds=(-124.5, 40, -108, 50), basemap_url=None): ''' Draw bounding box (hold shift) on basemap and return vertices. Select bounding box to delete. ''' OpenTopoMap = 'https://tile.opentopomap.org/{Z}/{X}/{Y}.png' OpenStreetMap = 'http://tile.openstreetmap.org/{Z}/{X}/{Y}.png' GoogleHybrid = 'https://mt1.google.com/vt/lyrs=y&x={X}&y={Y}&z={Z}' GoogleSatellite = 'https://mt1.google.com/vt/lyrs=s&x={X}&y={Y}&z={Z}' GoogleRoad = 'https://mt1.google.com/vt/lyrs=m&x={X}&y={Y}&z={Z}' GoogleTerrain = 'http://mt0.google.com/vt/lyrs=p&hl=en&x={X}&y={Y}&z={Z}' GoogleTerrainOnly = 'http://mt0.google.com/vt/lyrs=t&hl=en&x={X}&y={Y}&z={Z}' ESRIImagery = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{Z}/{Y}/{X}.jpg' Wikimedia = 'https://maps.wikimedia.org/osm-intl/{Z}/{X}/{Y}@2x.png' print('Toggle Box Edit Tool and hold shift to draw bounding box.') if not basemap_url: url = GoogleSatellite basemap = gv.WMTS(url, extents=bounds).opts(aspect=1, frame_height=500) if metadata_csv: df = pd.read_csv(metadata_csv) df = df.loc[(df[metadata_csv_lat_column] < bounds[3]) & (df[metadata_csv_lat_column] > bounds[1]) & (df[metadata_csv_lon_column] > bounds[0]) & (df[metadata_csv_lon_column] < bounds[2])].reset_index( drop=True) coords = list( zip(df[metadata_csv_lon_column].values, df[metadata_csv_lat_column].values)) points = gv.Points(coords).opts(size=10, frame_height=500) else: points = gv.Points({}).opts(size=10, frame_height=500) box_poly = gv.Polygons([{}]).opts( opts.Polygons(fill_alpha=0, line_color='yellow', line_width=3, selection_fill_color='red')) box_stream = BoxEdit(source=box_poly) return basemap * points * box_poly, box_stream
def test_box_edit_callback_initialized_server(self): boxes = Polygons([Box(0, 0, 1)]) BoxEdit(source=boxes) plot = bokeh_server_renderer.get_plot(boxes) self.assertEqual(plot.handles['rect_source']._callbacks, {'data': [plot.callbacks[0].on_change]})
# Subject to Bokeh Bug: Tool Bar disappears https://github.com/ioam/holoviews/issues/2784 import quest import geoviews as gv import holoviews as hv from holoviews.streams import (Params, PolyEdit, BoxEdit, PointDraw) # from holoviews.operation.datashader import regrid import panel as pp # import param hv.extension('bokeh') # pp.extension() tiles = gv.tile_sources.StamenTerrain().options(width=950, height=600) tiles.extents = (-125, 25, -65, 50) box_poly = gv.Polygons([]).options(fill_alpha=.2) box_stream = BoxEdit(source=box_poly, num_objects=1, name="boxedit") points = gv.Points([]) point_stream = PointDraw(source=points) elevation_service = quest.util.ServiceSelector( parameter='elevation', default='svc://usgs-ned:1-arc-second') # Explicitly create a panel widget btn_download = pp.widgets.Button(name='Download & Fill', button_type='danger') btn_download_stream = Params(btn_download, ['clicks'], rename={'clicks': 'download_clicks'}) btn_run = pp.widgets.Button(name='Extract', button_type='danger') btn_run_stream = Params(btn_run, ['clicks'], rename={'clicks': 'run_clicks'}) btn_delin = pp.widgets.Button(name='Delinate', button_type='danger')
def test_box_edit_callback(self): boxes = Polygons([Box(0, 0, 1)]) box_edit = BoxEdit(source=boxes) plot = bokeh_renderer.get_plot(boxes) self.assertIsInstance(plot.callbacks[0], BoxEditCallback) self.assertEqual(box_edit.element, boxes)