fix(radar): dd_radar_3d 补进 ddCode→维度映射(dimOf/dimensionOf)

This commit is contained in:
gaozheng 2026-06-29 13:35:47 +08:00
parent 717bdbb70c
commit 1e931e4f85
5 changed files with 19 additions and 4 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
// 切片:三维分析栏。

View File

@ -14,14 +14,16 @@ TEST(DatasetDimension, SplitsByDdCode) {
std::vector<DsRow> 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);

View File

@ -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);
}
// dimensionOfApi与 LocalSample3dRepository 同口径):三维雷达体 dd_radar_3d → 三维spec §6.1)。
TEST(Api3dRepo, DimensionOfMapsDdRadar3dToDim3D) {
StubAsyncRepo dsRepo;
auto frame = std::make_shared<geopro::core::GeoLocalFrame>(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;