On this page
article
[数据检索]按数据类型检索(目录清点 × 预览)
🔎 按数据类型检索(目录清点 × 预览)
面板:按数据类型检索 核心实现:
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 桥接)。
② 面板结构与交互
布局
- 顶部:数据地址(路径输入 + “选择路径”)、搜索框(关键字检索文件名)。
- 中部:左右分栏。左侧:类型列表 + 文件列表(同名聚合结果)。右侧:文件详情表(批量列出同名套件)+ 预览区域。
- 预览区域:根据点击记录智能选择“主文件”进行预览(Shapefile 优先
.shp,否则按.tif → .geojson → .json → .csv …的优先级)。
关键交互
- 选择路径 → 自动清点并生成
inventory.csv,加载分组与聚类结果。 - 点击左侧类型 → 中列显示该类型下文件;点击文件 → 右侧表格列出同名套件的全部成员(扩展名、相对/绝对路径、大小、时间等),同时刷新预览。
- 搜索 → 对“文件名”关键字(大小写不敏感)进行过滤,结果以“🔎 搜索结果”显示。
- 矢量扩展操作:在预览中调用 属性表(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”(通过桥接)。 |
⑥ 内部逻辑要点(开发者视角)
- 分类来源:读取
dm/data_config.json中的分类项(含name/type/viewer/extensions),用于按数据类型分组与 UI 左侧类型列表填充。 - 两阶段分类:先按“数据类型字符串”匹配分类(
get_category_by_datatype),不命中则回退到“扩展名列表”匹配(get_category_by_extensions)。 - 同名聚合:以“主干名”作为 key 聚合扩展成员,
DatasetInventoryGenerator负责生成grouped_info与统计信息。 - 预览选择:表格点击任一成员,会收集同名组里所有候选扩展,遵循优先级(
.shp,.tif,.geojson,.json,.csv,.xlsx,.xls,.txt)选择主文件。Shapefile 组将强制选用.shp。 - 属性表与导出:在
vector_auto_fix_viewer内注册VectorExportBridge;showAttributes通过信号回传路径,主界面以 GeoPandas 读取并用QTableWidget展示;exportVector弹出保存对话框复制 GeoJSON。
⑦ 日志与排错(常见提示)
Saved to: .../inventory.csv:目录清单已生成。⚠️ 暂不支持该类型(.ext)的文件预览:当前文件类型无预览器。❌ 无法读取或转换矢量数据/❌ 加载 HTML 失败:矢量预览链路故障,多因缺少驱动/GeoPackage 空图层/HTML 模板缺失。❌ 预览加载失败: ...:预览构建器抛错(编码/权限/大文件)。❌ 没有找到匹配的文件(搜索结果)/⚠️ 没有找到支持预览的主文件类型:关键字无匹配或同名组缺少主文件。
⑧ 使用建议(实践优选)
- 先清点后检索:先“选择路径”生成
inventory.csv,再做类型/关键字检索,可显著加快响应。 - 保持同名规范:对于 Shapefile/GeoTIFF 套件,确保同名前缀一致,有利于分组与预览选择。
- 优先查看主文件:在详情表点击
.shp/.tif行通常更快进入预览。 - 表格/NPZ 大文件:预览仅载入前 N 行/简表统计;深度分析建议外部工具处理原文件。
- 属性表很大时:可在预览中先定位要素范围,再选择“导出 GeoJSON”做离线处理。