我已经尝试使用 Python 在底图(Google 地图或 Mapbox)上绘制 TIF 文件几天了。我不知道这是否真的可能,因为我没有找到示例,也没有什么非常清楚的内容,我发现最多的是如何在底图上绘制矢量文件(shp),但没有关于栅格的信息。
我有一个 EPSG:4326 格式的栅格 (rainfall_clipped.tif),我尝试使用 Contextily 包将其绘制在 MapBox 地图的顶部。起初我怀疑这可能是投影问题,但即使转换为 EPSG:3857,它也不起作用。在文档中 Contextily 说它接受这两种投影。
Contextily 似乎理解投影,即使它生成具有正确轴的地图,但最大的问题是它没有在地图上绘制 TIF 文件。它还读取光栅,因为它加载了正确值的颜色条。我不知道是图层顺序错误还是其他原因。
下面是我正在使用的代码,然后是正在生成的图像:
data = rasterio.open("rainfall_clipped.tif")
# Read the bounds
left, bottom, right, top = data.bounds
# Create a figure and axes
fig, ax = plt.subplots(figsize=(10, 10))
# Add the raster data to the plot using imshow
im = ax.imshow(data.read(1), extent=[left, right, bottom, top], cmap="Blues")
# Add a colorbar
fig.colorbar(im, ax=ax)
# Add a basemap using contextily
ctx.add_basemap(ax, crs=data.crs, source=ctx.providers.MapBox(accessToken="my_key", id="mapbox/satellite-v9"))
# Show the plot
plt.show()
此代码正在生成此图像: 输出图像
我想做的是如下所示: 预期的图像
有什么建议我可以做什么吗?
我遇到了同样的问题,并通过使用 contextily 的 add_basemap() 函数(即 source="rainfall_clipped.tif")而不是使用 imshow() 添加本地栅格(geotiff)找到了解决方案。