首页 / 资讯中心 / 文章详情

ArcGIS Data Reviewer 10.2 矢量数据质检实战:从部署到自动化

ArcGIS Data Reviewer 10.2 矢量数据质检实战:从部署到自动化 ★ FEATURED ARTICLE
简介ArcGIS DataReviewer 10.2 是 Esri 推出的空间数据质检工具面向 GIS 从业者、数据分析师及测绘项目团队用于发现并修正空间信息、属性信息与拓扑结构中的错误保障数据准确性与完整性。资源包共 157 个文件约 76.22MB以 png、gif、jpg 等界面与示例图片js、css、htm、html 等前端页面脚本以及 xml、ini、txt 等配置说明文件为主另含 exe、msi、cab 等安装组件构成完整的工具部署与运行环境。已有 1222 人学习下载适合需要系统掌握数据质检流程的中高级 GIS 用户。借助该工具读者可完成坐标精度、重叠缺失要素、属性格式与空值重复值、未闭合线段及穿越边界等检查并通过批处理任务、脚本与 API 接口实现自动化质检结合协作平台与质检报告定位问题分布、统计错误并获取修复建议从而提升地理分析的精确度与可靠性。1. 从 ArcGIS DataReviewer102.zip 说起一套被低估的矢量数据质检工作流如果你手头有一批 Shapefile 或地理数据库要素类字段缺失、几何自相交、面重叠、悬挂节点这些毛病反复出现靠人工逐条翻属性表基本等于慢性自杀。ArcGIS DataReviewer102.zip 这个包名指向的正是 Esri 那套 Data Reviewer 扩展的 10.2 版本它解决的核心问题只有一个把矢量数据的质量检查从“人眼扫”变成“规则跑”。它适合两类人——一类是每天要交付测绘成果、规划数据的 GIS 工程师另一类是做数据入库前质检的运维人员。这个包本身不是独立软件而是挂在 ArcMap 10.2 上的扩展模块装完之后你会多出一整套 Reviewer 工具条和批量校验能力。很多人第一次拿到它以为解压就能用结果卡在许可和版本匹配上这篇就把从部署到写规则、跑批、看报告的全链路拆开讲。2. 部署与许可让 Data Reviewer 在 ArcMap 10.2 里真正跑起来2.1 先搞清楚这个包里到底有什么ArcGIS DataReviewer102.zip 解压后通常包含几个部分扩展安装程序.msi 或 setup.exe、许可授权文件说明、以及可能的示例数据或校验规则模板。它不是绿色免安装包必须走 Windows 的安装流程。我一般会先把压缩包解到本地一个纯英文路径下比如D:\gis_setup\datareviewer102\避免中文路径导致安装程序读不到配置文件。解压后你会看到类似DataReviewerDesktop.msi、License10.2.txt这样的文件。注意10.2 时代的 Esri 桌面产品分 Desktop Basic、Standard、Advanced 三档Data Reviewer 需要 Standard 及以上级别的许可Basic 级别即使装了也调不出工具条。安装前先确认你的 ArcMap 能正常启动并且已经装了 Desktop 10.2 的完整版不是只装了 Engine。然后关闭所有 ArcGIS 相关进程包括 ArcCatalog 和后台的ArcGISCacheMgr.exe。安装程序会往注册表写扩展注册信息如果 ArcMap 开着写进去的 CLSID 可能不生效表现为工具条灰色。2.2 安装步骤与许可配置安装本身是向导式但有两个地方容易翻车。第一安装类型选“Complete”而不是“Typical”Typical 可能不装 Batch Job Runner 组件后面跑批量校验会缺可执行文件。第二安装完成后不要急着开 ArcMap先处理许可。10.2 的许可方式分单机版和浮动版。单机版用Authorize工具浮动版改License Manager指向许可服务器。Data Reviewer 的许可是在 Desktop 许可基础上追加的扩展许可需要在ArcGIS Administrator里勾选 Data Reviewer 的复选框。具体操作打开 ArcGIS Administrator → Desktop → 展开你的许可类型 → 找到 Data Reviewer 条目 → 勾选。如果这里看不到条目说明安装没注册成功重新跑一遍安装程序的“Repair”选项。# 检查 Data Reviewer 的 DLL 是否注册成功在 CMD 里执行 reg query HKLM\SOFTWARE\ESRI\Desktop10.2\Extensions /s | findstr /i Reviewer # 正常应返回类似 DataReviewer 的键值如果为空说明注册失败上面这条命令查的是 64 位注册表视图。如果你的系统是 64 位但 ArcMap 是 32 位应用扩展注册可能落在Wow6432Node下所以更稳妥的查法是reg query HKLM\SOFTWARE\Wow6432Node\ESRI\Desktop10.2\Extensions /s | findstr /i Reviewer逻辑说明ArcMap 10.2 是 32 位进程安装程序写注册表时会重定向到Wow6432Node。如果只查默认视图会误判为没装。参数上/s表示递归查子键findstr /i忽略大小写过滤。返回结果里应该能看到DataReviewer相关的 CLSID 和InstallDir路径。许可配好后启动 ArcMap在Customize → Extensions里勾选 Data Reviewer然后Customize → Toolbars里调出 Data Reviewer 工具条。如果工具条上的按钮全是灰的八成是扩展没勾选或者许可级别不够。2.3 验证安装是否成功的三个动作第一个动作打开 ArcMap加载一个随便的线要素类点开 Data Reviewer 工具条上的Select Data Check下拉框看能不能列出检查项。能列出Geometry Check、Attribute Check这些说明核心组件正常。第二个动作在Reviewer → Batch Job Runner里新建一个空 job看能不能保存为.rbj文件。这一步验证的是批处理引擎是否可用。第三个动作打开Reviewer → Manage Reviewer Results看能不能连上默认的 Reviewer 工作空间。10.2 默认用 Access 个人地理数据库存校验结果路径通常在C:\Users\你的用户名\AppData\Roaming\ESRI\DataReviewer\下。如果这里报错多半是权限问题用管理员身份跑一次 ArcMap 让它初始化。注意Data Reviewer 的结果存储库不要放在网络盘上10.2 对 UNC 路径的支持不稳定容易在批量写入时锁死。3. 校验规则怎么写从几何检查到属性域校验的实操3.1 几何检查自相交、面重叠、悬挂节点Data Reviewer 的几何检查分两类一类是单要素自身的几何合法性比如自相交、空几何、短线段另一类是要素间的空间关系比如面重叠、线悬挂、点不在线上。在工具条上点Select Data Check → Geometry Check会弹出一个配置面板。以面重叠检查为例配置项里最关键的是Overlap Type可选Any Overlap和Area Overlap。前者只要两个面有公共区域就报后者可以设面积阈值比如只报重叠面积大于 10 平方米的。我一般会设Area Overlap并给一个容差值因为相邻地块共享边时由于浮点精度问题边界上可能出现极细的条状重叠这种属于“假报”不设阈值会被淹没。# 用 arcpy 调 Data Reviewer 的几何检查需在 ArcMap 的 Python 窗口里跑 import arcpy arcpy.CheckOutExtension(DataReviewer) # 创建 Reviewer 工作空间 reviewer_ws rC:\ReviewerWorkspace\reviewer.gdb arcpy.CreateReviewerWorkspace_Reviewer(reviewer_ws, REVIEWER, REVIEWER) # 定义几何检查参数 input_fc rC:\Data\parcels.shp check_type GEOMETRY geometry_check OVERLAP tolerance 10 Meters # 执行检查 arcpy.ExecuteDataCheck_Reviewer( input_fc, reviewer_ws, check_type, geometry_check, tolerance )逻辑说明CheckOutExtension是必须的否则后面所有 Reviewer 函数都会抛许可错误。CreateReviewerWorkspace_Reviewer建的是存校验结果的工作空间不是你的业务数据库。ExecuteDataCheck_Reviewer的前两个参数是输入要素和结果库第三个参数指定检查大类第四个指定具体检查项第五个是容差。容差的单位要和你要素类的空间参考一致如果要素是地理坐标系度写10 Meters会报单位不匹配得改成0.0001 DecimalDegrees之类的。参数怎么调OVERLAP检查的容差建议设成你业务上能接受的最小重叠面积。比如地块数据10 平方米以下的重叠可以忽略那就设 10。如果是行政区划面重叠面积阈值可以设大一点比如 1000 平方米因为行政区划边界通常有明确的坐标点小重叠多半是数字化误差。3.2 属性检查字段空值、域值越界、格式匹配属性检查的入口是Select Data Check → Attribute Check。常用的有三类Null Value Check查必填字段是否为空Domain Check查字段值是否在编码域内Regular Expression Check查文本字段是否符合格式比如身份证号、地块编号。配置Domain Check时你需要先有一个编码域Coded Value Domain挂在字段上。如果数据是从 Shapefile 转过来的域信息会丢得在目标地理数据库里重建域。重建之后在检查配置里选Domain Check指定要素类、字段、以及“是否允许空值”。# 属性域检查的 arcpy 写法 import arcpy arcpy.CheckOutExtension(DataReviewer) reviewer_ws rC:\ReviewerWorkspace\reviewer.gdb input_fc rC:\Data\landuse.gdb\parcels field_name LANDUSE_CODE arcpy.ExecuteDataCheck_Reviewer( input_fc, reviewer_ws, ATTRIBUTE, DOMAIN, field_name )逻辑说明DOMAIN检查依赖字段上绑定的域。如果字段没绑域这个检查会直接跳过并返回空结果不会报错所以跑完之后要确认结果表里有没有记录。参数field_name只传字段名不传表名。如果要对多个字段做域检查得循环调用每次换字段名。正则检查在 10.2 里支持的是有限正则语法不支持 lookahead 和 lookbehind。比如你要查地块编号是否符合“字母8位数字”的格式写^[A-Z]{1}[0-9]{8}$可以但写^(?!0000)这种负向断言就会报语法错误。这是 10.2 的 Python 2.7 正则引擎限制不是 Data Reviewer 的锅。3.3 把检查项串成批处理任务单次检查跑完只出一个结果表实际项目里往往要跑十几项检查。这时候用Batch Job Runner。在 ArcMap 里打开Reviewer → Batch Job Runner新建一个 job把前面配好的检查项逐个加进去。每个检查项可以单独设输入要素和参数也可以引用同一个工作空间。批处理文件保存为.rbj本质是个 XML。你可以用文本编辑器打开看里面记录了每个检查的类型、参数、输入路径。如果要在多台机器上复用把.rbj和结果库模板一起拷过去改一下路径就行。但注意.rbj里的路径如果是绝对路径换机器必挂所以建议在配 job 的时候就用相对路径或者统一的工作空间别名。!-- .rbj 文件片段一个几何检查加一个属性检查 -- Job DataCheck TypeGEOMETRY/Type SubTypeOVERLAP/SubType InputDatasetparcels/InputDataset Tolerance10 Meters/Tolerance /DataCheck DataCheck TypeATTRIBUTE/Type SubTypeDOMAIN/SubType InputDatasetparcels/InputDataset FieldLANDUSE_CODE/Field /DataCheck /Job逻辑说明InputDataset写的是要素类名而不是全路径前提是你在 job 里配了工作空间。如果直接写全路径换机器时改路径的工作量会很大。Tolerance的单位跟着数据空间参考走不要硬编码。4. 跑批与结果解读校验报告里哪些是真问题4.1 批量执行与日志查看批处理跑起来之后Data Reviewer 会往结果库里写三类表REVIEWER_STATUS记录每个检查项的执行状态REVIEWER_RESULTS存具体的错误要素REVIEWER_BATCHJOB存 job 级别的汇总。跑完之后先看REVIEWER_STATUS如果某个检查项状态是Failed点进去看错误信息。常见失败原因输入要素被其他进程锁了、结果库磁盘满、容差单位不匹配。-- 查最近一次批处理里所有失败或警告的检查项 SELECT CHECK_NAME, STATUS, ERROR_MESSAGE FROM REVIEWER_STATUS WHERE STATUS IN (Failed, Warning) ORDER BY CHECK_NAME;逻辑说明REVIEWER_STATUS表在结果地理数据库里用 Access 或 SQLite 客户端都能查。STATUS字段的值通常是Passed、Failed、Warning。Warning一般表示检查跑完了但有异常比如部分要素被跳过。ERROR_MESSAGE里会写具体原因比如“单位不匹配”或“表被锁定”。4.2 结果表里的字段含义REVIEWER_RESULTS是核心表每条记录对应一个被检出的问题要素。关键字段有ORIGIN_CHECK哪个检查项报的、FEATURE_OID问题要素的 ObjectID、ERROR_TYPE错误类型、SEVERITY严重级别、DESCRIPTION文字描述。SEVERITY分 1 到 51 最严重5 最轻。实际处理时先过滤SEVERITY 2的这些是必须改的3 到 5 的可以视项目要求决定是否处理。# 从结果表里导出严重级别 1 和 2 的问题要素 import arcpy reviewer_ws rC:\ReviewerWorkspace\reviewer.gdb results_table reviewer_ws r\REVIEWER_RESULTS output_fc rC:\Data\critical_issues.shp # 用 MakeFeatureLayer 加定义查询 arcpy.MakeFeatureLayer_management(results_table, critical_lyr, SEVERITY 2) arcpy.CopyFeatures_management(critical_lyr, output_fc)逻辑说明MakeFeatureLayer的第三个参数是 SQL 表达式直接过滤SEVERITY。注意结果表本身是地理数据库里的对象类不是要素类所以CopyFeatures出来的是带几何的要素如果原始检查是几何检查。如果是属性检查结果表里可能没有几何字段CopyFeatures会报错这时候改用TableToTable。4.3 把结果回写到原始数据做标记实际工作中质检结果不能只躺在 Reviewer 库里得让数据生产人员看到哪些要素有问题。常见做法是在原始要素类里加一个QC_FLAG字段跑完检查后用FEATURE_OID做关联更新。# 把严重问题标记回原始要素类 import arcpy original_fc rC:\Data\landuse.gdb\parcels results_table rC:\ReviewerWorkspace\reviewer.gdb\REVIEWER_RESULTS # 先加字段 arcpy.AddField_management(original_fc, QC_FLAG, SHORT) # 用 UpdateCursor 关联更新 with arcpy.da.UpdateCursor(original_fc, [OID, QC_FLAG]) as cursor: for row in cursor: oid row[0] # 查结果表里有没有这个 OID 的严重问题 with arcpy.da.SearchCursor(results_table, [FEATURE_OID, SEVERITY], FEATURE_OID {} AND SEVERITY 2.format(oid)) as sc: has_critical any(sc) row[1] 1 if has_critical else 0 cursor.updateRow(row)逻辑说明这段代码对每个要素查一次结果表效率不高但逻辑清晰。如果要素上万建议先把结果表里SEVERITY 2的FEATURE_OID读到一个 set 里再遍历原始要素做判断能快一个数量级。OID是 arcpy 的语法取 ObjectID。QC_FLAG设 1 表示有严重问题0 表示没问题。5. 避坑与排查Data Reviewer 10.2 的五个血泪教训5.1 工具条全灰扩展勾了也没用现象Customize → Extensions里 Data Reviewer 已经勾选但工具条按钮还是灰的。原因许可级别不够或者扩展的 DLL 注册到了错误的注册表视图。解决先确认 Desktop 许可级别是 Standard 或 Advanced然后在ArcGIS Administrator里看 Data Reviewer 的可用状态。如果许可没问题用管理员身份重跑安装程序的 Repair再查Wow6432Node下的注册表键。5.2 批量跑一半卡死日志里全是“表被锁定”现象Batch Job Runner 跑到某个检查项时进度条不动强制结束之后结果库里一堆Failed。原因结果库放在网络盘或者 ArcMap 同时开着结果表的属性窗口。解决结果库必须放本地磁盘跑批之前关掉所有结果表的预览窗口。如果已经锁了用Reviewer → Manage Reviewer Results里的“Compact”功能压缩结果库或者直接删掉.lock文件。5.3 几何检查报了一堆“假重叠”现象面重叠检查报出几百条记录但人工看地图上根本看不出重叠。原因相邻面的共享边在浮点精度下产生了极细的条状重叠面积远小于容差。解决把Overlap Type从Any Overlap改成Area Overlap并设一个合理的面积阈值。如果数据是地理坐标系阈值单位用平方度数值要设得很小比如0.000001。5.4 属性域检查返回空结果但字段确实有越界值现象DOMAIN检查跑完结果表里一条记录都没有但手动查属性表发现字段值不在域内。原因字段没有绑定编码域或者绑定的域和检查时选的域不是同一个。解决在 ArcCatalog 里检查字段的域属性确认域已经绑定。如果数据是从 Shapefile 导入的域信息会丢需要在目标地理数据库里重建域并重新绑定。5.5 换机器后 .rbj 文件跑不起来现象在 A 机器上配好的批处理文件拷到 B 机器上打开所有检查项都报“输入数据集不存在”。原因.rbj里存的是绝对路径B 机器上没有同样的目录结构。解决配 job 的时候用工作空间别名而不是绝对路径或者把数据和结果库放在相对路径下。如果已经配死了用文本编辑器打开.rbj批量替换路径。6. 进阶技巧用 Python 脚本把 Data Reviewer 嵌进自动化流水线Data Reviewer 10.2 的图形界面适合配规则和做一次性检查但如果你每天都要跑同一套质检每次点工具条就是浪费生命。我一般会把整个流程写成 Python 脚本用 Windows 任务计划程序定时跑。核心思路是用 arcpy 调ExecuteDataCheck_Reviewer跑检查用SearchCursor读结果表用UpdateCursor回写标记最后把汇总报告导出成 CSV 发给相关人。# 自动化质检流水线跑检查、导出报告、回写标记 import arcpy import csv import datetime arcpy.CheckOutExtension(DataReviewer) # 配置区 reviewer_ws rC:\ReviewerWorkspace\reviewer.gdb input_fc rC:\Data\landuse.gdb\parcels report_csv rC:\Reports\qc_report_{}.csv.format( datetime.datetime.now().strftime(%Y%m%d)) # 第一步跑几何重叠检查 arcpy.ExecuteDataCheck_Reviewer( input_fc, reviewer_ws, GEOMETRY, OVERLAP, 10 Meters) # 第二步跑属性域检查 arcpy.ExecuteDataCheck_Reviewer( input_fc, reviewer_ws, ATTRIBUTE, DOMAIN, LANDUSE_CODE) # 第三步读结果表导出 CSV results_table reviewer_ws r\REVIEWER_RESULTS with open(report_csv, wb) as f: writer csv.writer(f) writer.writerow([CHECK_NAME, FEATURE_OID, SEVERITY, DESCRIPTION]) with arcpy.da.SearchCursor(results_table, [ORIGIN_CHECK, FEATURE_OID, SEVERITY, DESCRIPTION]) as cursor: for row in cursor: writer.writerow(row) # 第四步把严重问题回写到原始要素的 QC_FLAG 字段 critical_oids set() with arcpy.da.SearchCursor(results_table, [FEATURE_OID], SEVERITY 2) as cursor: for row in cursor: critical_oids.add(row[0]) with arcpy.da.UpdateCursor(input_fc, [OID, QC_FLAG]) as cursor: for row in cursor: row[1] 1 if row[0] in critical_oids else 0 cursor.updateRow(row) print(质检完成报告已导出到 {}.format(report_csv))逻辑说明这段脚本把四个步骤串在一起。第一步和第二步的ExecuteDataCheck_Reviewer参数和前面讲的一致。第三步用 Python 2.7 的csv模块写报告注意open的模式是wb因为 10.2 的 Python 是 2.7写 CSV 要用二进制模式避免空行。第四步先把严重问题的 OID 读进 set再遍历原始要素更新QC_FLAG比逐要素查结果表快得多。参数怎么改reviewer_ws换成你自己的结果库路径input_fc换成待检要素类。OVERLAP的容差10 Meters根据数据空间参考调整。SEVERITY 2这个阈值可以按项目要求改成 3或 1。报告路径里的日期格式可以改成你习惯的。这套脚本跑通之后可以挂到 Windows 任务计划里每天凌晨跑一次早上到工位直接看 CSV。如果结果里严重问题数量超过阈值再手动介入。这样质检就从“人追着数据跑”变成了“数据追着人跑”。我自己的习惯是每次改完检查规则先用一个 100 条左右的小样本跑一遍确认结果表里的记录数和预期一致再上全量数据。全量跑之前一定先备份原始要素类因为UpdateCursor写QC_FLAG的时候如果逻辑写错会把所有要素标成有问题后悔药可没地方买。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站