🔎 按数据类型检索(目录清点 × 预览)

面板:按数据类型检索 核心实现:tab_databrowser.py(UI & 交互)、dm/dataset_inventory_generator.py(目录清点与分组)、dm/data_preview.py(类型化预览)、dm/vector_auto_fix_viewer.py(矢量预览与属性表桥接)。


① 功能概述

目标:针对任意“数据根目录”,自动清点所有文件,按数据类型(栅格/矢量/表格/NPZ/文本等)进行归类展示;在同名“成套文件”(如 Shapefile 多文件、GeoTIFF 配套文件)下聚合,并提供一键预览属性表查看特点

  • 一键选择文件夹,自动生成目录清单(inventory.csv)并载入界面;左侧类型→文件两级列表,右侧文件详情 + 预览
  • 对 Shapefile 等多文件格式进行“同名聚合”,识别数据类型(如 “Shapefile / GeoTIFF with world file / Raster Package / NetCDF” 等)。
  • 预览自动分派:矢量用 Leaflet、栅格自动色阶拉伸、CSV/Excel 前 N 行表格、NPZ 列出数组结构与统计。
  • 对矢量提供 属性表(Attribute Table) 弹窗与 GeoJSON 导出(通过 Qt WebChannel 桥接)。

② 面板结构与交互

USDA-GeoProdStudio

USDA-GeoProdStudio

USDA-GeoProdStudio

布局

  • 顶部:数据地址(路径输入 + “选择路径”)、搜索框(关键字检索文件名)。
  • 中部:左右分栏。左侧:类型列表 + 文件列表(同名聚合结果)。右侧:文件详情表(批量列出同名套件)+ 预览区域。
  • 预览区域:根据点击记录智能选择“主文件”进行预览(Shapefile 优先 .shp,否则按 .tif → .geojson → .json → .csv … 的优先级)。

关键交互

  1. 选择路径 → 自动清点并生成 inventory.csv,加载分组与聚类结果。
  2. 点击左侧类型 → 中列显示该类型下文件;点击文件 → 右侧表格列出同名套件的全部成员(扩展名、相对/绝对路径、大小、时间等),同时刷新预览。
  3. 搜索 → 对“文件名”关键字(大小写不敏感)进行过滤,结果以“🔎 搜索结果”显示。
  4. 矢量扩展操作:在预览中调用 属性表(QDialog 展示全部字段)或 导出 GeoJSON(用户选择目标路径)。

③ 数据清点与分组(Inventory)

机制 / 实现

  • 递归扫描根目录,按同名主干聚合(例如 roads.shp/.shx/.dbf/.prj 归为一组)。双扩展(如 .tif.vat.dbf)被正确识别,主干名仍保持一致。
  • 类型判别:综合扩展名集合识别数据类型(Shapefile、GeoTIFF+TFW、Raster Package、NetCDF、ASCII Grid、ERDAS、CSV/JSON 组合表、VAT 表等),否则回退“其他”。
  • 生成汇总表(每组一行),包括:主文件名、扩展名列表、相对/完整路径(首成员)、文件总数、总大小、最早/最新修改时间、判定的数据类型,并写出为 inventory.csv
  • 同时保留 grouped_info(同名组 → 成员清单),供 UI 右侧详情表使用。

汇总表字段(inventory.csv)

字段 说明
文件名 主干名(同名聚合的 key)
扩展名列表 该组包含的去重扩展名(逗号分隔)
相对路径(首文件)/完整路径(首文件) 组内首个成员的路径信息
文件总数 / 总大小(KB) 该组成员计数与大小总和
最早/最新修改时间 该组成员时间范围
数据类型 基于扩展组合的类型识别结果

(以上由 DatasetInventoryGenerator.generate_inventory() 生成并保存。)


