数据管理与质量控制

1. 模块定位

数据管理模块以 tab_dm.py 为入口,当前主要包含两个子页:

  • 数据库
  • 按数据类型检索

虽然界面上页签较少,但代码侧的职责已经覆盖:

  • 元数据索引
  • 文件目录清点
  • 数据预览
  • 栅格/矢量质量检查与修复的基础承载
  • 数据根目录管理

2. 主入口类

2.1 DataManagerTab

位于 tab_dm.py。它负责创建页签容器,并将:

  • DatabaseTab
  • DataBrowserTab

组织进统一的数据管理页。

2.2 DatabaseTab

位于 dm/tab_database.py,是数据库页核心类。

核心职责:

  • 连接 SQLiteManager
  • 管理数据根目录
  • 接收单文件导入和文件夹批量导入
  • 展示元数据表
  • 执行检索、删除、编辑、导入导出数据库
  • 预览数据内容

2.3 DataBrowserTab

位于 dm/tab_databrowser.py,是目录清点与类型浏览页核心类。

核心职责:

  • 生成 inventory
  • 依据数据类型分类展示
  • 支持文件名搜索
  • 显示属性表和预览视图

3. 数据库页字段体系

DatabaseTab.fields 当前包含以下主要字段:

字段 含义
id 记录主键
name 数据名称
type 数据类型
format 格式
path 文件路径
keywords 关键词
crs 坐标参考系统
geometry_type 几何类型
layer_extent 空间范围
no_data_value 无效值
band_count 波段数
created_time 创建时间
last_modified 修改时间
file_size 文件大小
source 来源
description 描述
citation 引用
semantic_category 语义分类

这一结构说明数据库页已经不是简单的文件名清单,而是偏向轻量 GIS 资产目录

4. 工作机制

4.1 数据根目录

数据库页优先从 config.json 读取 data_root。这意味着:

  • 项目可面向一个主要数据仓库运行。
  • 后续导入、检索与预览都可围绕该根目录展开。

4.2 SQLiteManager

SQLiteManager 是数据库层的核心抽象。文档层面需要理解它的定位:

  • 它不是存放大体量栅格数据本体。
  • 它存放的是“文件级元数据、可检索字段和资产索引”。

因此数据库设计更接近:

$$ \text{文件系统} + \text{索引数据库} + \text{可视化预览} $$

4.3 线程安全日志

DatabaseTab 通过 utils.ui_logger.get_threadsafe_logger() 实现线程安全日志输出,避免后台操作直接触碰 UI 控件。

这对于以下场景很重要:

  • 批量导入目录
  • 大型表更新
  • 数据预览构建

5. 按数据类型检索

5.1 inventory 生成

DataBrowserTab 使用 DatasetInventoryGenerator 扫描指定目录并生成 inventory。

输出的 inventory 不是最终数据库,而是目录级清单,适合:

  • 快速浏览
  • 初步分类
  • 批量核查

5.2 核心工作线程

  • InventoryWorker:目录扫描与 inventory 生成
  • PreviewPayloadWorker:预览载荷异步生成

这使得类型检索页在面对大量文件时仍能保持较好的界面响应性。

5.3 预览机制

预览通过下列接口完成:

  • build_preview_widget
  • build_preview_widget_from_payload
  • load_preview_payload

因此预览区不直接绑定具体文件格式逻辑,而是统一走“预览载荷”抽象。

6. 质量控制含义

虽然“栅格检查、自动修复、矢量修复”等模块不都直接在这个页签上展开,但数据管理模块是这些质量控制功能的组织中心。其价值体现在:

  • 分析前先发现投影、无效值、几何错误和属性异常。
  • 对结果资产形成长期可检索索引。
  • 为空间结构分析与遥感生产提供稳定输入。

7. 用户操作建议

推荐工作顺序:

  1. 设置数据根目录。
  2. 导入核心数据到数据库。
  3. 用按数据类型检索页检查目录结构与预览。
  4. 对异常栅格/矢量先做预处理或修复。
  5. 再进入数据生产或空间结构关系分析模块。

8. 二次开发建议

若要继续扩展数据管理模块,优先考虑:

  • 参数库重新接回主页签。
  • 统一接入栅格检查/修复工具页。
  • 扩展数据库字段与标签系统。
  • 增加“引用关系”和“派生关系”追踪,让结果文件能反向追溯来源数据。