我使用运行龙卷风web服务器的python创建了自定义平铺源提供程序。在服务器上,我动态生成特定的平铺,并将其输出为“image/png”头格式。为了防止阻塞,我在异步模式下完成了所有服务器工作。现在我看到服务器上出现了一些错误:“任务已被破坏,但它正在等待!”。
为了确定是否存在Python/tornado问题,我通过直接从Python代码运行大量平铺请求(使用与mapbox源代码相同的url)进行了测试。所有结果都返回了HTTP响应结果200OK,因此python代码可以正常运行。
最后,我发现可能mapbox js tile源没有正确定义,或者它的超时太快,在成功完成之前取消了请求。
这是用于添加光栅平铺源的javascript代码:
mapbox_obj.on('load', function(){ mapbox_obj.addSource('rad-data', { "type": "raster", "tiles": ["/tile/{x}/{y}/{z}.png"], "tileSize": 512 }); mapbox_obj.addLayer({ "id": "rad-data-layer", "type": "raster", "source": "rad-data", "minzoom": 0, "maxzoom": 20, 'layout': { 'visibility': 'visible' } }); });
Python代码动态生成平铺,并将其作为字节字符串返回:
TILE_SIZE = 512 img = Image.new('RGBA', size=(TILE_SIZE, TILE_SIZE), color=(0, 0, 0, 0)) img_b = io.BytesIO() img.save(img_b, "PNG") tile = img_b.seek(0) for line in tile: self.write(line) self.set_header("Content-type", "image/png")
大多数瓦片通常都是正确渲染的,但有些瓦片有时是不正确的,错误正如我所提到的:“任务已被破坏,但它正在等待!”。
谢谢你的帮助,托尼