3.2 地理数据库的规矩:要素数据集、属性域与拓扑


文档摘要

3.2 地理数据库的规矩:要素数据集、属性域与拓扑 本节摘要:地理数据库是图层的制度化容器——要素数据集强制成员共享空间参考,属性域把字段取值约束写进数据库,子类型让一张表承载多类要素,拓扑规则用机器检查几何关系,企业级版本机制支撑多人并发编辑。本节用脚本建起一套带规矩的库,并演示拓扑校验与修复的完整闭环。 从文件夹到制度 shapefile 时代的管理方式是"一个图层一个文件,靠人脑记住谁是谁"。地理数据库(Geodatabase)把它升级为"一个库一套制度"。制度体现在四个层面: 第一层是容器分级。 地理数据库分文件地理数据库与企业级地理数据库两种形态。文件型是磁盘上的一个文件夹,免安装、免服务、单机使用,中小项目的默认选择;

3.2 地理数据库的规矩:要素数据集、属性域与拓扑

本节摘要:地理数据库是图层的制度化容器——要素数据集强制成员共享空间参考,属性域把字段取值约束写进数据库,子类型让一张表承载多类要素,拓扑规则用机器检查几何关系,企业级版本机制支撑多人并发编辑。本节用脚本建起一套带规矩的库,并演示拓扑校验与修复的完整闭环。

从文件夹到制度

shapefile 时代的管理方式是"一个图层一个文件,靠人脑记住谁是谁"。地理数据库(Geodatabase)把它升级为"一个库一套制度"。制度体现在四个层面:

第一层是容器分级。 地理数据库分文件地理数据库与企业级地理数据库两种形态。文件型是磁盘上的一个文件夹,免安装、免服务、单机使用,中小项目的默认选择;企业型跑在数据库服务器上(配合 ArcGIS Enterprise),支持多人同时编辑、版本管理、历史回溯,是机构级生产环境的选择。对个人学习者,一条经验足够:先用文件型把规矩学会,企业型的差异主要在并发与运维,不在建模思想。

第二层是空间参考纪律。 前一章强调"分析前统一坐标系",地理数据库把这个要求制度化:要素数据集(Feature Dataset)内的所有要素类必须共享同一空间参考,想混装不同坐标系的图层,数据库直接拒绝。一个库按分析主题划几个要素数据集——水利集、土地集、交通集——每集内部天然对齐。

第三层是属性约束。 属性域(Domain)规定字段允许的取值:地类编码只能从代码表里选,面积不许为负,年份限定在合理区间。录入时软件只给下拉选项,错误在入口就被挡下,而不是等统计分析时才发现"地类编码 999"这种幽灵值。

第四层是几何纪律。 拓扑规则声明图层内部与图层之间的空间关系约束:"地块不许相互重叠""地块之间不许留缝隙""道路必须被行政区边界完全覆盖"。规则配好后由校验引擎逐条检查,违规位置生成错误要素,修复也有对应工具。

图:地理数据库的制度结构

图:地理数据库的制度结构

动手:建一个有规矩的库

从空库开始,把制度逐层立起来。以下脚本连续执行,注释即文档:

import arcpy # 一、建文件地理数据库与要素数据集 out_folder, gdb_name = r"K:/gisdata", "county_std.gdb" arcpy.management.CreateFileGDB(out_folder, gdb_name) gdb = f"{out_folder}/{gdb_name}" # 要素数据集创建时即锁定空间参考:高斯117度带 arcpy.management.CreateFeatureDataset(gdb, "water_ds", arcpy.SpatialReference(4534)) arcpy.management.CreateFeatureDataset(gdb, "land_ds", arcpy.SpatialReference(4534)) print("库与两个数据集已建:", arcpy.ListDatasets(gdb + "/*", "Feature")) # 输出: 库与两个数据集已建: ['land_ds', 'water_ds']
import arcpy gdb = r"K:/gisdata/county_std.gdb" # 二、建属性域:地类编码域(编码值对)与面积域(数值范围) arcpy.management.CreateDomain(gdb, "DLBM_DOMAIN", "地类编码取值域", "TEXT", "CODED") for code, name in [("011", "水田"), ("013", "旱地"), ("031", "有林地"), ("104", "城镇住宅")]: arcpy.management.AddCodedValueToDomain(gdb, "DLBM_DOMAIN", code, name) arcpy.management.CreateDomain(gdb, "AREA_DOMAIN", "面积取值域", "DOUBLE", "RANGE") arcpy.management.SetRangeForDomain(gdb, "AREA_DOMAIN", 0, 10000000) # 三、建地块要素类并给字段绑域 arcpy.management.CreateFeatureclass(gdb + "/land_ds", "parcels", "POLYGON") arcpy.management.AddField(gdb + "/land_ds/parcels", "地类编码", "TEXT", field_length=3) arcpy.management.AddField(gdb + "/land_ds/parcels", "面积_亩", "DOUBLE") arcpy.management.AssignDomainToField(gdb + "/land_ds/parcels", "地类编码", "DLBM_DOMAIN") arcpy.management.AssignDomainToField(gdb + "/land_ds/parcels", "面积_亩", "AREA_DOMAIN") print("域已绑定:", [d.name for d in arcpy.da.ListDomains(gdb)]) # 输出: 域已绑定: ['DLBM_DOMAIN', 'AREA_DOMAIN']

