Exemple #1
0
    def create_layout(self):

        # create figure
        self.x_range = Range1d(start=self.model.map_extent[0],
                               end=self.model.map_extent[2],
                               bounds=None)
        self.y_range = Range1d(start=self.model.map_extent[1],
                               end=self.model.map_extent[3],
                               bounds=None)

        self.fig = Figure(tools='box_zoom,wheel_zoom,pan',
                          x_range=self.x_range,
                          y_range=self.y_range)
        self.fig.plot_height = 600
        self.fig.plot_width = 1024
        self.fig.axis.visible = True

        # add datashader layer
        self.image_source = ImageSource(
            url=self.model.service_url,
            extra_url_vars=self.model.shader_url_vars)
        self.image_renderer = DynamicImageRenderer(
            image_source=self.image_source)
        self.fig.renderers.append(self.image_renderer)

        # add ui components
        axes_select = Select.create(name='Plot:', options=self.model.axes)

        axes_select.on_change('value', self.on_axes_change)
        field_select = Select.create(name='Summary:',
                                     options=self.model.fields)

        field_select.on_change('value', self.on_field_change)

        aggregate_select = Select.create(
            name='Aggregation:', options=self.model.aggregate_functions)
        aggregate_select.on_change('value', self.on_aggregate_change)

        transfer_select = Select.create(name='Scale:',
                                        options=self.model.transfer_functions)
        transfer_select.on_change('value', self.on_transfer_function_change)

        controls = [
            axes_select, field_select, aggregate_select, transfer_select
        ]

        self.controls = VBox(width=200, height=600, children=controls)
        self.map_area = VBox(width=self.fig.plot_width, children=[self.fig])
        self.layout = HBox(width=self.fig.plot_width,
                           children=[self.controls, self.map_area])
 def update_image(self):
     self.model.shader_url_vars['cachebust'] = str(uuid.uuid4())
     self.image_renderer.image_source = ImageSource(
         url=self.model.service_url,
         extra_url_vars=self.model.shader_url_vars)
    def create_layout(self):
        # create figure
        self.x_range = Range1d(start=self.model.map_extent[0],
                               end=self.model.map_extent[2],
                               bounds=None)
        self.y_range = Range1d(start=self.model.map_extent[1],
                               end=self.model.map_extent[3],
                               bounds=None)

        self.fig = Figure(tools='wheel_zoom,pan',
                          x_range=self.x_range,
                          lod_threshold=None,
                          plot_width=self.model.plot_width,
                          plot_height=self.model.plot_height,
                          background_fill_color='black',
                          y_range=self.y_range)

        self.fig.min_border_top = 0
        self.fig.min_border_bottom = 10
        self.fig.min_border_left = 0
        self.fig.min_border_right = 0
        self.fig.axis.visible = False

        self.fig.xgrid.grid_line_color = None
        self.fig.ygrid.grid_line_color = None

        # add tiled basemap
        self.tile_source = WMTSTileSource(url=self.model.basemap)
        self.tile_renderer = TileRenderer(tile_source=self.tile_source)
        self.fig.renderers.append(self.tile_renderer)

        # add datashader layer
        self.image_source = ImageSource(
            url=self.model.service_url,
            extra_url_vars=self.model.shader_url_vars)
        self.image_renderer = DynamicImageRenderer(
            image_source=self.image_source)
        self.fig.renderers.append(self.image_renderer)

        # add label layer
        self.label_source = WMTSTileSource(url=self.model.labels_url)
        self.label_renderer = TileRenderer(tile_source=self.label_source)
        self.fig.renderers.append(self.label_renderer)

        # Add placeholder for legends (temporarily disabled)
        # self.model.legend_side_vbox = Column()
        # self.model.legend_bottom_vbox = Column()

        # add ui components
        controls = []
        axes_select = Select(name='Axes', options=list(self.model.axes.keys()))
        axes_select.on_change('value', self.on_axes_change)
        controls.append(axes_select)

        self.field_select = Select(name='Field',
                                   options=list(self.model.fields.keys()))
        self.field_select.on_change('value', self.on_field_change)
        controls.append(self.field_select)

        self.aggregate_select = Select(
            name='Aggregate',
            options=list(self.model.aggregate_functions.keys()))
        self.aggregate_select.on_change('value', self.on_aggregate_change)
        controls.append(self.aggregate_select)

        transfer_select = Select(name='Transfer Function',
                                 options=list(
                                     self.model.transfer_functions.keys()))
        transfer_select.on_change('value', self.on_transfer_function_change)
        controls.append(transfer_select)

        color_ramp_select = Select(name='Color Ramp',
                                   options=list(self.model.color_ramps.keys()))
        color_ramp_select.on_change('value', self.on_color_ramp_change)
        controls.append(color_ramp_select)

        spread_size_slider = Slider(title="Spread Size (px)",
                                    value=0,
                                    start=0,
                                    end=10,
                                    step=1)
        spread_size_slider.on_change('value', self.on_spread_size_change)
        controls.append(spread_size_slider)

        # hover (temporarily disabled)
        #hover_size_slider = Slider(title="Hover Size (px)", value=8, start=4,
        #                           end=30, step=1)
        #hover_size_slider.on_change('value', self.on_hover_size_change)
        #controls.append(hover_size_slider)

        # legends (temporarily disabled)
        # controls.append(self.model.legend_side_vbox)

        # add map components
        basemap_select = Select(name='Basemap',
                                value='Imagery',
                                options=list(self.model.basemaps.keys()))
        basemap_select.on_change('value', self.on_basemap_change)

        image_opacity_slider = Slider(title="Opacity",
                                      value=100,
                                      start=0,
                                      end=100,
                                      step=1)
        image_opacity_slider.on_change('value',
                                       self.on_image_opacity_slider_change)

        basemap_opacity_slider = Slider(title="Basemap Opacity",
                                        value=100,
                                        start=0,
                                        end=100,
                                        step=1)
        basemap_opacity_slider.on_change('value',
                                         self.on_basemap_opacity_slider_change)

        show_labels_chk = CheckboxGroup(labels=["Show Labels"], active=[0])
        show_labels_chk.on_click(self.on_labels_change)

        map_controls = [
            basemap_select, basemap_opacity_slider, image_opacity_slider,
            show_labels_chk
        ]

        self.controls = Column(height=600, children=controls)
        self.map_controls = Row(width=self.fig.plot_width,
                                children=map_controls)

        # legends (temporarily disabled)
        self.map_area = Column(width=900,
                               height=600,
                               children=[self.map_controls, self.fig])
        self.layout = Row(width=1300,
                          height=600,
                          children=[self.controls, self.map_area])
        self.model.fig = self.fig
        self.model.update_hover()
