Neues Raster mit con () Skript mit ArcPy erstellen?


8

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")

Die Zeile, in der Sie sagen 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.
Fezter

Leider kann ich die Überschreibfunktion immer noch nicht zum Laufen bringen - True hat das gleiche Ergebnis wie TRUE und 1 und ich erhalte den Fehler. OutRaster.save ("C: / ...") RuntimeError: ERROR 000871: C: ....: Ausgabe kann nicht gelöscht werden ?????????????????? Noch mehr Ideen?
user12433

Antworten:


6

Ich denke, das Problem liegt bei diesem Ausdruck

OutRaster = Con((inRaster <= var[0])&(inRaster <= var[1]),1)

Con erwartet das folgende Format

Con (in_conditional_raster, in_true_raster_or_constant, {in_false_raster_or_constant}, {where_clause})

Welches in deinem Fall

Con((inRaster <= var[0])&(inRaster <= var[1]),1)

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.

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein

Übrigens, wie groß ist der Wertebereich im ursprünglichen Raster?


Vielen Dank für Ihre Antwort - ich fühle mich jetzt ziemlich dumm. Ich denke, während ich verschiedene Dinge mit dem Code ausprobiert habe, habe ich es geschafft, das Größer-als-Zeichen in ein Kleiner-als umzuwandeln, und ich hatte es nicht aufgegriffen. Wenn ich den Code in: InConRaster = ((inRaster <= var [0]) & (inRaster> = var [1])) OutRaster = Con (InConRaster, 1) ändere, funktioniert er. Vielen Dank für den Format-Tipp. Nur zu Ihrer Information, als ich es mit dem richtigen Vorzeichen versuchte, aber den Ausdruck nicht änderte, funktionierte es immer noch nicht, so dass es so aussieht, als ob dies das Format ist, das benötigt wird. Wirklich dankbar für die Hilfe. Vielen Dank
user12433

Gern geschehen :) Vergessen Sie nicht, auf das Häkchen zu klicken ;-)
RK
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.