Mehr

Stapelverarbeitung Oberflächenvolumenberechnung in ArcMap?


Ich versuche, die 2D-Fläche, 3D-Fläche und das Volumen eines bestimmten Beckens in 0,5-Meter-Schritten in der Ebenenhöhe zu erfassen, aber da ich die Beziehung zwischen der Ebenenhöhe und den Flächen und dem Volumen grafisch darstellen möchte, möchte ich viele viele Punkte sammeln .

Dies einzeln zu tun ist mühsam. Ich frage mich, ob es einen Python-Code gibt, mit dem ich eine ganze Reihe von Ebenenhöhen gleichzeitig verarbeiten und die Ergebnisse in einer .txt-Datei oder Excel-Datei zusammenfassen kann.

Derzeit verwende ich den Code

import arcpy text="c:document
iverside	ext.txt" arcpy.SurfaceVolume_3d("watersheddem",text,"BELOW",250,1,1)

Aber dieser Code erlaubt mir nur, das Ergebnis in der Seitenleiste zu lesen. Wenn ich die Datei text.txt tatsächlich überprüfe, ist sie leer, auch wenn mein arcpy.surfacevolume_3d erfolgreich ausgeführt wurde.


Dieses Tool durchläuft eine Reihe von benutzerdefinierten Werten und schreibt die Ausgaben in eine Textdatei. Die Arctoolbox-Tool-Version erhalten Sie hier https://github.com/gerry1138/ArcGIS-Loop-Surface-Volumes

try: import sys, arcpy, traceback arcpy.CheckOutExtension("3D") arcpy.AddMessage( "Multi-Volumes for ArcGIS 10") arcpy.AddMessage("Loop the 3D Analytist Surface Volume tools for a range of values…") def GetValues(themessage, x): thevaluesatx = str(x) themessage = themessage.split("
") thevalues ​​= themessage[2].split(" ") für Element in thevalues: thevalue = item.split("=" ) thevalue = thevalue[-1] thevaluesatx = thevaluesatx + "," + str(thevalue) thevaluesatx = thevaluesatx +"
" arcpy.AddMessage(thevaluesatx) return thevaluesatx #My_txt = r"Z:GISpublicGerryGaaaa. txt" #My_surface= r"I:SurfaceModelsUSGS_DEMldeltagrid5ft" #direction = "above" #startingplane = 0 #z = 1 #y = .5 #q = 2 My_surface= arcpy.GetParameterAsText(0) My_txt = arcpy .GetParameterAsText(1) Richtung = arcpy.GetParameterAsText(2) Startebene = float(arcpy.GetParameterAsText(3)) z = float(arcpy.GetParameterAsText(4)) Teilung = float(arcpy.GetParameterAsText(5)) Endebene = float( arcpy.GetParameterAsText(6)) di rection = direction.upper() f = open(My_txt,'a') f.writelines(r"elevation, 2d_area, 3d_area, volume" + "
") arcpy.AddMessage("Bitte warten, dieses Skript wird verarbeitet… ") if direction == "BELOW": arcpy.AddMessage("startingplane = " +str(startingplane)) arcpy.AddMessage("endingplane = " +str(endingplane)) while Startingplane > endingplane: arcpy.AddMessage("Ergebnisse erhalten … ") result = arcpy.SurfaceVolume_3d(My_surface, "", Richtung, Startebene, z) thevaluesatx = GetValues(result.getMessages(0), Startebene) f.writelines(thevaluesatx) Startebene = Startebene - Teilungen wenn Richtung == "ABOVE ": arcpy.AddMessage("Wird oben ausgeführt…") x = Startebene während Startebene < Endebene: Ergebnis = arcpy.SurfaceVolume_3d(My_surface, "", Richtung, Startebene, z) thevaluesatx = GetValues(result.getMessages(0), Startebene) print thevaluesatx f.writelines(thevaluesatx) Startebene = Startebene + Graduierungen f.close() arcpy.AddMessage("Fertig ohne Fehler!") außer arc py.ExecuteError: msgs = arcpy.GetMessages(2) arcpy.AddError(msgs) außer: tb = sys.exc_info()[2] tbinfo = traceback.format_tb(tb)[0] pymsg = "PYTHON-FEHLER:
Traceback-Info :
" + tbinfo + "
Fehlerinfo:
" + str(sys.exc_info()[1]) msgs = "ArcPy ERRORS:
" + arcpy.GetMessages(2) + "
" arcpy. AddError(pymsg) arcpy.AddError(msgs)