feat/3d-radar-volume-ingest #9
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue