我正在尝试通过以下一些教程来学习sentinelsat。部分代码是这样的。
import rasterio as rio
import geopandas as gpd
nReserve = gpd.read_file('NReserve/NaturalReserve_Polygon.shp')
nReserve_proj = nReserve.to_crs({'init': 'epsg:32633'})
with rio.open("RGB.tiff") as src:
out_image, out_transform = rio.mask.mask(src, nReserve_proj.geometry,crop=True)
out_meta = src.meta.copy()
out_meta.update({"driver": "GTiff",
"height": out_image.shape[1],
"width": out_image.shape[2],
"transform": out_transform})
with rio.open("RGB_masked.tif", "w", **out_meta) as dest:
dest.write(out_image)
行out_image, out_transform = rio.mask.mask(src, nReserve_proj.geometry,crop=True)
给我错误。错误如下——
AttributeError Traceback (most recent call last)
<ipython-input-45-c1fc22fa2c5d> in <module>()
2
3 with rio.open("RGB.tiff") as src:
----> 4 out_image, out_transform = rio.mask.mask(src, nReserve_proj.geometry,crop=True)
5 out_meta = src.meta.copy()
6 out_meta.update({"driver": "GTiff",
AttributeError: module 'rasterio' has no attribute 'mask'
但是rasterio的文档显示存在rasterio.mask()。From doc——
rasterio.mask.mask(dataset, shapes, all_touched=False, invert=False, nodata=None, filled=True, crop=False, pad=False, pad_width=0.5, indexes=None)
这里出了什么问题?我是新来的,所以我不知道该检查什么。
需要从rasterio.mask
中导入mask
。您还需要更改调用函数的行,使其为mask
而不是rio.mask.mask
。
import rasterio as rio
import geopandas as gpd
from rasterio.mask import mask
nReserve = gpd.read_file('NReserve/NaturalReserve_Polygon.shp')
nReserve_proj = nReserve.to_crs({'init': 'epsg:32633'})
with rio.open("RGB.tiff") as src:
out_image, out_transform = mask(src, nReserve_proj.geometry,crop=True)
out_meta = src.meta.copy()
out_meta.update({"driver": "GTiff",
"height": out_image.shape[1],
"width": out_image.shape[2],
"transform": out_transform})
with rio.open("RGB_masked.tif", "w", **out_meta) as dest:
dest.write(out_image)