Count number of vertices in all Feature Classes
I needed to get the number of points it takes to build all the lines and polygons in our admin boundaries. Here’s the python script I wrote to accomplish that.
Run in a shell as it doesn’t use AddMessages()
yet. Table formatting is naive and needs improvement. Best solution might be to use the `tabulate` module, but I was unsure about introducing a new dependency. Total dev time including research, writing, testing, cleaning up for general consumption, and writing this post: 4.5 hours.
count-vertices.py
import os import arcpy workspace = arcpy.GetParameterAsText(0) if not workspace: workspace = r'Z:\V5\ENV_250k.gdb\admin_env' def count_vertices(fc, table): '''Count vertices in Feature Class, insert to dictionary named "table"''' # Adapted from Alex Tereshenkov (@alex-tereshenkov) # https://gis.stackexchange.com/questions/84796/extracting-number-of-vertices-in-each-polygon features = [feature[0] for feature in arcpy.da.SearchCursor(fc,"SHAPE@")] count_vertices = sum([f.pointCount-f.partCount for f in features]) table[fc] = count_vertices def print_report(table): '''Print dictionary as table (Naive, paths longer than X characters mess up the table)''' print "{:60}\t:\t{:>12}".format('-' * 60, '-' * 12) print "{:60}\t:\t{:>12}".format('Feature Class', 'Vertices') print "{:60}\t:\t{:>12}".format('-' * 60, '-' * 12) for k,v in table.items(): print "{:60}\t:\t{:>12,}".format(k,v) def get_feature_classes(workspace): '''Return list of all feature classes under Workspace (recursive)''' # https://gis.stackexchange.com/questions/5893/listing-all-feature-classes-in-file-geodatabase-including-within-feature-datase feature_classes = [] walk = arcpy.da.Walk(workspace, datatype="FeatureClass") print 'Finding feature classes in', workspace for dirpath, dirnames, filenames in walk: for filename in filenames: feature_classes.append(os.path.join(dirpath, filename)) return feature_classes table = {} for fc in get_feature_classes(workspace): print 'Counting', fc count_vertices(fc,table) print_report(table)<span style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" data-mce-type="bookmark" class="mce_SELRES_start"></span>
Output
Finding feature classes in Z:\V5\ENV_250k.gdb\admin_env Counting Z:\V5\ENV_250k.gdb\admin_env\CO_Districts Counting Z:\V5\ENV_250k.gdb\admin_env\Bison_Management_Area Counting Z:\V5\ENV_250k.gdb\admin_env\GMA_Deactivated Counting Z:\V5\ENV_250k.gdb\admin_env\GMA_Red_Mtn_Subdiv Counting Z:\V5\ENV_250k.gdb\admin_env\Game_Management_Subzones Counting Z:\V5\ENV_250k.gdb\admin_env\Game_Management_Zones Counting Z:\V5\ENV_250k.gdb\admin_env\Traplines_Group Counting Z:\V5\ENV_250k.gdb\admin_env\Traplines_Single Counting Z:\V5\ENV_250k.gdb\admin_env\Regional_Management_Areas Counting Z:\V5\ENV_250k.gdb\admin_env\Outfitting_Concessions Counting Z:\V5\ENV_250k.gdb\admin_env\Elk_Hunt_Areas Counting Z:\V5\ENV_250k.gdb\admin_env\Trapping_Concessions ------------------------------------------------------------ : ------------ Feature Class : Vertices ------------------------------------------------------------ : ------------ Z:\V5\ENV_250k.gdb\admin_env\Game_Management_Zones : 49,773 Z:\V5\ENV_250k.gdb\admin_env\Elk_Hunt_Areas : 6,524 Z:\V5\ENV_250k.gdb\admin_env\GMA_Deactivated : 15,236 Z:\V5\ENV_250k.gdb\admin_env\Outfitting_Concessions : 76,523 Z:\V5\ENV_250k.gdb\admin_env\Regional_Management_Areas : 29,161 Z:\V5\ENV_250k.gdb\admin_env\Traplines_Group : 47,973 Z:\V5\ENV_250k.gdb\admin_env\CO_Districts : 73,692 Z:\V5\ENV_250k.gdb\admin_env\Bison_Management_Area : 6,335 Z:\V5\ENV_250k.gdb\admin_env\GMA_Red_Mtn_Subdiv : 12,769 Z:\V5\ENV_250k.gdb\admin_env\Game_Management_Subzones : 527,229 Z:\V5\ENV_250k.gdb\admin_env\Traplines_Single : 415,566 Z:\V5\ENV_250k.gdb\admin_env\Trapping_Concessions : 453,457
Sidebar: I developed and tested this in the Pyzo development environment. I’m impressed with how straightforward it was to get started and how smooth the minute by minute experience is. I really like how easy it is to switch between python versions. No problem at all jumping between ArcMap’s 2x and ArcPro’s 3x python installs in the same session and without a restart. It even stayed up when I crashed the python kernel (needed to start a new shell though). I’ve think I’ve found a replacement for PyScripter, whose development has been getting slow and creaky.