Я пытаюсь создать интерактивную панель с графикой и графикой.Моя цель - добавить точки данных (широта, долгота) на карту Mapbox.Создание карты статически с точками данных работает хорошо, но мне нужно, чтобы в раскрывающемся списке я указывал точки данных, отображаемые на карте.
Мне кажется, проблема в том, что каждый раз, когда я пытаюсь передать данные на карту, они имеют неправильный формат.Код ошибки, соответствующий коду ошибки: Объект типа 'Response' не поддерживает сериализацию JSON
Я пытался преобразовать данные в jason с помощью jasonify и json.dumps (objects).Я также прочитал многие подобные вопросы (относительно моей ошибки) на форуме / в Интернете, но ни один из них не помог мне разобраться в моей проблеме.
Я обычно использую учебные пособия и изменяю код.У меня есть графики, выпадающие списки и т. Д., Которые работают аналогичным образом.Но карта не сработает.
Может кто-нибудь объяснить мне, что я делаю не так?Я хотел бы извлечь урок из ответа, и я еще не настолько талантлив в программировании на Python.
Если у вас есть какие-либо вопросы или если я недостаточно детализирован, дайте мне знать.
Привет Стефан
Ниже мой код:
from flask import jsonify
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.plotly as py
import plotly.graph_objs as go
import pandas as pd
import plotly.plotly as py
import pyodbc
from sqlalchemy import create_engine
import numpy as np
mapbox_access_token = 'pk.eyJ1Ijoic2VtcGFoIiwiYSI6ImNqbHBoaXU5YjF5bHkzcHBncXFkejl0MjAifQ.0R2VfR5a8_owewhbx16a6w'
app = dash.Dash(__name__)
app.config['supress_callback_exceptions']=True
all_options = {
'Company1': ['52.33076869999999', '4.914620499999955'],
'Company2': [u'52.0916142', '5.106795599999941']
}
dict1 = {'name': 'Company1', 'lat': '52.33076869999999', 'lon': '4.914620499999955'}
dict2 = {'name': u'Company2', 'lat': '52.0916142', 'lon': '5.106795599999941'}
latitude = []
longtitude = []
def set_cities_value(available_options):
return available_options[0]['value']
@app.callback(
dash.dependencies.Output('display-selected-values', 'children'),
[dash.dependencies.Input('company-dropdown', 'value')])
@app.callback(
dash.dependencies.Output('graph', 'children'),
[dash.dependencies.Input('company-dropdown', 'value')])
def set_display_children(selected_company):
if selected_company == 'Company1':
lat = dict1['lat']
lon = dict1['lon']
latitude.append(lat)
longtitude.append(lon)
print(latitude)
print(longtitude)
else:
lat = dict2['lat']
lon = dict2['lon']
latitude.append(lat)
longtitude.append(lon)
datamap = [
go.Scattermapbox(
lat= latitude,
lon= longtitude,
mode='markers',
marker=dict(
size=10
),
text=['Testing'],
)
]
layoutmap = go.Layout(
autosize=False,
margin={
't':10
},
height=700,
hovermode='closest',
mapbox=dict(
accesstoken=mapbox_access_token,
bearing=0,
center=dict(
lat=52.090737,
lon=5.12142
),
pitch=0,
zoom=6.6,
style='light',
),
)
fig = dict(data=datamap, layout=layoutmap)
app.layout = html.Div([
dcc.Dropdown(
id='company-dropdown',
options=[{'label': k, 'value': k} for k in all_options.keys()],
value='Company1'
),
html.Hr(),
dcc.Graph(id='graph', figure=fig),
html.Hr(),
html.Div(id='display-selected-values')
])
if __name__ == '__main__':
app.run_server(debug=True)