首页 > 解决方案 > Rasterio rasterize 功能:无法插入正确的几何图形

问题描述

尝试使用 Rasterio 库中的 rasterize 函数对具有特定属性的折线 shapefile 进行光栅化。这个函数需要一个包含 (geometry, value) 元组的可迭代对象,其中几何是一个类似 GeoJSON 的对象(参见文档)。这个几何可以用 fiona 或 geopandas 提取,我读过这个问题并尝试过(所以用 geopandas)但是几何不正确,因为我用“is_valid_geom”测试它,结果是“假”,这似乎是合乎逻辑的因为当我打印这个几何图形时,它会显示:<generator object <genexpr> at 0x000001903856C048>。我也像这样尝试过 Fiona:

shapeee = fiona.open(shapefile) 
geom_fiona = [shapes['geometry'] for shapes in shapeee]
attrib_fiona = [shapes['properties']['OBJECTID'] for shapes in shapeee] # attribute
print(features.is_valid_geom(geom_fiona)) # FALSE

这也返回“false”,但我不明白为什么,因为几何似乎是正确的:

print(geom_fiona)
"[{'type': 'LineString', 'coordinates': [(177421.98120000213, 142766.21020000055), (177409.1555000022, 142781.71609999985), (177392.76659999788, 142801.65300000086) and so on..."

所以最后,当我尝试光栅化时,我没有收到任何错误消息,但输出是一个空白图像,所有值都为 0... 光栅化代码:

tuples = []
for i in range(0,len(geom_fiona)-1,1):
    tuples.append([geom_fiona[i],attrib_fiona[i]])
burned = features.rasterize(tuples, out_shape=new_dataset.shape,default_value=-99,dtype=rasterio.float64)

注意:我已经读过这个并且我的 shapefile 和用于分级的栅​​格之间的投影是相同的

任何人都知道可能是什么问题?

标签: pythongeopandasrasteriofiona

解决方案


几何实际上是有效的!features.is_valid_geom(geom_fiona)返回false是因为我将整个几何图形作为参数。写作features.is_valid_geom(geom_fiona[0])归来True。但是光栅化仍然不正确,没有任何改变......


推荐阅读