Exemple #4
0
p.background_fill = "black"
p.add_tools(WheelZoomTool(), PanTool())

# add base layer
tile_options = {}
tile_options['url'] = 'http://tile.stamen.com/toner/{Z}/{X}/{Y}.png'
tile_source = WMTSTileSource(**tile_options)
p.add_tile(tile_source)

# add dynamic data layer
# National Land Cover Dataset (http://www.mrlc.gov/nlcd2011.php)
service_url = 'http://raster.nationalmap.gov/arcgis/rest/services/LandCover/USGS_EROS_LandCover_NLCD/MapServer/export?'
service_url += 'bbox={XMIN},{YMIN},{XMAX},{YMAX}&bboxSR=102100&size={HEIGHT}%2C{WIDTH}&imageSR=102100&format=png32&transparent=true&f=image'
image_source_options = {}
image_source_options['url'] = service_url
image_source = ImageSource(**image_source_options)
p.add_dynamic_image(image_source)

# create labels layer
tile_label_options = {}
tile_label_options[
    'url'] = 'http://tile.stamen.com/toner-labels/{Z}/{X}/{Y}.png'
tile_label_source = WMTSTileSource(**tile_label_options)
p.add_tile(tile_label_source, **dict(render_parents=True))

doc = Document()
doc.add(p)

