Ich habe Probleme bei der Verwendung der Polygonize-Funktion in Python. Das Kochbuchbeispiel hierfür finden Sie hier .
Der relevante Teil meines Codes ist:
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
Ich weiß, dass die Band relevante Informationen hat, hier ein Ausschnitt aus 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.],
Wenn ich die Attributtabelle in QGIS öffne, ist sie leer:
Bearbeiten:
Die Konvertierung funktioniert in QGIS mit dem Werkzeug Raster -> Konvertierung -> Polygonisieren einwandfrei
Screenshot des zu polygonisierenden Rasters:
Und Screenshot der resultierenden Konvertierung vom QGIS-Tool:
Ich verwende die Enthought-Distribution unter Windows 7, GDAL Version 1.10.0-3
Das Problem ist, dass ich ein Raster in Python mit GDAL und dem Kochbuchbeispiel nicht polygonisieren kann. Ich kann dasselbe Raster ohne Probleme in der QGIS-GUI polygonisieren
Antworten:
Das Problem ist, dass ich kein Feld zum Speichern des Rasterbands erstellt habe. Nachdem ich die Datei gdal_polygonize.py durchgesehen hatte, stellte ich fest, dass dies beim Aufruf von gdal.Polygonize, das stattdessen die hier gefundene Funktion verwendet, nicht automatisch erfolgt .
Hier ist der zusätzliche Schritt, der erforderlich ist, um ein Feld zu erstellen und ein Band in das Feld zu schreiben:
Wir können dann das Band mit einem Index von 0 in dieses Feld schreiben:
quelle