绑定之后再编辑属性,地类编码字段只接受四个合法值,面积字段输入负数会被拒绝。制度生效的瞬间,数据质量防线从"事后检查"前移到了"事前拦截"。

拓扑:几何纪律的机器化

属性有域,几何有拓扑。建拓扑的要素集内声明规则:

import arcpy gdb = r"K:/gisdata/county_std.gdb" # 一、在土地集内建拓扑 arcpy.management.CreateTopology(gdb + "/land_ds", "land_topo", 0.01) # 聚类容差 0.01 米 arcpy.management.AddFeatureClassToTopology(gdb + "/land_ds/land_topo", gdb + "/land_ds/parcels") # 二、加规则:地块间不许重叠、不许留缝 arcpy.management.AddRuleToTopology(gdb + "/land_ds/land_topo", "Must Not Overlap (Area)", gdb + "/land_ds/parcels") arcpy.management.AddRuleToTopology(gdb + "/land_ds/land_topo", "Must Not Have Gaps (Area)", gdb + "/land_ds/parcels") # 三、校验并统计违规 arcpy.management.ValidateTopology(gdb + "/land_ds/land_topo") errors = arcpy.management.ExportTopologyErrors(gdb + "/land_ds/land_topo", gdb, "topo_errors") print("违规点数:", int(arcpy.management.GetCount(gdb + "/topo_errors_point").getOutput(0))) # 输出示例: 违规点数: 23 —— 数字化遗留的重叠与缝隙被逐一标出

校验产出的错误图层会把每个违规位置画成点与面,配合"错误检查器"窗口能定位到具体规则与要素。修复手段因规则而异:重叠用修剪或合并,缝隙用裁剪面补齐或重建公共边。修复后重新校验,数字归零才算过关。

拓扑的价值要用一个数字来体会:全县两万地块手工排查重叠要一周,机器校验只要一分钟,而且可以每天入库后跑一遍。制度投资一次,质检终身。

企业级地理数据库:并发与版本

当编辑者从一人变成一个科室,文件库的"独占编辑"模式就会打架——一个人开着编辑会话,别人只能读。企业级地理数据库用版本化编辑解决:每个人在自己的版本里修改,互不干扰,最后由协调与提交过程合并冲突。地籍变更、管网维护这类常年多人编辑的场景,版本机制是刚需;个人项目则完全不必上——运维一台企业级库的成本远高于它的收益。

选型一句话:一人一库用文件型,多人多年用企业型,中间状态先用文件型加"人肉排班",等真的撞车再升级也不迟。

⚠️ 常见坑:给所有数据集无脑上拓扑。拓扑校验有成本,规则越多越慢,而且有些图层的"缝隙"是数据本性(岛屿湖泊之间天然不连续)。规则只配给真正需要空间纪律的图层,通常是有法定边界意义的面图层与要求连通的网络图层。

要点回顾

  • 四层制度:容器分级、空间参考纪律、属性域约束、拓扑几何校验,层层拦截坏数据
  • 要素数据集:强制成员同坐标系统,按分析主题划分
  • 属性域加子类型:入口拦截非法值,一张表按类型挂不同规则
  • 拓扑三步:建拓扑、加规则、校验修复,机器质检替代人工排查
  • 版本机制:多人并发编辑的解法,个人项目不必上企业级

下一节给图层配档案:数据质量怎么评、元数据怎么写,让拿到这份数据的任何人都能判断它可不可信。


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