查询和统计是GIS中的重要功能之一。在ArcGIS中可以按属性信息、按空间位置关系进行查询和统计。今天为源GIS给大家分享使用ArcPy编程实现批量统计地理数据库要素类记录数量。
统计单个图层的记录数非常简单,直接打开属性表,在表格下方查看总数即可;如果有多个图层,以此类推。
如果您有更好的解决方案,请搜索和关注为源GIS。
统计要素数量工具,主要包括有以下特点:
统计结果包括路径文件、要素数据集、要素名称、类型、数量等字段信息:
在ArcGIS Pro加载为源工具箱,运行此功能,选择输入数据库、输出统计表格,单击“运行”即可得到结果。
在ArcMap中使用方法类似,如下图所示:
主要用到GetCount_management统计数量,完整代码如下:
# -- coding:cp936 --
# ---------------------------------------------------------------------------
# 名称:PrintCount
# 功能:统计图层数量
# 作者:为源GIS
# 日期:2022.7.11
# 说明:
# ---------------------------------------------------------------------------
import codecs
import csv
from imp import reload
import os
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import arcpy
import string
try:
#参数1:输入工作空间列表
in_dbs=arcpy.GetParameterAsText(0)
dbs=in_dbs.split(";")
#参数2:输出CSV文件
csv_file=arcpy.GetParameterAsText(1)
f = codecs.open(csv_file, 'w','utf_8_sig')
csv_writer=csv.writer(f)
count=0
# 写入标题行
title=['路径','文件','要素数据集','要素名称','类型','数量']
csv_writer.writerow(title)
arcpy.AddMessage(title)
for db in dbs:
db=db.strip("'")
arcpy.env.workspace = db
db_desc=arcpy.Describe(db)
datasets = arcpy.ListDatasets()
datasets = [''] + datasets if datasets is not None else []
for ds in datasets:
for fc in arcpy.ListFeatureClasses(feature_dataset=ds):
arcpy.SetProgressorLabel("正在统计 "+ fc)
arcpy.AddMessage(fc)
shapeType = arcpy.Describe(fc).shapeType
total = int(arcpy.GetCount_management(fc).getOutput(0))
result=[db_desc.path,db_desc.baseName,ds,fc,shapeType,str(total)]
csv_writer.writerow(result)
count=count+1
for table in arcpy.ListTables():
arcpy.SetProgressorLabel("正在统计 "+ table)
shapeType = 'Table'
total = int(arcpy.GetCount_management(table).getOutput(0))
result=[db_desc.path,db_desc.baseName,'',fc,shapeType,str(total)]
csv_writer.writerow(result)
count=count+1
arcpy.AddMessage('共输出 '+str(count)+'条统计结果。')
except arcpy.ExecuteError:
arcpy.GetMessages()
如果有任何疑问或问题,可联系微信:wygis2022,公众号:为源GIS, 企鹅:1811335143
手机扫一扫
移动阅读更方便
你可能感兴趣的文章