Я пытаюсь преобразовать код, который был сделан в черте Python, в Node.js + express. У меня есть встроенный пользовательский интерфейс, но теперь мне нужно включить функции, написанные на Python для создания обновлений пользовательского интерфейса.
Например, эта функция в Python:
# The Map generator
@app.callback(Output('plot1', 'figure'),[Input('button', 'n_clicks')],
[State('text1', 'value'),State('text2', 'value'),State('text3', 'value'),State('text4', 'value')])
def text_callback(building_address, year_end='2017',year_start='2016', mapping_variable = 'Median Household Income'):
print("Using this function now")
addresses = building_address.split(';')
print("ADDRESSESsssssssssssssssssssss:", addresses)
data_slider = []
layers_slider = []
if mapping_variable == 'Predicted Growth Rank':
colormap = 'Blues_r'
else:
colormap = 'Blues'
gdf = get_gdf(addresses, all_data, year_end,year_start)[0]
Building_lat,Building_lon,Building_name = get_building_info(addresses)
cmin=gdf[mapping_variable].min()
cmax=gdf[mapping_variable].max()
sm= scalarmappable(colormap, cmin, cmax)
colorscale_new = get_colorscale(sm, df=gdf[mapping_variable], cmin=gdf[mapping_variable].min(), cmax=gdf[mapping_variable].max())
pl_colorscale = colorscale_new
gdf_year = gdf[gdf['Year']==year_end]
gdf_year['Predicted Growth Rank'] = gdf_year['Predicted Growth Rank'].rank(ascending=False)
gdf_year= gdf_year.reset_index()
index_list = list(gdf_year.index)
centers,layers = get_mapbox_choropleth_data(gdf_year, index_list, col_vals=mapping_variable, colorscale=colorscale_new, val_name=mapping_variable)
data_slider.append(centers)
layers_slider.append(layers)
data2 = go.Scattermapbox(
lat=Building_lat, lon=Building_lon, mode='markers', marker=go.scattermapbox.Marker(size=9,color='rgb(231, 41, 74)'),
showlegend=False,
text=Building_name)
data_slider.append(data2)
layoutmbx = dict(font=dict(family='Balto', size=16), autosize=False, height=740, width=1200,
hovermode='closest',
mapbox=dict(accesstoken=mapbox_access_token,layers=layers,
bearing=0,
center=dict(lat=centers['lat'][0], lon=centers['lon'][0]),
pitch=0,
zoom=9,style = 'streets'),margin = dict(l = 0, r = 0, t = 0, b = 0),
plot_bgcolor= '#202d56',
paper_bgcolor='#202d56')
return {'data': data_slider, 'layout': layoutmbx}
the @app.callback
сопоставляет различные элементы внешнего интерфейса и идентифицирует их в том порядке, в котором функция должна их использовать.
Так как .. Button = n_clicks, text1 = адрес здания, text2 = конец года, text3 = year_start, text4 = переменная отображения.
Как я могу преобразовать Python's Dash в Node.JS +Экспресс?
ОБНОВЛЕНИЕ:
Чтобы быть более конкретным, у меня теперь есть пользовательский интерфейс с 4 переменными: address, year_end, year_start и mapping_variable. Приведенная выше функция для одного конкретного адреса будет возвращать это:
[{'type': 'scattermapbox', 'mode': 'markers', 'text': ['Census Tract:304.01<br>Median Household Income:52212<br> Year: 2017 '], 'marker': {'size': 1, 'color': ['rgba(247, 251, 255, 255)'], 'colorscale': [[0.0, 'rgba(247, 251, 255, 255)'], [0.05263157894736842, 'rgba(236, 244, 251, 255)'], [0.10526315789473684, 'rgba(226, 237, 248, 255)'], [0.15789473684210525, 'rgba(215, 230, 244, 255)'], [0.21052631578947367, 'rgba(206, 224, 241, 255)'], [0.2631578947368421, 'rgba(193, 217, 237, 255)'], [0.3157894736842105, 'rgba(177, 210, 231, 255)'], [0.3684210526315789, 'rgba(160, 202, 225, 255)'], [0.42105263157894735, 'rgba(139, 192, 221, 255)'], [0.47368421052631576, 'rgba(117, 179, 216, 255)'], [0.5263157894736842, 'rgba(98, 168, 210, 255)'], [0.5789473684210527, 'rgba(80, 155, 203, 255)'], [0.631578947368421, 'rgba(64, 144, 197, 255)'], [0.6842105263157894, 'rgba(49, 129, 189, 255)'], [0.7368421052631579, 'rgba(36, 116, 182, 255)'], [0.7894736842105263, 'rgba(24, 102, 172, 255)'], [0.8421052631578947, 'rgba(14, 89, 162, 255)'], [0.894736842105263, 'rgba(8, 74, 146, 255)'], [0.9473684210526315, 'rgba(8, 61, 126, 255)'], [1.0, 'rgba(8, 48, 107, 255)']], 'opacity': 0, 'cmin': 52212, 'cmax': 52212, 'showscale': False}, 'showlegend': False, 'lon': [-122.77720976814757], 'lat': [45.47996783203806], 'hoverinfo': 'text'}, Scattermapbox({
'lat': [45.48553],
'lon': [-122.77518],
'marker': {'color': 'rgb(231, 41, 74)', 'size': 9},
'mode': 'markers',
'showlegend': False,
'text': [9555 SW DUNCAN LN]
})]
То, что эта функция делает в python с API-панелью тире, накладывает эти цвета на карту. Я должен сделать то же самое с Node.JS.