if __name__ == "__main__":
    filename = "dynamic_map.html"
    with open(filename, "w") as f:
Exemple #5
0
 def update_image(self):
     self.model.shader_url_vars['cachebust'] = str(uuid.uuid4())
     self.image_renderer.image_source = ImageSource(url=self.model.service_url, extra_url_vars=self.model.shader_url_vars)
     self.fig.xaxis.axis_label=self.model.active_axes['xtitle']  
     self.fig.yaxis.axis_label=self.model.active_axes['ytitle'] 
Exemple #6
0
    def create_layout(self):
        # create figure
        self.x_range = Range1d(start=self.model.map_extent[0],
                               end=self.model.map_extent[2], bounds=None)
        self.y_range = Range1d(start=self.model.map_extent[3],
                               end=self.model.map_extent[1], bounds=None)
        self.fig = Figure(tools='wheel_zoom,pan,save,box_zoom', title='Color Magnitude Diagram',
                          x_range=self.x_range,
                          y_range=self.y_range,
                          lod_threshold=None,
                          plot_width=self.model.plot_width,
                          plot_height=self.model.plot_height,
                          background_fill_color='white')

        # Labeling will be used to deal with the fact that we cannot get the axes right 
        # this source can then be adjusted with sliders as necessary to reset axis. 
        label_source = ColumnDataSource(data={'x': [-5,-5,-5,-5,-5], 
                                        'y': [-10-0.2,-5-0.2,0-0.2,5-0.2,10-0.2], 'text':['10','5','0','-5','-10']}) 
        label1 = self.fig.text('x','y','text', source=label_source, text_font_size='8pt', text_color='deepskyblue') 

        # edit all the usual bokeh figure properties here 
        self.fig.xaxis.axis_label=self.model.xtitle 
        self.fig.yaxis.axis_label=self.model.ytitle 
        self.fig.yaxis.axis_label_text_font= 'PT Serif' 
        self.fig.yaxis.major_label_text_font = 'PT Serif' 
        self.fig.xaxis.axis_label_text_font= 'PT Serif' 
        self.fig.xaxis.major_label_text_font = 'PT Serif' 
        self.fig.min_border_top = 20
        self.fig.min_border_bottom = 10
        self.fig.min_border_left = 10
        self.fig.min_border_right = 10
        self.fig.axis.visible = False # use this to flip the axis labeling on and off 
        self.fig.xgrid.grid_line_color = '#aaaaaa' 
        self.fig.ygrid.grid_line_color = '#aaaaaa' 
        self.fig.ygrid.grid_line_alpha = 0.1  
        self.fig.xgrid.grid_line_alpha = 0.1  

        # add tiled basemap to class AppView 
        image_url    = 'http://server.arcgisonline.com/arcgis//rest/services/World_Imagery/MapServer/tile/{Z}/{Y}/{X}.png' 
        self.tile_source = WMTSTileSource(url=image_url) 
        self.tile_renderer = TileRenderer(tile_source=self.tile_source)
        self.tile_renderer.alpha = 0.02 
        self.fig.renderers.append(self.tile_renderer) # comment this out and it takes the ds points with it! WHY? 

        # add datashader layer - these are the aggregated data points to class AppView 
        self.image_source = ImageSource(url=self.model.service_url, extra_url_vars=self.model.shader_url_vars)
        self.image_renderer = DynamicImageRenderer(image_source=self.image_source)
        self.image_renderer.alpha = 1.00 
        self.fig.renderers.append(self.image_renderer)

        # add controls 
        controls = []            # empty list for astronomy controls 
        visual_controls = []     # empty list for visual controls 
        self.parameters = {}     # empty dict for astrophyscal pars 

        age_slider = Slider(title="Log Age [Gyr]", value=9.0, start=5.5, end=10.1, step=0.05)
        age_slider.on_change('value', self.on_age_change)
        controls.append(age_slider)
        self.parameters['age'] = age_slider.value 

        aperture_size_slider = Slider(title="Aperture [m]", value=10, start=2,end=20, step=1)
        aperture_size_slider.on_change('value', self.on_aperture_size_change)
        controls.append(aperture_size_slider)
        self.parameters['aperture'] = aperture_size_slider.value 

        exposure_time_slider = Slider(title="Exposure Time [hr]", value=0.1, start=1.0,end=10.0, step=0.1)
        exposure_time_slider.on_change('value', self.on_exposure_time_change)
        controls.append(exposure_time_slider)

        distance_slider = Slider(title="Distance [kpc]", value=100. , start=10.0,end=1000.0, step=100.)
        distance_slider.on_change('value', self.on_distance_change)
        controls.append(distance_slider)

        axes_select = Select(title='Variables', options=list(self.model.axes.keys()))
        axes_select.on_change('value', self.on_axes_change)
        controls.append(axes_select)

        self.field_select = Select(title='Field', options=list(self.model.fields.keys()))
        self.field_select.on_change('value', self.on_field_change)
        #controls.append(self.field_select) - chooses wich field to weight by in aggregation, temporarily omitted for devel 

        self.aggregate_select = Select(title='Aggregate', options=list(self.model.aggregate_functions.keys()))
        self.aggregate_select.on_change('value', self.on_aggregate_change)
        controls.append(self.aggregate_select)

        spread_size_slider = Slider(title="Spread Size (px)", value=1, start=0,end=5, step=1)
        spread_size_slider.on_change('value', self.on_spread_size_change)
        visual_controls.append(spread_size_slider)

        image_opacity_slider = Slider(title="Opacity", value=100, start=0,end=100, step=1)
        image_opacity_slider.on_change('value', self.on_image_opacity_slider_change)
        visual_controls.append(image_opacity_slider) 

        transfer_select = Select(title='Transfer Function', options=list(self.model.transfer_functions.keys()))
        transfer_select.on_change('value', self.on_transfer_function_change)
        visual_controls.append(transfer_select)

        color_ramp_select = Select(title='Colormap', name='Color Ramp', options=list(self.model.color_ramps.keys()))
        color_ramp_select.on_change('value', self.on_color_ramp_change)
        visual_controls.append(color_ramp_select)

        astro_tab = Panel(child=Column(children=controls), title='Stars') 
        visual_tab = Panel(child=Column(children=visual_controls), title='Visuals', width=450)

        self.controls = Tabs(tabs=[astro_tab, visual_tab], width=350)

        self.map_area = Column(width=900, height=600,children=[self.fig])
        self.layout = Row(width=1300, height=600,children=[self.controls, self.fig])
        self.model.fig = self.fig    # identify the fig defined here as the one that will be passed to AppView 
