Suite

Traitement par lots Calcul du volume de surface dans ArcMap ?


J'essaie de collecter la zone 2D, la zone 3D et le volume d'un bassin donné à un incrément de 0,5 mètre de hauteur plane, mais comme je veux représenter graphiquement la relation entre la hauteur plane et les zones et le volume, je veux collecter de nombreux points .

Faire cela un par un est fastidieux. Je me demande s'il existe un code python qui me permet de traiter tout un tas de hauteurs d'avion à la fois et de regrouper les résultats dans un fichier .txt ou un fichier excel.

actuellement, le code que j'utilise est

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

mais ce code ne me permet que de lire le résultat dans la barre latérale, lorsque je vérifie réellement le fichier text.txt, il est vide même lorsque mon arcpy.surfacevolume_3d a été exécuté avec succès.


Cet outil parcourra une plage de valeurs définies par l'utilisateur et écrira les sorties dans un fichier texte. Vous pouvez obtenir la version de l'outil Arctoolbox ici https://github.com/gerry1138/ArcGIS-Loop-Surface-Volumes

essayez : import sys, arcpy, traceback arcpy.CheckOutExtension("3D") arcpy.AddMessage("Multi-Volumes for ArcGIS 10") arcpy.AddMessage("Loop the 3D Analyist Surface Volume tools for a range of values… ") def GetValues(themessage, x): thevaluesatx = str(x) themessage = themessage.split("
") thevalues ​​= themessage[2].split(" ") pour l'élément dans 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) direction = arcpy.GetParameterAsText(2) startingplane = float(arcpy.GetParameterAsText(3)) z = float(arcpy.GetParameterAsText(4)) graduations = float(arcpy.GetParameterAsText(5)) endingplane = float( arcpy.GetParameterAsText(6)) di rection = direction.upper() f = open(My_txt,'a') f.writelines(r"elevation, 2d_area, 3d_area, volume" + "
") arcpy.AddMessage("Veuillez patienter, ce script est en cours de traitement… ") if direction == "BELOW": arcpy.AddMessage("startingplane = " +str(startingplane)) arcpy.AddMessage("endingplane = " +str(endingplane)) tout en commençantplan > endingplane: arcpy.AddMessage("Obtenir des résultats … ") résultat = arcpy.SurfaceVolume_3d(Ma_surface, "", direction, plan de départ, z) thevaluesatx = GetValues(result.getMessages(0), plan de départ) f.writelines(thevaluesatx) plan de démarrage = plan de départ - graduations si direction == " AU-DESSUS " : arcpy.AddMessage("Executing above… ") x = plan de départ pendant le plan de départ < plan de fin : résultat = arcpy.SurfaceVolume_3d(Ma_surface, "", direction, plan de départ, z) thevaluesatx = GetValues(result.getMessages(0), plan de départ) print thevaluesatx f.writelines(thevaluesatx) startingplane = startingplane + graduations f.close() arcpy.AddMessage("Terminé sans erreurs !") sauf arc py.ExecuteError : msgs = arcpy.GetMessages(2) arcpy.AddError(msgs) sauf : tb = sys.exc_info()[2] tbinfo = traceback.format_tb(tb)[0] pymsg = "PYTHON ERRORS :
Traceback info :
" + tbinfo + "
Error Info:
" + str(sys.exc_info()[1]) msgs = "ArcPy ERRORS:
" + arcpy.GetMessages(2) + "
" arcpy. AddError(pymsg) arcpy.AddError(msgs)


Voir la vidéo: Cour 3 ARCGIS 10:calculer la surface. (Octobre 2021).