Ich bin neu in Python und habe versucht, ein Skript im Raster-Rechner-Stil zu codieren. Grundsätzlich möchte ich ein Raster mit den Werten 0 bis -10.000 in ein Raster konvertieren, das zwischen bestimmten Werten mit 1s gefüllt ist.
Der Grund, warum ich dies in Python tun möchte, ist, dass ich diesen Prozess schließlich automatisieren möchte, damit ich verschiedene Werte (dh 0 bis -10, -5 bis -25 usw.) auswählen und für jeden ein Raster von 1s erhalten kann . Mein Ziel ist es dann, diese in Polygone umzuwandeln, damit ich dann eine Reihe von Vektorclip-Operationen über ungefähr 800 Shapefiles ausführen kann.
Ich habe ein Skript geschrieben, das am Ende ein neues Raster erzeugt, aber anstatt dass dieses Raster mit 1s gefüllt ist, hat es die Werte 0-256, also gibt es irgendwo in meinem Code einen Fehler. Ich wäre dankbar, wenn jemand es erkennen könnte! Wenn jemand eine Möglichkeit hat, den Code zu beschleunigen, oder eine bessere Idee, wie ich das alles auch machen kann, dann wäre das auch interessant zu wissen.
Hier ist mein Code:
import arcpy
from arcpy import env
from arcpy.sa import *
arcpy.env.overwriteOutput = 1 #this also doesn't work by the way, I have also tried
#TRUE, no errors come up but it still doesn't let me overwrite the output file
#Set environment settings
env.workspace = "C:/folderlocation where inRaster is stored"
# Set local variables
inRaster = Raster("inputraster")
# Check out Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# depths wanted from inputraster raster
var = [-2500,-3000] #min depth, max depth
#Execute and save Con
OutRaster = Con((inRaster <= var[0])&(inRaster <= var[1]),1)
OutRaster.save("C:/drivelocation/outputfilename")
quelle
arcpy.env.overwriteOutput = 1
, versuchen Sie es mit:arcpy.env.overwriteOutput = True
Python unterscheidet zwischen Groß- und Kleinschreibung und in Ihren Kommentaren haben Sie WAHR.Antworten:
Ich denke, das Problem liegt bei diesem Ausdruck
Con erwartet das folgende Format
Welches in deinem Fall
kann zerlegt werden in
in_conditional_raster,
(inRaster <= var[0])&(inRaster <= var[1])
in_true_raster_or_constant,
1
Ich bin etwas verwirrt darüber, was Sie versuchen zu tun. Sie möchten die Werte, die beiden der folgenden Kriterien entsprechen, in 1 verwandeln
inRaster <= -2500
inRaster <= -3000
Diese beiden Ausdrücke können auf reduziert werden
inRaster <= -3000
.Alle Pixel mit Werten kleiner oder gleich -3000 wurden auf 1 gesetzt. Der Rest bleibt unverändert. Zumindest sagt das Ihr Code. Es gibt jedoch keine Möglichkeit, dies sicher zu wissen, es sei denn, Sie veröffentlichen die Attributtabelle dieses Rasters oder die eigentliche Rasterdatei selbst.
Ich denke du meintest
(inRaster <= var[0])&(inRaster > var[1])
. Auf diese Weise würden Sie Werte zwischen -2500 und -3000 abfangen.Übrigens, wie groß ist der Wertebereich im ursprünglichen Raster?
quelle