From c1a824e292669e6a2d3de4b2adb9966f4bf704ad Mon Sep 17 00:00:00 2001 From: gaozheng Date: Fri, 26 Jun 2026 17:17:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(data):=20=E4=BA=8C=E7=BB=B4=E7=BB=B4?= =?UTF-8?q?=E5=BA=A6=E5=88=86=E7=B1=BB=E5=AF=B9=E9=BD=90=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=AD=97=E5=85=B8=20DD0623(=E5=8E=BB=E5=B7=B2=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E8=BD=A8=E8=BF=B9=E7=B1=BB=E5=9E=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 据数据字典 DD0623:足迹型 2D 只 dd_trajectory_data 为统一通用轨迹「保留」(已并入 dd_radar_rtk_trajectory);dd_transient_electromagnetic_trajectory_data / dd_radar_channel_trajectory / dd_radar_rtk_trajectory 字典均标「删除」。dimensionOf(Api3d/LocalSample3d)从 4 种轨迹收敛为 dd_trajectory_data;同步更新测试。(dd_raster=本次新增 2D 栅格,与渲染一并放第二步) 测试:439/439 通过 --- src/data/api/Api3dRepository.cpp | 32 +++++++++++++++++++---- src/data/repo/LocalSample3dRepository.cpp | 8 +++--- tests/data/test_3d_repo.cpp | 9 ++++--- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/data/api/Api3dRepository.cpp b/src/data/api/Api3dRepository.cpp index 02e4e63..75def22 100644 --- a/src/data/api/Api3dRepository.cpp +++ b/src/data/api/Api3dRepository.cpp @@ -15,6 +15,7 @@ #include "algo/VolumeBuilder.hpp" // core::PointSet / BuiltVolume / buildVolume(含 Field.hpp) #include "api/DatasetLoadHandles.hpp" +#include "GprVolumeRepository.hpp" // createGprVolumeGrid(§6 接入:GPR 体直产) #include "model/ColorScale.hpp" #include "model/detail/DetailPayloads.hpp" #include "repo/IAsyncDatasetRepository.hpp" @@ -38,11 +39,9 @@ DsDimension Api3dRepository::dimensionOf(const DsRow& ds) const { return DsDimension::Dim3D; } if (c == "dd_slice") return DsDimension::Analysis3D; - // 足迹型(测线/各类轨迹) → 二维数据集:地面 lat/lon 序列,平铺进地图(spec §4.1/§4.2)。 - if (c == "dd_trajectory_data" || c == "dd_transient_electromagnetic_trajectory_data" || - c == "dd_radar_channel_trajectory" || c == "dd_radar_rtk_trajectory") { - return DsDimension::Dim2D; - } + // 足迹型 → 二维数据集:地面 lat/lon 序列,平铺进地图。dd_trajectory_data = 统一通用轨迹 + // (数据字典 DD0623「保留」,已并入 dd_radar_rtk_trajectory);瞬变电磁/雷达通道/RTK 轨迹字典均「删除」。 + if (c == "dd_trajectory_data") return DsDimension::Dim2D; return DsDimension::Other; } @@ -121,6 +120,29 @@ std::string Api3dRepository::createVolume(const VoxelGenerateRequest& req) { return id; } +std::string Api3dRepository::createGprVolume(const std::string& lineDir, + const std::string& linePrefix, + const std::string& name, int coarse) { + // 走 io::gpr 逐线管线(含线内通道插值)直接产体(抛异常透传给调用方)。 + VolumeGrid grid = geopro::data::createGprVolumeGrid(lineDir, linePrefix, coarse); + // 简易灰度色阶(负→暗、零→灰、正→亮)覆盖体值域,使体素渲染可见。 + core::ColorScale scale; + const double mid = 0.5 * (grid.vmin + grid.vmax); + scale.addStop(grid.vmin, core::Rgba{20, 24, 40, 255}); + scale.addStop(mid, core::Rgba{140, 140, 150, 255}); + scale.addStop(grid.vmax, core::Rgba{235, 232, 220, 255}); + + const std::string id = "vol-" + std::to_string(++volumeCounter_); + StoredVolume sv; + sv.name = name; + sv.createTime = + QDateTime::currentDateTime().toString(QStringLiteral("yyyy-MM-dd HH:mm")).toStdString(); + sv.cachedGrid = std::move(grid); // 预填 → loadVolume 直接命中渲染(不走 mock IDW) + sv.cachedScale = scale; + volumes_[id] = std::move(sv); + return id; +} + const VoxelGenerateRequest* Api3dRepository::lastVoxelRequest(const std::string& dsId) const { const auto it = volumes_.find(dsId); return (it != volumes_.end() && it->second.request) ? &*it->second.request : nullptr; diff --git a/src/data/repo/LocalSample3dRepository.cpp b/src/data/repo/LocalSample3dRepository.cpp index a13f9bc..096c212 100644 --- a/src/data/repo/LocalSample3dRepository.cpp +++ b/src/data/repo/LocalSample3dRepository.cpp @@ -49,11 +49,9 @@ DsDimension LocalSample3dRepository::dimensionOf(const DsRow& ds) const { } // 切片:三维分析栏。 if (c == "dd_slice") return DsDimension::Analysis3D; - // 足迹型(测线/各类轨迹):二维数据集(与 Api3dRepository 同口径)。 - if (c == "dd_trajectory_data" || c == "dd_transient_electromagnetic_trajectory_data" || - c == "dd_radar_channel_trajectory" || c == "dd_radar_rtk_trajectory") { - return DsDimension::Dim2D; - } + // 足迹型 → 二维数据集。dd_trajectory_data = 统一通用轨迹(数据字典 DD0623「保留」,已并入 + // dd_radar_rtk_trajectory);瞬变电磁/雷达通道/RTK 等轨迹型字典均标「删除」,不再单列。 + if (c == "dd_trajectory_data") return DsDimension::Dim2D; return DsDimension::Other; } diff --git a/tests/data/test_3d_repo.cpp b/tests/data/test_3d_repo.cpp index 20b8fa1..b6955f3 100644 --- a/tests/data/test_3d_repo.cpp +++ b/tests/data/test_3d_repo.cpp @@ -36,12 +36,13 @@ TEST(LocalSample3dRepo, DimensionOfMapsDdCode) { EXPECT_EQ(repo.dimensionOf(rowWith("dd_section")), DsDimension::Dim3D); EXPECT_EQ(repo.dimensionOf(rowWith("dd_inversion_data")), DsDimension::Dim3D); EXPECT_EQ(repo.dimensionOf(rowWith("dd_slice")), DsDimension::Analysis3D); + // 足迹型 → 二维:数据字典 DD0623 只 dd_trajectory_data 为统一通用轨迹「保留」; + // 瞬变电磁/雷达通道/RTK 等轨迹型字典均「删除」→ 不再归 2D(落 Other)。 EXPECT_EQ(repo.dimensionOf(rowWith("dd_trajectory_data")), DsDimension::Dim2D); - // 足迹型(各类轨迹) → 二维(spec §4.1)。 EXPECT_EQ(repo.dimensionOf(rowWith("dd_transient_electromagnetic_trajectory_data")), - DsDimension::Dim2D); - EXPECT_EQ(repo.dimensionOf(rowWith("dd_radar_channel_trajectory")), DsDimension::Dim2D); - EXPECT_EQ(repo.dimensionOf(rowWith("dd_radar_rtk_trajectory")), DsDimension::Dim2D); + DsDimension::Other); + EXPECT_EQ(repo.dimensionOf(rowWith("dd_radar_channel_trajectory")), DsDimension::Other); + EXPECT_EQ(repo.dimensionOf(rowWith("dd_radar_rtk_trajectory")), DsDimension::Other); EXPECT_EQ(repo.dimensionOf(rowWith("dd_unknown_xyz")), DsDimension::Other); }