1

我试图在地图上叠加交互式数据着色器图,我只得到“地图数据尚不可用”背景而不是地图背景。我尝试过不同的地图服务和不同的地图,但都没有奏效。这是我为类似数据集找到的代码:

import bokeh.plotting as bp
from bokeh.models.tiles import WMTSTileSource
bp.output_notebook()

def base_plot(tools='pan,wheel_zoom,reset',webgl=False):
    p = bp.figure(tools=tools,
        plot_width=int(850), plot_height=int(500),
        x_range=x_range, y_range=y_range, outline_line_color=None,
        min_border=0, min_border_left=0, min_border_right=0,
        min_border_top=0, min_border_bottom=0, webgl=webgl)

    p.axis.visible = False
    p.xgrid.grid_line_color = None
    p.ygrid.grid_line_color = None

    return p

-

background = "black"
from datashader.bokeh_ext import InteractiveImage

def image_callback(x_range, y_range, w, h, color_fn=tf.shade):
    cvs = ds.Canvas(plot_width=w, plot_height=h, x_range=x_range, y_range=y_range)
    agg = cvs.points(df, 'Dropoff_longitude', 'Dropoff_latitude', ds.count('Passenger_count'))
    image = color_fn(agg)
    return tf.dynspread(image,threshold=0.75, max_px=8)
    #return(image)

p = base_plot()

url="https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{Z}/{Y}/{X}.png"
#url="http://tile.stamen.com/toner-background/{Z}/{X}/{Y}.png"
tile_renderer = p.add_tile(WMTSTileSource(url=url))
tile_renderer.alpha=1.0 if background == "black" else 0.15

InteractiveImage(p, image_callback)

以下是它查看输出的方式:

输出截图

有谁知道为什么会这样?

提前致谢!

4

1 回答 1

2

在我看来,您将源数据视为裸露的纬度和经度(数字如 -75.2),并试图用使用 Web 墨卡托坐标索引的图像图块(如 -8235000 的数字)覆盖它。然后,地图切片源会正确报告该分辨率没有可用的图像数据。如果您缩小一百万左右,您会看到地图图块,但它们不会与数据对齐。由于 Bokeh 仅在使用瓦片源时支持 Web Mercator 坐标,因此如果您想用地图瓦片覆盖数据,则需要在对其运行 datashader 之前将数据投影到 Web Mercator 中。您可以datashader.utils.lnglat_to_meters()用于此目的;有关详细信息,请参阅其文档字符串。一旦事情被预测出来,你的例子就可以正常工作:

截屏

于 2017-06-12T19:06:17.507 回答