Estou tendo problemas para usar a função Polygonize em python. O exemplo do livro de receitas para isso pode ser encontrado aqui .
A parte relevante do meu código é:
sourceRaster = gdal.Open('myraster.tif')
band = sourceRaster.GetRasterBand(1)
bandArray = band.ReadAsArray()
outShapefile = "polygonized"
driver = ogr.GetDriverByName("ESRI Shapefile")
if os.path.exists(outShapefile+".shp"):
driver.DeleteDataSource(outShapefile+".shp")
outDatasource = driver.CreateDataSource(outShapefile+ ".shp")
outLayer = outDatasource.CreateLayer("polygonized", srs=None)
gdal.Polygonize( band, None, outLayer, -1, [], callback=None )
outDatasource.Destroy()
sourceRaster = None
Eu sei que a banda tem informações relevantes, aqui está um trecho de bandArray
:
array([[ 4., 4., 3., 3., 3., 2., 2., 2., 2., 3., 3., 3., 3.,
3., 3., 3., 3., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4.],
Quando abro a tabela de atributos no QGIS, ela está vazia:
Editar:
A conversão funciona bem no QGIS usando a ferramenta Raster -> Conversion -> Polygonize
Captura de tela da varredura a ser poligonizada:
E captura de tela da conversão resultante da ferramenta QGIS:
Estou usando a distribuição Enthought no Windows 7, GDAL versão 1.10.0-3
O problema é que não consigo poligonizar uma varredura em python usando GDAL e o exemplo do livro de receitas, posso poligonizar essa mesma varredura sem nenhum problema na GUI do QGIS
Respostas:
O problema é que eu não estava criando um campo para armazenar a banda raster. Depois de pesquisar no arquivo gdal_polygonize.py, percebi que isso não é feito automaticamente ao chamar gdal.Polygonize, que usa a função encontrada aqui .
Aqui está a etapa extra necessária para criar um campo e gravar uma banda no campo:
Podemos então gravar a banda nesse campo, com um índice de 0:
fonte