3.3 数据质量与元数据:图层的可信档案


文档摘要

3.3 数据质量与元数据:图层的可信档案 本节摘要:数据质量用六个维度评估——位置精度、属性精度、完整性、逻辑一致性、时间精度、语义准确性;元数据是记录这些结论并随数据流动的档案。本节给出入库前质检清单与 ArcPy 批量体检脚本,并用一个"同一区域两版数据打架"的案例说明质量档案如何左右项目决策。 一场由数据质量引发的争执 某项目验收前,甲方技术顾问提出质疑:你们报告里全县耕地 82.4 万亩,国土部门年度变更数据是 79.1 万亩,差 3 万多亩,谁的错?项目组翻查过程记录:耕地数据 2023 年用 2 米影像解译,最小上图图斑 400 平方米;国土数据 2023 年度变更调查,最小上图标准不同、时点也不同。

3.3 数据质量与元数据:图层的可信档案

本节摘要:数据质量用六个维度评估——位置精度、属性精度、完整性、逻辑一致性、时间精度、语义准确性;元数据是记录这些结论并随数据流动的档案。本节给出入库前质检清单与 ArcPy 批量体检脚本,并用一个"同一区域两版数据打架"的案例说明质量档案如何左右项目决策。

一场由数据质量引发的争执

某项目验收前,甲方技术顾问提出质疑:你们报告里全县耕地 82.4 万亩,国土部门年度变更数据是 79.1 万亩,差 3 万多亩,谁的错?项目组翻查过程记录:耕地数据 2023 年用 2 米影像解译,最小上图图斑 400 平方米;国土数据 2023 年度变更调查,最小上图标准不同、时点也不同。两边都没算错,差的不是技术,是数据质量档案——采集时间、精度标准、口径定义,这些信息若一开始就作为元数据随数据流转,争执根本不会发生。

这个案例说明本节的主题:数据质量不是"数据好不好"的笼统印象,而是六个可以逐项陈述的维度;元数据不是可有可无的附加说明,而是让数据在人和时间之间不失去上下文的档案。

质量六问:一套通用的评审框架

拿到任何一份图层数据,按六个维度逐项过一遍,这是行业通行的质量框架(源自国家标准与 ISO 19157 体系):

维度 问什么 典型检查手段
位置精度 坐标离真实位置偏多远 野外控制点比对、与高精度参考叠加
属性精度 字段值可信吗 抽样回访、与权威台账核对
完整性 该有的要素都在吗 分乡镇数量比对、密度分布检查
逻辑一致性 数据内部自洽吗 拓扑校验、编码表核对、坐标系统一性
时间精度 数据反映哪个时点 影像时相、调查时间字段分布
语义准确性 口径定义清楚吗 分类标准版本、最小上图单元说明

六问的顺序有讲究:逻辑一致性最便宜(机器可查),先跑;位置与属性精度最贵(要外业或台账),抽样做;语义准确性最容易被忽略,但引发的争执最大——"耕地"两个字在不同分类标准下不是同一个概念。前面案例的 3 万亩差额,主要就落在时间与语义两问上。

动手:入库前批量体检脚本

把便宜的两问(逻辑一致性、完整性)脚本化,每批数据入库前自动跑:

import arcpy def quick_check(fc): """对单个要素类执行快速体检,返回问题清单""" issues = [] desc = arcpy.Describe(fc) # 一、坐标系明确性 if desc.spatialReference.factoryCode == 0: issues.append("坐标系缺失") # 二、数量与范围 n = int(arcpy.management.GetCount(fc).getOutput(0)) if n == 0: issues.append("空图层") # 三、关键字段空值率 for fld in ["地类名称", "调查年份"]: if fld in [f.name for f in arcpy.ListFields(fc)]: nulls = sum(1 for r in arcpy.da.SearchCursor(fc, [fld]) if r[0] in (None, "")) rate = nulls / max(n, 1) if rate > 0.01: issues.append(f"{fld} 空值率 {rate:.1%}") # 四、几何有效性 invalid = 0 with arcpy.da.SearchCursor(fc, ["SHAPE@"]) as cur: for (geom,) in cur: if geom is None or not geom.isSimple: invalid += 1 if invalid: issues.append(f"{invalid} 个无效几何") return n, issues arcpy.env.workspace = r"K:/gisdata/county_std.gdb/land_ds" for fc in arcpy.ListFeatureClasses(): n, issues = quick_check(fc) tag = " 通过" if not issues else " -> " + "; ".join(issues) print(f"{fc:16s} {n:6d} 要素{tag}") # 输出示例: # parcels 20214 要素 -> 地类名称 空值率 2.3% # ownership 3896 要素 通过 # farmland 7421 要素 -> 3 个无效几何

