如何使用rasterio更改栅格数据的坐标参考系统?

8
我正尝试更改一份光栅TIFF文件的CRS。当我使用以下代码分配新的CRS时:
with rio.open(solar_path, mode='r+') as raster:
    raster.crs = rio.crs.CRS({'init': 'epsg:27700'})
    show((raster, 1))
    print(raster.crs)

打印函数返回“EPSG:27700”,但绘制图像后,坐标参考系统(CRS)显然并没有更改?
2个回答

10
与Geopandas不同,当更改坐标参考系统时,rasterio需要手动进行重投影。
def reproject_raster(in_path, out_path):

    """
    """
    # reproject raster to project crs
    with rio.open(in_path) as src:
        src_crs = src.crs
        transform, width, height = calculate_default_transform(src_crs, crs, src.width, src.height, *src.bounds)
        kwargs = src.meta.copy()

        kwargs.update({
            'crs': crs,
            'transform': transform,
            'width': width,
            'height': height})

        with rio.open(out_path, 'w', **kwargs) as dst:
            for i in range(1, src.count + 1):
                reproject(
                    source=rio.band(src, i),
                    destination=rio.band(dst, i),
                    src_transform=src.transform,
                    src_crs=src.crs,
                    dst_transform=transform,
                    dst_crs=crs,
                    resampling=Resampling.nearest)
    return(out_path)

更多详情请访问 https://www.earthdatascience.org/courses/use-data-open-source-python/intro-raster-data-python/raster-data-processing/reproject-raster/。 - PPR
2
此代码包含多个未在任何地方定义的变量。 - patkru

0
绘图函数不会改变您数据的坐标参考系统(CRS)。您可以尝试。
from rasterio.crs import CRS
import rioxarray as rxr

raster = rxr.open_rasterio(solar_path, masked=True).squeeze()
raster_new = raster .rio.reproject(CRS.from_string('EPSG:4326'))

print(raster_new.rio.crs)     # CRS.from_epsg(4326)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接