【发布时间】:2021-05-19 18:26:31
【问题描述】:
我有一个大型 dask 数组 (labeled_arr),它实际上是一个带标签的光栅图像(dtype 是 int64)。我想使用 rasterio 将标记的区域转换为多边形并将它们组合成一个多边形列表(或只有一个几何列的 geoseries)。这是单个数组上的一项简单任务,但我无法弄清楚如何告诉 dask 我希望它对每个块执行此操作并返回不是数组的内容。
应用于每个块的函数:
def get_polys(labeled_blocks):
polys = list(poly[0]['coordinates'][0] for poly in rasterio.features.shapes(
labeled_blocks.astype('int32'), transform=trans))[:-1]
# Note: rasterio.features.shapes returns an iterator, hence the conversion to a list here
return polys
试图让 dask 执行此操作的代码行:
test_polygons = da.blockwise(get_polys, '', labeled_arr, 'ij')
test_polygons.compute()
labeled_arr 是输入的分块 dask 数组。
按原样运行会返回一个错误,提示我必须为da.blockwise 指定一个数据类型。指定 dtype 会返回 AttributeError,因为输出列表类型没有 dtype 属性。我发现了 meta 关键字,但仍然无法获得正确的语法来将我的输出转换为系列或列表。
我不喜欢上述方法,但我的首要目标是:获取一个标记的、分块的 dask 数据数组(它并不都适合内存),根据每个块的计算提取一个列表,并生成一个连接的列出原始分块数组中所有块的输出(或 pandas 数据对象)。
【问题讨论】:
标签: python geospatial dask rasterio