Проблемы с использованием Google Maps с Bokeh Server, хотите динамическое увеличение - PullRequest
0 голосов
/ 06 февраля 2019

Я бы хотел перевести приложение Google Maps Bokeh в приложение Bokeh Server, которое позволяет масштабировать.Это приложение bokek, которое я пытаюсь изменить:
https://bokeh.pydata.org/en/latest/docs/user_guide/geo.html

Это моя попытка перевести приложение на сервер bokeh:

from bokeh.io import curdoc
from bokeh.layouts import row, column
from bokeh.models import ColumnDataSource, GMapOptions
from bokeh.plotting import gmap
from bokeh.models.widgets import Slider, TextInput
import random

text = TextInput(title="title", value='my sine wave')

zoom_slider = Slider(title='Zoom Level', value=11, start=0, end=20, step=1)
lat_textbox = TextInput(title='Latitude', value='30.2861')
lon_textbox = TextInput(title='Longitude', value='-97.7394')

source_gps = ColumnDataSource(data=dict(lat=[30.29, 30.20, 30.29], lon=[-97.70, -97.74, -97.78]))
source_map = ColumnDataSource(
    data=dict(map_options=[GMapOptions(lat=30.2861, lng=-97.7394, map_type="roadmap", zoom=11)]))

p = gmap("YOUR GOOGLE API CREDENTIALS HERE", 
source_map.data['map_options'][0], title="Austin")
p.circle(x="lon", y="lat", size=15, fill_color="blue", fill_alpha=0.8, source=source_gps)


def update_data(attrname, old, new):
    zoom = zoom_slider.value
    lat = float(lat_textbox.value)
    lon = float(lon_textbox.value)
    source_map.data = dict(map_options=[GMapOptions(lat=lat, lng=lon, map_type="roadmap", zoom=zoom)])
    source_gps.data = dict(lat=[30.29 + random.random() / 10 - 0.05, 30.20, 30.29],
                           lon=[-97.70 + random.random() / 10 - 0.05, -97.74, -97.78])


for w in [zoom_slider, lat_textbox, lon_textbox]:
    w.on_change('value', update_data)

# Set up layouts and add to document
inputs = column(zoom_slider, lat_textbox, lon_textbox)

curdoc().add_root(row(inputs, p, width=800))
curdoc().title = "Google Map"

Я ожидаюGoogle Map для увеличения в соответствии со значением ползунка масштабирования, но это статично.Есть идеи?

ОБНОВЛЕНО !!Благодаря bigreddot, это рабочий код:

from bokeh.io import curdoc
from bokeh.layouts import row, column
from bokeh.models import ColumnDataSource, GMapOptions
from bokeh.plotting import gmap
from bokeh.models.widgets import Slider, TextInput
import random

text = TextInput(title="title", value='my sine wave')

zoom_slider = Slider(title='Zoom Level', value=11, start=0, end=20, step=1)
lat_textbox = TextInput(title='Latitude', value='30.2861')
lon_textbox = TextInput(title='Longitude', value='-97.7394')

source_gps = ColumnDataSource(data=dict(lat=[30.29, 30.20, 30.29], lon=[-97.70, -97.74, -97.78]))
initial_map_options = GMapOptions(lat=30.2861, lng=-97.7394, map_type="roadmap", zoom=11)

p = gmap("YOUR GOOGLE API CREDENTIALS HERE", 
map_options=initial_map_options, title="Austin")
p.circle(x="lon", y="lat", size=15, fill_color="blue", fill_alpha=0.8, source=source_gps)


def update_data(attrname, old, new):
    zoom = zoom_slider.value
    lat = float(lat_textbox.value)
    lon = float(lon_textbox.value)
    source_gps.data = dict(lat=[30.29 + random.random() / 10 - 0.05, 30.20, 30.29],
                       lon=[-97.70 + random.random() / 10 - 0.05, -97.74, -97.78])
    p.map_options = GMapOptions(lat=lat, lng=lon, map_type="roadmap", zoom=zoom)


for w in [zoom_slider, lat_textbox, lon_textbox]:
    w.on_change('value', update_data)

# Set up layouts and add to document
inputs = column(zoom_slider, lat_textbox, lon_textbox)

curdoc().add_root(row(inputs, p, width=800))
curdoc().title = "Google Map"

1 Ответ

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

Параметры карты, т.е. уровень масштабирования, являются свойством графика , а не источника данных.Если вы хотите обновить параметры карты, вам нужно сделать что-то вроде:

p.map_options = new_map_options

где-нибудь в вашей функции обновления.

...