Exemple #7
0
from bokeh.plotting import figure, output_file, show
from bokeh.tile_providers import STAMEN_TONER, STAMEN_TONER_LABELS

title = 'Dynamic Map: National Land Cover Dataset'
p = figure(tools='wheel_zoom,pan', title=title)
p.x_range = Range1d(start=-15473429, end=2108550, bounds=None)
p.y_range = Range1d(start=-6315661, end=7264686, bounds=None)
p.background_fill_color = "black"
p.axis.visible = False

# National Land Cover Dataset (http://www.mrlc.gov/nlcd2011.php)
service_url = (
    "http://raster.nationalmap.gov/"
    "arcgis/rest/services/LandCover/USGS_EROS_LandCover_NLCD/MapServer/export"
    "?bbox={XMIN},{YMIN},{XMAX},{YMAX}"
    "&bboxSR=102100"
    "&size={HEIGHT}%2C{WIDTH}"
    "&imageSR=102100"
    "&format=png32"
    "&transparent=true"
    "&f=image")
image_source = ImageSource(url=service_url)

p.add_tile(STAMEN_TONER)
p.add_dynamic_image(image_source)
p.add_tile(STAMEN_TONER_LABELS, render_parents=False)

output_file('dynamic_map.html')

show(p)
    def create_layout(self):

        # create figure
        self.x_range = Range1d(start=self.model.map_extent[0],
                               end=self.model.map_extent[2],
                               bounds=None)
        self.y_range = Range1d(start=self.model.map_extent[1],
                               end=self.model.map_extent[3],
                               bounds=None)

        self.fig = Figure(tools='wheel_zoom,pan',
                          x_range=self.x_range,
                          lod_threshold=None,
                          plot_width=self.model.plot_width,
                          plot_height=self.model.plot_height,
                          y_range=self.y_range)

        self.fig.min_border_top = 0
        self.fig.min_border_bottom = 10
        self.fig.min_border_left = 0
        self.fig.min_border_right = 0
        self.fig.axis.visible = False

        self.fig.xgrid.grid_line_color = None
        self.fig.ygrid.grid_line_color = None

        # add tiled basemap
        self.tile_source = WMTSTileSource(url=self.model.basemap)
        self.tile_renderer = TileRenderer(tile_source=self.tile_source)
        self.fig.renderers.append(self.tile_renderer)

        # add datashader layer
        self.image_source = ImageSource(
            url=self.model.service_url,
            extra_url_vars=self.model.shader_url_vars)
        self.image_renderer = DynamicImageRenderer(
            image_source=self.image_source)
        self.fig.renderers.append(self.image_renderer)

        # add label layer
        self.label_source = WMTSTileSource(url=self.model.labels_url)
        self.label_renderer = TileRenderer(tile_source=self.label_source)
        self.fig.renderers.append(self.label_renderer)

        # Add a hover tool
        hover_layer = HoverLayer()
        hover_layer.field_name = self.model.field_title
        hover_layer.is_categorical = self.model.field in self.model.categorical_fields
        self.fig.renderers.append(hover_layer.renderer)
        self.fig.add_tools(hover_layer.tool)
        self.model.hover_layer = hover_layer

        self.model.legend_side_vbox = VBox()
        self.model.legend_bottom_vbox = VBox()

        # add ui components
        controls = []
        axes_select = Select.create(name='Axes', options=self.model.axes)
        axes_select.on_change('value', self.on_axes_change)
        controls.append(axes_select)

        self.field_select = Select.create(name='Field',
                                          options=self.model.fields)
        self.field_select.on_change('value', self.on_field_change)
        controls.append(self.field_select)

        self.aggregate_select = Select.create(
            name='Aggregate', options=self.model.aggregate_functions)
        self.aggregate_select.on_change('value', self.on_aggregate_change)
        controls.append(self.aggregate_select)

        transfer_select = Select.create(name='Transfer Function',
                                        options=self.model.transfer_functions)
        transfer_select.on_change('value', self.on_transfer_function_change)
        controls.append(transfer_select)

        color_ramp_select = Select.create(name='Color Ramp',
                                          options=self.model.color_ramps)
        color_ramp_select.on_change('value', self.on_color_ramp_change)
        controls.append(color_ramp_select)

        spread_size_slider = Slider(title="Spread Size (px)",
                                    value=0,
                                    start=0,
                                    end=10,
                                    step=1)
        spread_size_slider.on_change('value', self.on_spread_size_change)
        controls.append(spread_size_slider)

        hover_size_slider = Slider(title="Hover Size (px)",
                                   value=8,
                                   start=4,
                                   end=30,
                                   step=1)
        hover_size_slider.on_change('value', self.on_hover_size_change)
        controls.append(hover_size_slider)

        controls.append(self.model.legend_side_vbox)

        # add map components
        basemap_select = Select.create(name='Basemap',
                                       value='Imagery',
                                       options=self.model.basemaps)
        basemap_select.on_change('value', self.on_basemap_change)

        image_opacity_slider = Slider(title="Opacity",
                                      value=100,
                                      start=0,
                                      end=100,
                                      step=1)
        image_opacity_slider.on_change('value',
                                       self.on_image_opacity_slider_change)

        basemap_opacity_slider = Slider(title="Basemap Opacity",
                                        value=100,
                                        start=0,
                                        end=100,
                                        step=1)
        basemap_opacity_slider.on_change('value',
                                         self.on_basemap_opacity_slider_change)

        show_labels_chk = CheckboxGroup(labels=["Show Labels"], active=[0])
        show_labels_chk.on_click(self.on_labels_change)

        map_controls = [
            basemap_select, basemap_opacity_slider, image_opacity_slider,
            show_labels_chk
        ]

        self.controls = VBox(width=200, height=600, children=controls)
        self.map_controls = HBox(width=self.fig.plot_width,
                                 children=map_controls)
        self.map_area = VBox(width=self.fig.plot_width,
                             children=[
                                 self.map_controls, self.fig,
                                 self.model.legend_bottom_vbox
                             ])
        self.layout = HBox(width=1366, children=[self.controls, self.map_area])