④ 预览机制(按类型分派)

  • CSV/TSV/Excel:读取前 N 行(默认 100)渲染为表格控件。

  • TXT/JSON/XML:纯文本只读展示。

  • 矢量(SHP/GPKG/GeoJSON):自动投影为 EPSG:4326(必要时转换为临时 GeoJSON),在内置 Leaflet 页中渲染;支持 WebChannel 桥接:

    • showAttributes → 触发主界面弹出属性表
    • exportVector导出 GeoJSON 到用户指定位置; 对象通过 VectorExportBridge 注册,并持有引用防止被 GC 回收。
  • 栅格(TIF/TIFF):创建 Leaflet 预览(自动适配拉伸和显示设置)。

  • NPZ:列出数组键、shape、dtype、总元素数、有效/无效计数,并打印前若干行数据(按阈值缩略)。


⑤ 面板字段与参数(一览)

分组 字段/控件 类型 默认/示例 说明
路径与搜索 数据地址 文本/按钮 根目录路径 + “选择路径”对话框。
搜索关键字 文本/按钮 基于文件名的模糊查询;回车或点“搜索”。
类型与文件 类型列表 列表 自动 根据分类配置与聚合结果填充;点击触发右侧刷新。
文件列表(同名组) 列表 自动 展示该类型下的文件主名;点击进入“详情+预览”。
详情与预览 文件详情表 表格 自动 展示该组全部成员:扩展名/相对/完整路径/大小/时间;自适应列宽。
预览区域 视图 自动 按优先级选择主文件进行预览(优先 .shp.tif.geojson…)。
矢量扩展操作 按钮(在预览中) “查看属性表”“导出 GeoJSON”(通过桥接)。

⑥ 内部逻辑要点(开发者视角)

  1. 分类来源:读取 dm/data_config.json 中的分类项(含 name/type/viewer/extensions),用于按数据类型分组与 UI 左侧类型列表填充。
  2. 两阶段分类:先按“数据类型字符串”匹配分类(get_category_by_datatype),不命中则回退到“扩展名列表”匹配(get_category_by_extensions)。
  3. 同名聚合:以“主干名”作为 key 聚合扩展成员,DatasetInventoryGenerator 负责生成 grouped_info 与统计信息。
  4. 预览选择:表格点击任一成员,会收集同名组里所有候选扩展,遵循优先级(.shp, .tif, .geojson, .json, .csv, .xlsx, .xls, .txt)选择主文件。Shapefile 组将强制选用 .shp
  5. 属性表与导出:在 vector_auto_fix_viewer 内注册 VectorExportBridgeshowAttributes 通过信号回传路径,主界面以 GeoPandas 读取并用 QTableWidget 展示;exportVector 弹出保存对话框复制 GeoJSON。

⑦ 日志与排错(常见提示)

  • Saved to: .../inventory.csv:目录清单已生成。
  • ⚠️ 暂不支持该类型(.ext)的文件预览:当前文件类型无预览器。
  • ❌ 无法读取或转换矢量数据 / ❌ 加载 HTML 失败:矢量预览链路故障,多因缺少驱动/GeoPackage 空图层/HTML 模板缺失。
  • ❌ 预览加载失败: ...:预览构建器抛错(编码/权限/大文件)。
  • ❌ 没有找到匹配的文件(搜索结果)/ ⚠️ 没有找到支持预览的主文件类型:关键字无匹配或同名组缺少主文件。

⑧ 使用建议(实践优选)

  1. 先清点后检索:先“选择路径”生成 inventory.csv,再做类型/关键字检索,可显著加快响应。
  2. 保持同名规范:对于 Shapefile/GeoTIFF 套件,确保同名前缀一致,有利于分组与预览选择。
  3. 优先查看主文件:在详情表点击 .shp/.tif 行通常更快进入预览。
  4. 表格/NPZ 大文件:预览仅载入前 N 行/简表统计;深度分析建议外部工具处理原文件。
  5. 属性表很大时:可在预览中先定位要素范围,再选择“导出 GeoJSON”做离线处理。