体检报告暴露的两个问题各有对策:空值率超标回溯录入环节(属性域没绑定或旧数据迁移漏网);无效几何用"检查几何"加"修复几何"工具对处理。脚本本身不到三十行,却把六问中的两问变成零成本例行公事——这就是把质量制度化的含义。

修复几何的标准流程也一并给出:

import arcpy gdb = r"K:/gisdata/county_std.gdb" # 检查并修复:输出检查表,原地修复几何 chk = arcpy.management.CheckGeometry(gdb, "geom_check_table") print("发现:", chk[1], "处几何问题") # 输出: 发现: 3 处几何问题 (自相交、空环、重复折点) arcpy.management.RepairGeometry(gdb, delete_null=True) print("修复完成,复查:", arcpy.management.CheckGeometry(gdb, "geom_check_table2")[1], "处") # 输出: 修复完成,复查: 0 处

元数据:让数据自带说明书

质检结论写在哪里?元数据。它记录数据的标识信息(名称、来源、负责人)、空间信息(坐标系、范围、比例尺)、质量信息(精度评价、检查日期)、以及最重要的语义信息(分类标准、最小上图单元、时点口径)。

ArcGIS Pro 的操作路径:选中图层、查看选项卡、元数据页签编辑。要素是元数据跟着数据文件走,拷贝数据时档案随行,不像纸质说明书容易与数据分离。

元数据条目里,我主张三条必须写实:一是采集时间与时点定义("2023 年度变更"与"2023 年 6 月影像"不是一回事);二是分类标准及版本号(用哪版土地利用分类);三是已知缺陷(如"西北部山区云覆盖,解译精度下降")。第三条尤其反直觉但最有价值——坦诚缺陷的数据才是可用的数据,完美的元数据反而令人生疑。

元数据最小可用模板(项目组约定版) 标识:图层层名、唯一编码、负责单位与联系人 空间:坐标系统名称与WKID、覆盖范围、最小上图单元 时间:数据采集时段、反映时点、更新周期 质量:精度评价方法与结论、检查日期、已知缺陷清单 语义:分类标准名称与版本、字段编码表出处 谱系:由哪些源数据经过哪些处理步骤生成

谱系一项值得强调:从原始影像到最终耕地图层,中间每一步处理(配准、解译、综合、修边)都记录在案,出现争议时才能回溯重演。第 7 章讲脚本化时你会发现,脚本天然就是最好的谱系记录——代码即文档。

⚠️ 常见坑:元数据"一次写完永远不改"。数据每轮更新,元数据的时间与质量条目都应刷新;档案与数据脱节,比没有档案更误导人。

💡 关键直觉:把质量六问当作数据的体检表,把元数据当作病历本。没有病历的体检结果会随人员流动而丢失,没有体检的病历则纯属虚构。

本节小结

  • 质量六问:位置、属性、完整性、逻辑一致性、时间、语义,逐项可陈述而非笼统印象
  • 先便宜后昂贵:机器可查的一致性与完整性先跑,外业验证抽样做
  • 体检脚本化:三十行代码把例行质检变成零成本动作
  • 元数据三写实:时间口径、标准版本、已知缺陷,坦诚缺陷提升可信度
  • 谱系意识:处理过程留痕,争议可回溯

第 3 章至此完成:图层有了模型选择、制度容器与可信档案。下一章转入表达——符号化、专题地图与布局出图,让这套数据资产以专业地图的面目示人。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U