Как << требовать («ядро / утилита / проекции») >> с сервером Bokeh? - PullRequest
0 голосов
/ 08 октября 2018

Если я запускаю этот пример в лаборатории jupyter, то она отлично работает

from bokeh.io import output_notebook, show, push_notebook
from bokeh.models import HoverTool, CustomJSHover
from bokeh.tile_providers import CARTODBPOSITRON
from bokeh.plotting import figure
output_notebook()

# range bounds supplied in web mercator coordinates
p = figure(x_range=(-2000000, 6000000), y_range=(-1000000, 7000000),
        x_axis_type="mercator", y_axis_type="mercator")
p.add_tile(CARTODBPOSITRON)

p.circle(x=[0, 2000000, 4000000], y=[4000000, 2000000, 0], size=30)

code = """
    var projections = require("core/util/projections");
    var x = special_vars.x
    var y = special_vars.y
    var coords = projections.wgs84_mercator.inverse([x, y])
    return coords[%d].toFixed(2)
"""

p.add_tools(HoverTool(
    tooltips=[
        ( 'lon',   '@x{custom}' ),
        ( 'lat',   '@y{custom}' ),
    ],

    formatters={
        'x' : CustomJSHover(code=code % 0),
        'y' : CustomJSHover(code=code % 1),
    }
))

show(p)

enter image description here

Но если я запускаю пример с подачей bokeh, я получаю ошибку Uncaught Error: Cannot find module 'core/util/projections'

from bokeh.io import curdoc
from bokeh.models import HoverTool, CustomJSHover
from bokeh.plotting import figure
from bokeh.tile_providers import CARTODBPOSITRON

# range bounds supplied in web mercator coordinates
p = figure(x_range=(-2000000, 6000000), y_range=(-1000000, 7000000),
        x_axis_type="mercator", y_axis_type="mercator")
p.add_tile(CARTODBPOSITRON)

p.circle(x=[0, 2000000, 4000000], y=[4000000, 2000000, 0], size=30)

code = """
    var projections = require("core/util/projections");
    var x = special_vars.x
    var y = special_vars.y
    var coords = projections.wgs84_mercator.inverse([x, y])
    return coords[%d].toFixed(2)
"""

p.add_tools(HoverTool(
    tooltips=[
        ( 'lon',   '@x{custom}' ),
        ( 'lat',   '@y{custom}' ),
    ],

    formatters={
        'x' : CustomJSHover(code=code % 0),
        'y' : CustomJSHover(code=code % 1),
    }
))

curdoc().add_root(p)

Я что-то пропустил?Нужно ли мне адаптировать вызов require при запуске сценария с bokeh serve?Я не вижу ни одного примера с bokeh serve в папке examples

Мои версии

Python version      :  3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)]
IPython version     :  6.5.0
Tornado version     :  5.1
Bokeh version       :  1.0.0dev8
node.js version     :  v8.11.3

Обновление 9 октября

Собственно я скомпилировали установил Боке из почтового релиза .Я получаю сообщение об ошибке 404, потому что URL-адрес файла js представляет собой конкатенацию URL-адреса с локальным путем

http://localhost:5006/static/js/C:/path_to_bokeh_folder/bokeh/bokehjs/node_modules/tslib/tslib.js

Боюсь, я что-то не так сделал при установке bokeh.Я следовал этому руководству

Я использую Windows 10

Обновление 10 октября

Спасибо @Torus, я установил BOKEH_RESOURCES=server-dev переменную среды,но модуль не может быть найден ни одним.

Для дополнительной информации: я установил bokeh с:

python setup.py install --build-js

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

BOKEH_BROWSER=none
BOKEH_LOG_LEVEL=debug
BOKEH_MINIFIED=false
BOKEH_PRETTY=true
BOKEH_PY_LOG_LEVEL=debug
BOKEH_RESOURCES=server-dev              # this is the most important as you pointed, to get the right paths
BOKEH_SIMPLE_IDS=true

Но я все еще получаю ту же ошибку, модуль не может быть найден:

Cannot find module 'core/util/projections'

Вывод

Я думаю, что что-то не так, когда я строю боке вручную,потому что, если я устанавливаю его обычным способом: pip install bokeh, когда я делаю require("core/util/projections") работает нормально.

Есть ли другой способ преобразовать координаты в «проекцию меркатора» ?.Должен ли я создать еще один столбец CDS и выполнить преобразование в Python?

1 Ответ

0 голосов
/ 10 октября 2018

Вы используете BOKEH_RESOURCES = absolute-dev или BOKEH_DEV = true.Он не работает с сервером Bokeh.

Запустите BOKEH_RESOURCES=server-dev bokeh serve your_script.py , чтобы заставить Bokeh правильно выбирать ресурсы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...