Интерактивная карта Боке - PullRequest
0 голосов
/ 02 февраля 2019

Я использую этот код для создания интерактивной карты на python:

# Define the callback: update_plot
def update_plot(attr, old, new):

    # Create a dropdown Select widget for the y data: y_select
    N = str(select.value)
    map_options = GMapOptions(lat=sites_list_c.loc[sites_list_c['Site Name'] == N,'Latitude Decimal'], lng=sites_list_c.loc[sites_list_c['Site Name'] == N,'Lontitude Decimal'], map_type="roadmap", zoom=4)
    plot = gmap(my_key, map_options, title="Test")
    source = ColumnDataSource(
        data=dict( lat=sites_list_c['Latitude Decimal'].tolist(),
        lon=sites_list_c['Longitude Decimal'].tolist()
        )       
    )
    plot.circle(x="lon", y="lat", size=15, fill_color='blue', fill_alpha=0.8, source=source)

# Attach the update_plot callback to the 'value' property of y_select
select.on_change('value', update_plot)

# Create layout and add to current document
layout = row(widgetbox(select), plot)
curdoc().add_root(layout)
show(layout)

Но я получаю это предупреждение:

ПРЕДУПРЕЖДЕНИЕ: bokeh.embed.util: Выгенерируют автономный вывод HTML / JS, но пытаются использовать реальные обратные вызовы Python (т.е. с on_change или on_event).Эта комбинация не может работать.

Только автономные обратные вызовы JavaScript могут использоваться с автономным выводом.Для получения дополнительной информации о обратных вызовах JavaScript с Bokeh см .:

http://bokeh.pydata.org/en/latest/docs/user_guide/interaction/callbacks.html

В качестве альтернативы, чтобы использовать реальные обратные вызовы Python, может использоваться приложение сервера Bokeh.Для получения дополнительной информации о создании и запуске приложений Bokeh см .:

http://bokeh.pydata.org/en/latest/docs/user_guide/server.html

1 Ответ

0 голосов
/ 03 февраля 2019

Сообщение пытается быть самоочевидным.Чтобы соединить реальные обратные вызовы Python с событиями пользовательского интерфейса, должен быть настоящий процесс Python, выполняющийся для выполнения кода обратного вызова.Этот процесс является сервером Bokeh, и чтобы использовать его, вы должны запустить свой код, подобный следующему:

bokeh serve --show app.py

А более конкретно, вы бы не просто выполняли python app.py

(Обратите внимание, что вам также необходимо удалить вызов на show, поскольку он не может использоваться с приложениями сервера Bokeh.)

В противном случае, если вы просто запустите это какобычный скрипт на Python (и с вызовом show), затем Bokeh генерирует статический вывод HTML + JS.В этом случае не может быть способа выполнения обратного вызова Python, поскольку выходные данные отображаются только в вашем веб-браузере, а веб-браузеры не имеют возможности запускать код Python.Единственным видом обратных вызовов, которые могут функционировать, являются обратные вызовы JavaScript.

Существует обширная документация по запуску серверных приложений Bokeh в главе Работа с Bokeh Server в документации и обширная документация по CustomJS обратным вызовам в Обратных вызовах JavaScript глава.

...