微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 pydeck

如何解决在 pydeck

我正在尝试在 jupyter notebook 的 pydeck(0.5) 中加载本地 TileFile 层 我正在使用以下代码

    import pydeck as pdk
    data ='https://localhost:/home/user/myfolder/tiles/{z}/{x}/{y}.png`

    layer = pdk.Layer(
      'TileLayer',# `type` positional argument is here
      data=data
      )

    # Set the viewport location
    view_state = pdk.ViewState(
      longitude=50,latitude=50,zoom=0,min_zoom=0,max_zoom=5,pitch=40.5,bearing=-27.36)

    # Combined all of it and render a viewport
    r = pdk.Deck(layers=[layer],initial_view_state=view_state)
    r.to_html('TileLayer-example.html'

这只是在 Jupyter 中创建一个空白视图窗口,它应该在其中显示图像。 如果我将 TileLayer-example.html 独立启动到浏览器中,我也会得到一个空白窗口,但是浏览器 (Firefox) 控制台输出如下:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://localhost:/home/user/myfolder/tiles/0/0/0.png. (Reason: CORS request did not succeed).

TypeError: NetworkError when attempting to fetch resource. tile-layer.js:18:56
    value tile-layer.js:18
    value tile-layer.js:136
    t tile-2d-header.js:90
    u runtime.js:45
    _invoke runtime.js:271
    e runtime.js:97
    Babel 2
        r
        u

我不确定问题是否与 CORS 相关 (calling a local file) 或者我的数据路径是否完全错误?我尝试过路径上的可能变体,但似乎都有相同的控制台警告问题。

关于解决 CoRs 问题的简单安全方法的任何建议,或在 PyDeck 中访问本地 TileFiles 的建议将不胜感激

解决方法

对于目前希望在 Pydeck 中实现 TileLayer 的其他人。似乎 TileLayer 尚未记录或目前在 pydeck 中不受支持,只能通过自定义图层实现,请参阅此 github issue 和此建议 workaround with a custom layer

关于从 URL 调用时尝试在浏览器中显示本地文件资源的 CoR 问题。如果您正在寻找快速修复来进行测试/调试,那么在 Firefox 中:建议 here 有帮助。特别是对于 Firefox,他们建议如下:

转到 about:config 搜索privacy.file_unique_origin 将其设置为 false。

请注意,这是一个安全风险,因此请在调试后将其重置为 true。

目前似乎唯一可行的解​​决方案是将 tilefile 放在启动甲板项目的工作目录中

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。