You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Plotly Express scatter_mapbox中使用本地GeoTIFF文件作为底图图层?

如何在Plotly scatter_mapbox中加载本地GeoTIFF作为栅格图层

嘿,这个问题我之前也碰到过——Plotly的Mapbox图层确实不支持直接加载本地GeoTIFF文件,因为它的栅格图层依赖的是瓦片服务(比如WMTS)或者Mapbox托管的瓦片集,本地文件路径没法直接被解析。不过咱们可以通过两步解决:先把GeoTIFF转成Mapbox兼容的瓦片,再用本地服务器提供这些瓦片。

步骤1:将GeoTIFF转换为Mapbox兼容的XYZ瓦片

Mapbox的栅格图层需要的是按{z}/{x}/{y}结构组织的瓦片文件,我们可以用GDAL的gdal2tiles.py工具来完成转换(GDAL是GIS领域常用的开源工具,你可以通过conda或pip安装)。

打开终端,运行以下命令:

# 替换your_flood.tif为你的本地GeoTIFF路径,flood_tiles是输出瓦片的文件夹
gdal2tiles.py -z 5-12 -s EPSG:3857 your_flood.tif flood_tiles

参数说明:

  • -z 5-12:指定生成的瓦片缩放级别(从5级到12级,你可以根据数据范围调整)
  • -s EPSG:3857:强制将GeoTIFF转换为Web Mercator投影(Mapbox的标准投影)
  • flood_tiles:输出文件夹,里面会自动生成按缩放级别、x、y分类的瓦片文件

步骤2:启动本地静态文件服务器

Plotly需要通过HTTP协议访问瓦片文件,所以我们要把刚才生成的瓦片文件夹变成一个静态文件服务。用Python自带的http.server就能快速搞定:

在终端中切换到瓦片文件夹的上级目录,然后运行:

python -m http.server 8000

这会在本地8000端口启动一个服务器,瓦片的访问路径会是http://localhost:8000/flood_tiles/{z}/{x}/{y}.png(如果生成的是jpg格式就换成.jpg)。

步骤3:修改Plotly代码加载本地瓦片

把你原来的WMTS图层代码替换成下面的内容,核心是修改source为本地服务器的瓦片URL:

import geopandas as gpd
import plotly.express as px

gdf = gpd.read_file(asset_path, layer='kast')
gdf = gdf.to_crs('EPSG:4326')
fig = px.scatter_mapbox(gdf, lat=gdf.geometry.y, lon=gdf.geometry.x, color='waterdepth_48hr')

fig.update_mapboxes(
    accesstoken=mapbox_token,
    layers=[{
        'below': 'traces',
        'sourcetype': 'raster',
        # 替换为你的本地瓦片URL
        'source': ['http://localhost:8000/flood_tiles/{z}/{x}/{y}.png']
    }],
    style='white-bg'
)

fig.show()

额外注意事项

  • 确保你的GeoTIFF数据范围和瓦片缩放级别匹配,避免加载不出瓦片
  • 如果是很小范围的GeoTIFF(比如单张图片就能覆盖),也可以把它转成Base64编码后直接作为source,但这种方法只适合小文件,大文件还是用瓦片更高效
  • 本地服务器启动后不要关闭,否则Plotly无法访问瓦片

内容的提问来源于stack exchange,提问作者Jochem 't Hart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 08:23:10