feat/3d-radar-volume-ingest #9

Merged
gaozheng merged 17 commits from feat/3d-radar-volume-ingest into main 2026-06-30 19:14:55 +08:00
3 changed files with 34 additions and 0 deletions
Showing only changes of commit d2e7314ffb - Show all commits

View File

@ -91,4 +91,17 @@ std::vector<std::int16_t> readRadarDataCube(const std::string& dataPath,
}
return cube;
}
std::vector<TracePos> parseRadarCor(const std::string& corText) {
std::vector<TracePos> out;
std::istringstream in(corText);
std::string line;
while (std::getline(in, line)) {
if (line.empty() || line.rfind("VERSION", 0) == 0) continue;
std::istringstream ls(line);
TracePos p; std::string ns, ew, m;
if (ls >> p.index >> p.lat >> ns >> p.lon >> ew >> p.elev >> m >> p.solution)
out.push_back(p);
}
return out;
}
} // namespace geopro::io::gpr

View File

@ -37,6 +37,13 @@ double depthSpacingZ(const RadarHeader& h);
std::vector<std::int16_t> readRadarDataCube(const std::string& dataPath,
const RadarHeader& h);
// 规范化 .cor 轨迹单点:序号/纬度/经度/高程/解状态。
struct TracePos { int index = 0; double lat = 0, lon = 0, elev = 0; int solution = 0; };
// 解析 .cor跳过 "VERSION:" 行,每行 [序号 纬度 N/S 经度 E/W 高程 M 解状态]
// (制表/空格分隔)。本期仅解析,为 P1 多线配准预留。
std::vector<TracePos> parseRadarCor(const std::string& corText);
} // namespace geopro::io::gpr
#endif // GEOPRO_IO_GPR_NORMALIZED_RADAR_READER_HPP

View File

@ -62,6 +62,20 @@ TEST(NormalizedRadarData, ReadsPositionMajorCubeLittleEndian) {
EXPECT_EQ(at(0, 1, 0), 10);
}
TEST(NormalizedRadarCor, ParsesRowsSkippingVersion) {
const std::string cor =
"VERSION:1\n"
"1\t317.179340\tN\t472.759046\tE\t49.980000\tM\t4\n"
"12\t317.201303\tN\t472.700649\tE\t51.040000\tM\t4\n";
const auto pts = geopro::io::gpr::parseRadarCor(cor);
ASSERT_EQ(pts.size(), 2u);
EXPECT_EQ(pts[0].index, 1);
EXPECT_DOUBLE_EQ(pts[0].lat, 317.179340);
EXPECT_DOUBLE_EQ(pts[0].lon, 472.759046);
EXPECT_DOUBLE_EQ(pts[1].elev, 51.040000);
EXPECT_EQ(pts[1].solution, 4);
}
TEST(NormalizedRadarData, WrongFileSizeThrows) {
fs::path dir = fs::temp_directory_path() / "radar_data_test";
fs::create_directories(dir);