#01/10/2012
#Script to automate terrain analysis
#Kate Lyndegaard
#++++++++++++++++++++++++++++++++++++++++++++++++
import arcpy
import os
import traceback
import sys
import fnmatch
from arcpy.sa import *
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
#DEM
demPath = arcpy.GetParameterAsText(0)
#Output folder
outputFolder = arcpy.GetParameterAsText(2)
#Set workspace
arcpy.env.workspace = arcpy.GetParameterAsText(1)
try:
# Execute Int
outDEM = Int(demPath)
# Save the output
outDEM.save("outDEM")
#Split raster
arcpy.SplitRaster_management(outDEM, outputFolder, "Tile", "SIZE_OF_TILE", "GRID", "BILINEAR", "", "5280 5280","","FEET")
except:
# Get the traceback object
#
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
# Concatenate information together concerning the error into a message string
#
pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages(2) + "\n"
# Return python error messages for use in script tool or Python Window
#
arcpy.AddError(pymsg)
arcpy.AddError(msgs)
try:
#Output folder
outputFolder = arcpy.GetParameterAsText(2)
#Set workspace
arcpy.env.workspace = outputFolder
demList = arcpy.ListRasters()
for dem in demList:
elevSTDresults = arcpy.GetRasterProperties_management(dem,"STD")
elevSTD = elevSTDresults.getOutput(0)
elevSTDNUM = float(elevSTD)
if elevSTDNUM < 66:
arcpy.env.workspace = outputFolder
arcpy.Rename_management(dem, "flat_" + dem)
elif elevSTDNUM > 66 and elevSTDNUM < 328:
arcpy.env.workspace = outputFolder
arcpy.Rename_management(dem, "phill_" + dem)
elif elevSTDNUM > 328:
arcpy.env.workspace = outputFolder
arcpy.Rename_management(dem, "hill_" + dem)except:
# Get the traceback object
#
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
# Concatenate information together concerning the error into a message string
#
pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages(2) + "\n"
# Return python error messages for use in script tool or Python Window
#
arcpy.AddError(pymsg)
arcpy.AddError(msgs)
try:
#Output folder
outputFolder = arcpy.GetParameterAsText(2)
#Set workspace
arcpy.env.workspace = outputFolder
demList1 = arcpy.ListRasters()
for dem in demList1:
if fnmatch.fnmatch(dem,"flat_*"):
arcpy.env.workspace = outputFolder
arcpy.RasterToPolygon_conversion(outputFolder + "\\" + dem, outputFolder+ "\\" + dem +".shp", "SIMPLIFY")
elif fnmatch.fnmatch(dem,"phill_*"):
arcpy.env.workspace = outputFolder
arcpy.RasterToPolygon_conversion(outputFolder + "\\" + dem, outputFolder+ "\\" + dem +".shp", "SIMPLIFY")
elif fnmatch.fnmatch(dem,"hill_*"):
arcpy.env.workspace = outputFolder
arcpy.RasterToPolygon_conversion(outputFolder + "\\" + dem, outputFolder+ "\\" + dem +".shp", "SIMPLIFY")
except:
# Get the traceback object
#
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
# Concatenate information together concerning the error into a message string
#
pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages(2) + "\n"
# Return python error messages for use in script tool or Python Window
#
arcpy.AddError(pymsg)
arcpy.AddError(msgs)
try:
#Output folder
outputFolder = arcpy.GetParameterAsText(2)
#Set workspace
arcpy.env.workspace = outputFolder
#Create folders to hold merged output
flatFolder = arcpy.CreateFolder_management(outputFolder, "Flat")
partFolder = arcpy.CreateFolder_management(outputFolder, "Partly_Hilly")
hillFolder = arcpy.CreateFolder_management(outputFolder, "Hilly")
flatFile = arcpy.ListFeatureClasses("flat*", "Polygon")
tempListf = []
for list in flatFile:
item = list + ';'
tempListf.append(item)
finalListf = ''.join(tempListf)
mergeStrF = finalListf.rstrip(';')
mergeStrF2 = outputFolder + "\\" + mergeStrF
phillFile = arcpy.ListFeatureClasses("phill*", "Polygon")
tempListp = []
for list in phillFile:
item = list + ';'
tempListp.append(item)
finalListp = ''.join(tempListp)
mergeStrP = finalListp.rstrip(';')
mergeStrP2 = outputFolder + "\\" + mergeStrP
hillFile = arcpy.ListFeatureClasses("hill*", "Polygon")
tempListh = []
for list in hillFile:
item = list + ';'
tempListh.append(item)
finalListh = ''.join(tempListh)
mergeStrH = finalListh.rstrip(';')
mergeStrH2 = outputFolder + "\\" + mergeStrH
# Provide name and path of the merged feature class
flatMerged = outputFolder + "\\" + "Flat" + "\\" + "flatMerged.shp"
phillMerged = outputFolder + "\\" + "Partly_Hilly" + "\\" + "phillMerged.shp"
hillMerged =outputFolder + "\\" + "Hilly" + "\\" + "hillMerged.shp"
if not tempListf:
pass
else:
arcpy.Merge_management(mergeStrF2, flatMerged)
if not tempListp:
pass
else:
arcpy.Merge_management(mergeStrP2, phillMerged)
if not tempListh:
pass
else:
arcpy.Merge_management(mergeStrH2, hillMerged)
except:
# Get the traceback object
#
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
# Concatenate information together concerning the error into a message string
#
pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages(2) + "\n"
# Return python error messages for use in script tool or Python Window
#
arcpy.AddError(pymsg)
arcpy.AddError(msgs)
Hello Kate,
Have you tried using Calculate Statistics tool before running the GetRasterProperties?
for dem in demlist: arcpy.CalculateStatistics_management(dem) elevSTDresults = arcpy.GetRasterProperties_management(dem,"STD")
Thanks,
Vandana