Deck.gl JSON Editor#
import json
import panel as pn
pn.extension('codeeditor', 'deckgl', template='bootstrap')
This example demonstrates how to jslink
a JSON editor to a DeckGL pane to enable super fast, live editing of a plot:
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}]
}
view_editor = pn.widgets.CodeEditor(
value=json.dumps(json_spec['initialViewState'], indent=4),
theme= 'monokai', width=500, height=225
)
layer_editor = pn.widgets.CodeEditor(
value=json.dumps(json_spec['layers'][0], indent=4),
theme= 'monokai', width=500, height=365
)
deck_gl = pn.pane.DeckGL(json_spec, mapbox_api_key=MAPBOX_KEY, sizing_mode='stretch_width', height=600)
view_editor.jscallback(args={'deck_gl': deck_gl}, value="deck_gl.initialViewState = JSON.parse(cb_obj.code)")
layer_editor.jscallback(args={'deck_gl': deck_gl}, value="deck_gl.layers = [JSON.parse(cb_obj.code)]")
pn.Row(pn.Column(view_editor, layer_editor), deck_gl).servable()