J'ai du mal à utiliser la fonction Polygonize en python. L'exemple de livre de cuisine pour cela peut être trouvé ici .
La partie pertinente de mon code est:
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
Je sais que le groupe a des informations pertinentes, voici un extrait 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.],
Lorsque j'ouvre la table attributaire dans QGIS, elle est vide:
Éditer:
La conversion fonctionne très bien dans QGIS en utilisant Raster -> Conversion -> Outil Polygonize
Capture d'écran du raster à polygoniser:
Et capture d'écran de la conversion résultante de l'outil QGIS:
J'utilise la distribution Enthought sur Windows 7, GDAL version 1.10.0-3
Le problème est que je ne peux pas polygoniser un raster en python en utilisant GDAL et l'exemple de livre de recettes, je peux polygoniser ce même raster sans problème dans l'interface graphique QGIS
Réponses:
Le problème est que je ne créais pas de champ pour stocker la bande raster. Après avoir fouillé dans le fichier gdal_polygonize.py, j'ai réalisé que cela ne se faisait pas automatiquement lors de l'appel à gdal.Polygonize, qui utilise à la place la fonction trouvée ici .
Voici l'étape supplémentaire nécessaire pour créer un champ et écrire une bande dans le champ:
On peut alors écrire la bande dans ce champ, avec un indice de 0:
la source