使用数据着色器映射背景 - "Map data not yet available"

Map background with datashader - "Map data not yet available"

我试图在地图上叠加交互式数据着色器图,但我只得到 "Map data not yet available" 背景而不是地图背景。我尝试了不同的地图服务和不同的地图,但其中 none 有效。 这是我为类似数据集找到的代码:

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)

输出结果如下:

Output screenshot

有人知道为什么会这样吗?

提前致谢!

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