Hey. I’ve created a program to generate random points on a plane representing geo-coordinates (I took the boundaries within a field). I’ve called this data.csv, comprising of lat and lon values. This gets updated every 5 seconds with new random points.
I’ve created a simple dash application constructed from some boilerplate code. This essentially just creates a map with the random geopoints.
The idea is every second (arbitrary for now) it’s going to pull in the new CSV file and I want the scatter-mapbox data to update and replace the old points with the new. I don’t know the way to apply the new data? I’ve had a look at the fig.update_mapboxes method and I can’t find anything about updating the data, I’m also not sure that the line:
is doing what I think it should be doing (if anything at all)…
app = dash.Dash() df = pd.read_csv('data.csv') fig = px.scatter_mapbox(df, lat="lat", lon="lon", height=512, width=512, zoom=16) fig.update_layout(mapbox_style="open-street-map") app.layout = html.Div(children=[ html.H1(children='Simulated Map'), html.Div(children=''' Dash: A web application for visualising geodata. '''), dcc.Graph( id='live-update-graph', figure=fig ), dcc.Interval( id='interval-component', interval=1*1000, n_intervals=0 ) ]) @app.callback(Output('live-update-graph', 'figure'), Input('interval-component', 'n_intervals')) def update_graph_live(n): udf = pd.read_csv('data.csv') fig.update(data=dict(lat=np.array(udf.lat).tolist(), lon=np.array(udf.lon).tolist())) return fig if __name__ == '__main__': app.run_server(debug=True, use_reloader=False)
I also want to work in the uirevision somehow to save the state of the zoom, pan etc.
I’m not sure if I should just create a new figure (i.e reassign fig) every time it searches for a new csv?
Anyone able to offer some assistance. Been scratching my head for a few days