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)