I have 38 line Feature Classes located on my Enterprise Server. Without merging the files into one Feature Class, is there a way to discover the grand total of all line lengths in all 38 Feature Classes.
Hi Larry,
I should think so. How about something like this:
import arcpy
# point the workspace to your enterprise geodatabase
arcpy.env.workspace = r"[path to enterprise GDB]"
# set the environment to overwrite output
arcpy.env.overwriteOutput = True
# list the line feature classes (might have to modify
# this depending on how many FCs are in your workspace
linear_fcs = arcpy.ListFeatureClasses("*", "Arc")
# create a float variable to store the total length
total_length = 0.0
# copy each FC into the in memory workspace, add a
# length attribute, and add the length of each to the total
for fc in linear_fcs:
# copy
arcpy.CopyFeatures_management(fc, r"in_memory\temp")
# add length attribute
arcpy.AddGeometryAttributes_management(r"in_memory\temp", "LENGTH", "FEET_US")
# add the length of each feature to the total
with arcpy.da.SearchCursor(r"in_memory\temp", ("LENGTH")) as cursor:
for row in cursor:
total_length += row[0]
# print the result
print("The total length is {} feet.".format(total_length))
Hope this helps.
Micah
Thank You, I will give this a try
What about using Summarize Statistics?
The first example appears to summarize the SHAPE_LENGTH field into an output table.
Thanks You, I getting a lot of very good Ideas how to make this happen,
Larry Adgate
Instead of copying data sets into temporary workspaces, you should be able to use the fact that cursors can do projection on the fly. The following code uses the ArcPy Walk function to find all polyline feature classes in a geodatabase and sum the length of all features in all of those feature classes:
import arcpy
import os
gdb = # path to GDB or GDB connection file
SR = # common spatial reference for calculating lengths
walk = arcpy.da.Walk(gdb, datatype="FEATURECLASS", type="POLYLINE")
sum_length = 0
for root, dirnames, filenames in walk:
for name in filenames:
sum_length += sum(
length
for length,
in arcpy.da.SearchCursor(os.path.join(root,name),
"SHAPE@LENGTH",
spatial_reference=SR)
)
print sum_length
If you don't wall all polyline feature classes, you could add some additional logic to exclude or include feature classes of interest.
Hi Joshua, Thank You for your help on this issue, but this project has evolved into something much bigger. We are a water utility Company with hundreds of miles of pipeline, valves and various equipment. For water quality purposes, I have been asked to provide a total inventory of everything and that includes pipeline sizes & lengths and the various types of valves and equipment. Unfortunately not all our GIS fields are numeric but are text. As a solution, I could merge similar feature classes into one big feature class but this could be labor intensive. Your thoughts Please.
Larry
Honestly, it is difficult to provide specific suggestions without more information about the structure of tables within the DB and the schema of the tables. The specifics of how the data is stored and structured can make a big difference on which approach makes sense, or doesn't make sense. I am not sure how comfortable you are with sharing more information, or are even allowed to, but sharing more might help myself or others provide specific suggestions.