Exemple #9
0
 def update_image(self):
     self.image_renderer.image_source = ImageSource(
         url=self.model.service_url,
         extra_url_vars=self.model.shader_url_vars)
Exemple #10
0
    def create_layout(self):

        # create figure
        self.x_range = Range1d(start=self.model.map_extent[0],
                               end=self.model.map_extent[2],
                               bounds=None)
        self.y_range = Range1d(start=self.model.map_extent[1],
                               end=self.model.map_extent[3],
                               bounds=None)

        self.fig = Figure(tools='wheel_zoom,pan',
                          x_range=self.x_range,
                          y_range=self.y_range)
        self.fig.plot_height = 560
        self.fig.plot_width = 800
        self.fig.axis.visible = False

        # add tiled basemap
        self.tile_source = WMTSTileSource(url=self.model.basemap)
        self.tile_renderer = TileRenderer(tile_source=self.tile_source)
        self.fig.renderers.append(self.tile_renderer)

        # add datashader layer
        self.image_source = ImageSource(
            url=self.model.service_url,
            extra_url_vars=self.model.shader_url_vars)
        self.image_renderer = DynamicImageRenderer(
            image_source=self.image_source)
        self.fig.renderers.append(self.image_renderer)

        # add label layer
        self.label_source = WMTSTileSource(url=self.model.labels_url)
        self.label_renderer = TileRenderer(tile_source=self.label_source)
        self.fig.renderers.append(self.label_renderer)

        # add ui components
        axes_select = Select.create(name='Axes', options=self.model.axes)
        axes_select.on_change('value', self.on_axes_change)

        field_select = Select.create(name='Field', options=self.model.fields)
        field_select.on_change('value', self.on_field_change)

        aggregate_select = Select.create(
            name='Aggregate', options=self.model.aggregate_functions)
        aggregate_select.on_change('value', self.on_aggregate_change)

        transfer_select = Select.create(name='Transfer Function',
                                        options=self.model.transfer_functions)
        transfer_select.on_change('value', self.on_transfer_function_change)

        basemap_select = Select.create(name='Basemap',
                                       value='Toner',
                                       options=self.model.basemaps)
        basemap_select.on_change('value', self.on_basemap_change)

        image_opacity_slider = Slider(title="Opacity",
                                      value=100,
                                      start=0,
                                      end=100,
                                      step=1)
        image_opacity_slider.on_change('value',
                                       self.on_image_opacity_slider_change)

        basemap_opacity_slider = Slider(title="Basemap Opacity",
                                        value=100,
                                        start=0,
                                        end=100,
                                        step=1)
        basemap_opacity_slider.on_change('value',
                                         self.on_basemap_opacity_slider_change)

        show_labels_chk = CheckboxGroup(labels=["Show Labels"], active=[0])
        show_labels_chk.on_click(self.on_labels_change)

        controls = [
            axes_select, field_select, aggregate_select, transfer_select
        ]

        map_controls = [
            basemap_select, basemap_opacity_slider, image_opacity_slider,
            show_labels_chk
        ]

        self.controls = VBox(width=200, height=600, children=controls)
        self.map_controls = HBox(width=self.fig.plot_width,
                                 children=map_controls)
        self.map_area = VBox(width=self.fig.plot_width,
                             children=[self.map_controls, self.fig])
        self.layout = HBox(width=1024, children=[self.controls, self.map_area])