使用 rasterio 屏蔽/裁剪光栅会导致 AttributeError
Posted
技术标签:
【中文标题】使用 rasterio 屏蔽/裁剪光栅会导致 AttributeError【英文标题】:Using rasterio to mask/crop a raster results in AttributeError 【发布时间】:2021-04-06 09:54:10 【问题描述】:我正在尝试使用rasterio
到mask
光栅。根据mask documentation,我需要在'r'模式下加载一个光栅文件,我已经这样做了:
file = rasterio.open('/data/corine2018_100m/test.tif')
print(file)
<open DatasetReader name='/data/corine2018_100m/test.tif' mode='r'>
我还需要一个shapes
,它是一个可迭代的类似 GeoJSON 的对象。我让 GeoJSON 从 Django PolygonField()
序列化了一个 Polygon 对象并将其添加到列表中(我对文档的“可迭代对象”的解释):
obj = newJob.objects.create(job_loc="SRID=4326;POLYGON ((0.9063720703125029 52.32023207609735, 0.8239746093749998 52.10819209746323, 1.170043945312496 52.14191683166823, 1.170043945312496 52.31351619974807, 0.9063720703125029 52.32023207609735))")
poly = [obj.job_loc.geojson]
print(poly)
[' "type": "Polygon", "coordinates": [ [ [ 0.906372070312503, 52.320232076097348 ], [ 0.823974609375, 52.108192097463231 ], [ 1.170043945312496, 52.141916831668233 ], [ 1.170043945312496, 52.313516199748072 ], [ 0.906372070312503, 52.320232076097348 ] ] ] ']
print(type(poly))
<class 'list'>
然后我尝试使用以下掩码:
masked_band, masked_transform = rasterio.mask.mask(file, poly, crop=True)
但是,我得到了错误:
AttributeError: 'str' object has no attribute 'get'
我已经尝试过following this(即将我的 JSON 添加到列表中),但我仍然收到错误消息。有人可以帮我掩盖这个栅格吗?
【问题讨论】:
【参考方案1】:问题在于,在您的示例中,您有一个字符串列表,您需要将字符串转换为字典,例如使用 json.loads(str)
如果您将poly = [obj.job_loc.geojson]
更改为poly = [json.loads(obj.job_loc.geojson)]
,那么您将获得一个字典列表。
【讨论】:
以上是关于使用 rasterio 屏蔽/裁剪光栅会导致 AttributeError的主要内容,如果未能解决你的问题,请参考以下文章
使用 Polygon 裁剪光栅文件并使用相同的文件名写入输出