From 1e931e4f85757a16e8c61dea04a5e0b24b92a67f Mon Sep 17 00:00:00 2001 From: gaozheng Date: Mon, 29 Jun 2026 13:35:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(radar):=20dd=5Fradar=5F3d=20=E8=A1=A5?= =?UTF-8?q?=E8=BF=9B=20ddCode=E2=86=92=E7=BB=B4=E5=BA=A6=E6=98=A0=E5=B0=84?= =?UTF-8?q?(dimOf/dimensionOf)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/DatasetDimension.cpp | 2 +- src/data/api/Api3dRepository.cpp | 2 +- src/data/repo/LocalSample3dRepository.cpp | 2 +- tests/app/test_dataset_dimension.cpp | 4 +++- tests/data/test_3d_repo.cpp | 13 +++++++++++++ 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/app/DatasetDimension.cpp b/src/app/DatasetDimension.cpp index 91d85db..b4c1e2d 100644 --- a/src/app/DatasetDimension.cpp +++ b/src/app/DatasetDimension.cpp @@ -7,7 +7,7 @@ namespace { enum class Dim { D3, D2, Analysis, Other }; Dim dimOf(const std::string& c) { if (c == "dd_voxel" || c == "dd_Structual3D" || c == "dd_Property3D" || - c == "dd_section" || c == "dd_inversion_data") + c == "dd_section" || c == "dd_inversion_data" || c == "dd_radar_3d") return Dim::D3; if (c == "dd_slice") return Dim::Analysis; if (c == "dd_trajectory_data") return Dim::D2; diff --git a/src/data/api/Api3dRepository.cpp b/src/data/api/Api3dRepository.cpp index ba19ad1..bceb73f 100644 --- a/src/data/api/Api3dRepository.cpp +++ b/src/data/api/Api3dRepository.cpp @@ -40,7 +40,7 @@ DsDimension Api3dRepository::dimensionOf(const DsRow& ds) const { // TODO(P3): 与 LocalSample3dRepository 重复,宜提取共享映射(后续清理)。 const std::string& c = ds.ddCode; if (c == "dd_voxel" || c == "dd_Structual3D" || c == "dd_Property3D" || c == "dd_section" || - c == "dd_inversion_data") { + c == "dd_inversion_data" || c == "dd_radar_3d") { return DsDimension::Dim3D; } if (c == "dd_slice") return DsDimension::Analysis3D; diff --git a/src/data/repo/LocalSample3dRepository.cpp b/src/data/repo/LocalSample3dRepository.cpp index 096c212..17f3a7b 100644 --- a/src/data/repo/LocalSample3dRepository.cpp +++ b/src/data/repo/LocalSample3dRepository.cpp @@ -44,7 +44,7 @@ DsDimension LocalSample3dRepository::dimensionOf(const DsRow& ds) const { const std::string& c = ds.ddCode; // 真三维体 / 体素 / 帘面(dd_section/反演剖面摆成竖直帘面)入三维数据集。 if (c == "dd_voxel" || c == "dd_Structual3D" || c == "dd_Property3D" || c == "dd_section" || - c == "dd_inversion_data") { + c == "dd_inversion_data" || c == "dd_radar_3d") { return DsDimension::Dim3D; } // 切片:三维分析栏。 diff --git a/tests/app/test_dataset_dimension.cpp b/tests/app/test_dataset_dimension.cpp index 72cbc22..6d5852d 100644 --- a/tests/app/test_dataset_dimension.cpp +++ b/tests/app/test_dataset_dimension.cpp @@ -14,14 +14,16 @@ TEST(DatasetDimension, SplitsByDdCode) { std::vector in{ row("a", "dd_section"), // 3D row("b", "dd_voxel"), // 3D + row("f", "dd_radar_3d"), // 3D(三维雷达体,spec §6.1) row("c", "dd_trajectory_data"), // 2D row("d", "dd_slice"), // Analysis row("e", "dd_unknownxyz"), // Other -> not in any bucket }; DimBuckets b = splitByDimension(in); - ASSERT_EQ(b.dim3D.size(), 2u); + ASSERT_EQ(b.dim3D.size(), 3u); EXPECT_EQ(b.dim3D[0].id, "a"); EXPECT_EQ(b.dim3D[1].id, "b"); + EXPECT_EQ(b.dim3D[2].id, "f"); ASSERT_EQ(b.dim2D.size(), 1u); EXPECT_EQ(b.dim2D[0].id, "c"); ASSERT_EQ(b.analysis.size(), 1u); diff --git a/tests/data/test_3d_repo.cpp b/tests/data/test_3d_repo.cpp index 32d68c1..2785fa8 100644 --- a/tests/data/test_3d_repo.cpp +++ b/tests/data/test_3d_repo.cpp @@ -42,6 +42,8 @@ TEST(LocalSample3dRepo, DimensionOfMapsDdCode) { EXPECT_EQ(repo.dimensionOf(rowWith("dd_Property3D")), DsDimension::Dim3D); EXPECT_EQ(repo.dimensionOf(rowWith("dd_section")), DsDimension::Dim3D); EXPECT_EQ(repo.dimensionOf(rowWith("dd_inversion_data")), DsDimension::Dim3D); + // 三维雷达体(数据字典 DD0623 dd_radar_3d)→ 三维数据集(spec §6.1)。 + EXPECT_EQ(repo.dimensionOf(rowWith("dd_radar_3d")), DsDimension::Dim3D); EXPECT_EQ(repo.dimensionOf(rowWith("dd_slice")), DsDimension::Analysis3D); // 足迹型 → 二维:数据字典 DD0623 只 dd_trajectory_data 为统一通用轨迹「保留」; // 瞬变电磁/雷达通道/RTK 等轨迹型字典均「删除」→ 不再归 2D(落 Other)。 @@ -155,6 +157,17 @@ TEST(Api3dRepo, LoadMapLineNullHandleCallsOnError) { EXPECT_TRUE(errCalled); } +// dimensionOf(Api,与 LocalSample3dRepository 同口径):三维雷达体 dd_radar_3d → 三维(spec §6.1)。 +TEST(Api3dRepo, DimensionOfMapsDdRadar3dToDim3D) { + StubAsyncRepo dsRepo; + auto frame = std::make_shared(22.0, 114.0); + Api3dRepository repo(dsRepo, frame); + + EXPECT_EQ(repo.dimensionOf(rowWith("dd_radar_3d")), DsDimension::Dim3D); + EXPECT_EQ(repo.dimensionOf(rowWith("dd_voxel")), DsDimension::Dim3D); + EXPECT_EQ(repo.dimensionOf(rowWith("dd_unknown_xyz")), DsDimension::Other); +} + // volumeInfo:未知 dsId(非三维体)→ 返回 false,不弹空对话框。 TEST(Api3dRepo, VolumeInfoUnknownIdReturnsFalse) { StubAsyncRepo dsRepo;