Наложение изменяемого набора данных на плитки карты - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь наложить векторный объект, базовый набор данных которого может измениться, на плитку карты geoviews. Ниже приведен пример кода, иллюстрирующий проблему, который не отображается должным образом при изменении базового набора векторных данных. Этот пример взят из здесь и в некоторой степени связан с другим вопросом , который я недавно опубликовал.

import panel as pn
import numpy as np
import param as pm
import holoviews as hv
import geoviews as gv
import geoviews.tile_sources as gts
from holoviews.operation.datashader import rasterize
from collections import OrderedDict as odict
import geopandas as gpd
renderer = hv.renderer('bokeh')
pn.extension()

#Define Example Datasets   
vect_dat = {'v1':gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')),'v2':gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))}
vect_dat2 = {'v1':gv.Polygons(gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')),vdims='continent', label='id').opts(tools=['hover'],line_color='k',fill_alpha=0),
             'v2':gv.Points(gpd.read_file(gpd.datasets.get_path('naturalearth_cities')),vdims='name', label='id').opts(tools=['hover'],line_color='k',fill_alpha=0)}
maps   = ['EsriImagery','EsriNatGeo', 'EsriTerrain', 'OSM']
bases  = odict([(name, gts.tile_sources[name].relabel(name)) for name in maps])
gopts  = hv.opts.WMTS(responsive=True, xaxis=None, yaxis=None, bgcolor='white', show_grid=False)

class sel_vect():
    def v1():
        return gv.Polygons(vect_dat['v1'],vdims='continent', label='id').opts(tools=['hover'],line_color='k',fill_alpha=0)
    def v2():
        return gv.Points(vect_dat['v2'],vdims='name', label='id').opts(tools=['hover'],line_color='k',fill_alpha=0)

#Dashboard
class Explorer_Test(pm.Parameterized):
    basemap = pm.Selector(bases)
    spat = pm.Selector(list(vect_dat2.keys()))
    map_opacity = pm.Magnitude(1.00)


    @pm.depends('basemap','map_opacity')
    def tiles(self):
        return self.basemap.opts(gopts).opts(alpha=self.map_opacity)

    @pm.depends('spat')
    def elem_spat(self):
        return getattr(sel_vect,self.spat)()

    def viewable(self,**kwargs):
        return hv.DynamicMap(self.elem_spat)*hv.DynamicMap(self.tiles)

explorer_test = Explorer_Test(name="")
panel = pn.Row(pn.Param(explorer_test.param, expand_button=False),explorer_test.viewable())
panel.servable()

В этом примере, если я изменю набор векторных данных с "v1" на "v2", панель не будет отображаться.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...