使用Python在底图(Google Maps / Mapbox)上绘制栅格(GeoTIFF)时出现问题

问题描述 投票:0回答:1

我已经尝试使用 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()

此代码正在生成此图像: 输出图像

我想做的是如下所示: 预期的图像

有什么建议我可以做什么吗?

python matplotlib raster contextily
1个回答
0
投票

我遇到了同样的问题,并通过使用 contextily 的 add_basemap() 函数(即 source="rainfall_clipped.tif")而不是使用 imshow() 添加本地栅格(geotiff)找到了解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.