I've created a python scripts that takes a feature class (polyline) of contours and a feature class (polyline) that represents the position of a proposed dam wall. I then use the feature to polygon tool to create a polygon from each contour that represents the proposed full supply level of the proposed dam site. I then use Polygon Volume Tool to determine the volume and surface area for each proposed full supply level.
The problem that I'm having is that:
From the testing that I've done there seems to be a problem in storing the output feature class from Feature to Polygon in_memory as the shape_length & shape_area fields are being dropped, which I tested within ArcMap running the tool and storing the output into memory.
I've also tested the same tools using the same input layers and saved the results to disk, the shape_length and shape_area are then preserved within the output results.
If anyone can give me advice in how to resolve the following, it would be appreciated.
''' Created on May 28, 2015 @author: PeterW The following script calculates the volume for each Full Supply Level to calculate the capacity curve for a proposed dam site ''' # import system modules and site packages import arcpy # Check out 3D Analyst arcpy.CheckOutExtension("3D") # set environment settings arcpy.env.overwriteOutput = True # set input and output arguments cont_line = r"F:\Projects\2015\PRCPTWAT02\13176\A34631\wspace\ChrisFox.gdb\Contours" dw_line = r"F:\Projects\2015\PRCPTWAT02\13176\A34631\wspace\ChrisFox.gdb\Dam_Wall" fsl_gon = r"F:\Projects\2015\PRCPTWAT02\13176\A34631\wspace\ChrisFox.gdb\Full_Supply_Level" surf = r"F:\Projects\2015\PRCPTWAT02\13176\A34631\wspace\TIN\tin" # make feature layer from the dam wall (polyline) dwLyr = arcpy.MakeFeatureLayer_management(dw_line,"dwLayer") # convert each FSL contour polyline into a FSL polygon and determine the volume # below the contour elevation using the polygon volume tool with arcpy.da.SearchCursor(cont_line,["Elevation"]) as cursor: #@UndefinedVariable for row in cursor: elev = str(row[0]) outName = "FSL" + elev + "m" sqlExp = "Elevation" + " = " + elev contLyr = arcpy.MakeFeatureLayer_management(cont_line, outName, sqlExp) fslLyr = "in_memory" + "\\" + outName arcpy.FeatureToPolygon_management([contLyr,dwLyr], fslLyr, attributes = True) arcpy.AddField_management(fslLyr, "Elevation", "SHORT") arcpy.CalculateField_management(fslLyr, "Elevation", elev, "PYTHON_9.3") fields = arcpy.ListFields(fslLyr) fields = [field.name for field in fields] print fields with arcpy.da.SearchCursor(fslLyr, fields) as sCur: #@UndefinedVariable with arcpy.da.InsertCursor(fsl_gon, fields) as iCur: #@UndefinedVariable for sRow in sCur: iCur.insertRow(sRow) # calculate the volume and surface area for each Full Supply Level polygon and the TIN arcpy.PolygonVolume_3d(surf, fsl_gon, "Elevation", "BELOW", "SVolume", "SArea","0") # print statement that process is completed arcpy.AddMessage("Completed Processing Capacity Curves")
Regards
Peter Wilson
Solved! Go to Solution.
You can use Add Geometry Attribute to add the geometry attributes you want (more than just area and perimeter) to the in-memory feature classes.
You can use Add Geometry Attribute to add the geometry attributes you want (more than just area and perimeter) to the in-memory feature classes.