2017-06-20 3 views
0

in Python, ich bin die folgende Zeile von Code verwendet:gdal.RasterizeLayer: unter Verwendung des in den Parameter

gdal.RasterizeLayer (outDs, [1], SHP burn_values ​​= [II])

Meine Shapefile 'Shp' hat ein Feld namens 'landuse', das Strings (Klassenname) speichert. Ich muss eine Nummer für verschiedene Klassennamen brennen. Ich dachte, eine "where" Klausel zu verwenden, wie: wo 'landuse' = 'neue Konzession':

for ii in range(class)):  
    gdal.RasterizeLayer(outDs, [1], Shp, burn_values=[ii], where='"landuse"="class[ii]"') 

Parameter "where" scheint nicht erkannt zu werden. Wie kann ich es an diese Funktion weitergeben? Ich nehme an, es ist verfügbar, nach der C-API doc: http://gdal.org/python/osgeo.gdal-module.html#RasterizeOptions

Antwort

1

RasterizeLayer ist ein bisschen ein Schmerz, 'schnell' durchzuführen, so ist dies ohne zu testen.

Ich sehe zwei mögliche Probleme. Basierend auf Ihrem Beispielcode legen Sie nicht den gewünschten Landnutzungswert fest, sondern übergeben die "class[ii]" als Zeichenfolge. Das würde bedeuten, dass GDAL die Merkmale auswählt, bei denen das Landnutzungsattribut "class[ii]" ist (wörtlich diese Zeichenkette). Verwenden String Formatierung der Ist-Wert einzufügen, so etwas wie:

for ii in range(class)):  
    gdal.RasterizeLayer(outDs, [1], Shp, burn_values=[ii], where='"landuse"="{class}"'.format(class=class[ii])) 

Zweitens, wenn RasterizeLayer verwenden, haben Sie wahrscheinlich eine Schicht als Eingang zur Verfügung stellen sollte, nicht eine Shape-Datei, wie Sie zu vorschlagen scheinen. Laden Sie die Ebene entweder aus Ihrer Shapefile oder verwenden Sie Rasterize.

gdal.Rasterize(outds, dataset) 
gdal.RasterizeLayer(outds, layer) 
0

Ich bin mir nicht sicher über die RasterizeOptions und wo nicht funktioniert (ungültiges Schlüsselwort), aber es scheint, wie Sie die where-Klausel in die SHP mit SetAttributeFilter hinzufügen:

for ii in range(class)): 
    Shp.SetAttributeFilter("landuse='{}'".format(class[ii])) 
    gdal.RasterizeLayer(outDs, [1], Shp, burn_values=[ii]) 
Verwandte Themen