Ejemplo n.º 1
0
 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]})
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
 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]})
Ejemplo n.º 7
0
# 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')
Ejemplo n.º 8
0
 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)