import panel as pn import pydeck as pdk pn.extension('deckgl') MAPBOX_KEY = "pk.eyJ1IjoicGFuZWxvcmciLCJhIjoiY2s1enA3ejhyMWhmZjNobjM1NXhtbWRrMyJ9.B_frQsAVepGIe-HiOJeqvQ" json_spec = { "initialViewState": { "bearing": -27.36, "latitude": 52.2323, "longitude": -1.415, "maxZoom": 15, "minZoom": 5, "pitch": 40.5, "zoom": 6 }, "layers": [{ "@@type": "HexagonLayer", "autoHighlight": True, "coverage": 1, "data": "https://raw.githubusercontent.com/uber-common/deck.gl-data/master/examples/3d-heatmap/heatmap-data.csv", "elevationRange": [0, 3000], "elevationScale": 50, "extruded": True, "getPosition": "@@=[lng, lat]", "id": "8a553b25-ef3a-489c-bbe2-e102d18a3211", "pickable": True }], "mapStyle": "mapbox://styles/mapbox/dark-v9", "views": [ {"@@type": "MapView", "controller": True} ] } deck_gl = pn.pane.DeckGL(json_spec, mapbox_api_key=MAPBOX_KEY, sizing_mode='stretch_width', height=600) deck_gl COLOR_RANGE = [ [1, 152, 189], [73, 227, 206], [216, 254, 181], [254, 237, 177], [254, 173, 84], [209, 55, 78] ] json_spec['layers'][0]['colorRange'] = COLOR_RANGE deck_gl.param.trigger('object') DATA_URL = 'https://raw.githubusercontent.com/uber-common/deck.gl-data/master/examples/geojson/vancouver-blocks.json' LAND_COVER = [[[-123.0, 49.196], [-123.0, 49.324], [-123.306, 49.324], [-123.306, 49.196]]] json_spec = { "initialViewState": { 'latitude': 49.254, 'longitude': -123.13, 'zoom': 11, 'maxZoom': 16, 'pitch': 45, 'bearing': 0 }, "layers": [{ '@@type': 'GeoJsonLayer', 'id': 'geojson', 'data': DATA_URL, 'opacity': 0.8, 'stroked': True, 'filled': True, 'extruded': True, 'wireframe': True, 'fp64': True, 'getLineColor': [255, 255, 255], 'getElevation': "@@=properties.valuePerSqm / 20", 'getFillColor': "@@=[255, 255, properties.growth * 255]", 'pickable': True, }, { '@@type': 'PolygonLayer', 'id': 'landcover', 'data': LAND_COVER, 'stroked': True, 'pickable': True, # processes the data as a flat longitude-latitude pair 'getPolygon': '@@=-', 'getFillColor': [0, 0, 0, 20] }], "mapStyle": "mapbox://styles/mapbox/dark-v9", "views": [ {"@@type": "MapView", "controller": True} ] } geojson_tooltip = { "html": """ Value per Square meter: {properties.valuePerSqm}
Growth: {properties.growth} """, "style": { "backgroundColor": "steelblue", "color": "white" } } tooltip = { "geojson": geojson_tooltip, "landcover": { "html": "The background", "style": { "backgroundColor": "red", "color": "white" } } } pn.pane.DeckGL(json_spec, tooltips=tooltip, mapbox_api_key=MAPBOX_KEY, sizing_mode='stretch_width', height=600) import pydeck DATA_URL = "https://raw.githubusercontent.com/uber-common/deck.gl-data/master/examples/geojson/vancouver-blocks.json" LAND_COVER = [[[-123.0, 49.196], [-123.0, 49.324], [-123.306, 49.324], [-123.306, 49.196]]] INITIAL_VIEW_STATE = pydeck.ViewState( latitude=49.254, longitude=-123.13, zoom=11, max_zoom=16, pitch=45, bearing=0 ) polygon = pydeck.Layer( 'PolygonLayer', LAND_COVER, stroked=False, # processes the data as a flat longitude-latitude pair get_polygon='-', get_fill_color=[0, 0, 0, 20] ) geojson = pydeck.Layer( 'GeoJsonLayer', DATA_URL, opacity=0.8, stroked=False, filled=True, extruded=True, wireframe=True, get_elevation='properties.valuePerSqm / 20', get_fill_color='[255, 255, properties.growth * 255]', get_line_color=[255, 255, 255], pickable=True ) r = pydeck.Deck( api_keys={'mapbox': MAPBOX_KEY}, layers=[polygon, geojson], initial_view_state=INITIAL_VIEW_STATE ) # Tooltip (you can get the id directly from the layer object) tooltips = {geojson.id: geojson_tooltip} pn.pane.DeckGL(r, sizing_mode='stretch_width', tooltips=tooltips, height=600) deck_gl_example = pn.pane.DeckGL(r, sizing_mode='stretch_width', tooltips=tooltips, height=600) pn.Row(deck_gl_example.controls(), deck_gl_example)