gaozheng
|
509ba35a47
|
feat(geo): build-geo 新增中心线曲线坐标网格化(--curvilinear)+距离加权
取最长线 GPS 轨迹作中心线,把每点投影得(沿路里程 s,带符号横偏 d),
网格 X=s/Y=d/Z=深度,把弯路拉直消假鳍;横向范围用带符号 d 的[1%,99%]分位
(鲁棒于离群桩线、不浪费空白半侧);重叠按到 cell 中心的距离加权(w=1/(1+d^2))
代替等权均值。保留 PCA 版供对照(curvilinear 默认 false)。
GpsTrack 新增 projectToCenterline/resampleAndSmooth(纯函数,含直/弯线单测);
GeoVolumeBuilder 新增 distanceWeight 纯函数。
真实数据(明星路 20 线,cellXY 0.5):曲线版 4487x45x82 填充 68.8%,
PCA 版 4474x52x82 填充 62.2% —— ny 更小(拉直)、填充更密、假鳍明显减少。
|
2026-06-24 15:24:59 +08:00 |
gaozheng
|
8edc1f30ac
|
feat(vtk): build-geo 按真实RTK几何把多线拼成统一路向三维体
新增 GpsTrack(.gps解析+经纬→局部米+里程插值/航向) 与 GeoVolumeBuilder
(PCA路向旋转+多线统一网格重叠均值+量化落盘), gpr_poc 加 build-geo 子命令。
消除顺序拼接退化扁带: 真实明星路20线建体 4474x52x82(≈预测4472x43x81),
填充率62%, 旋转-89.5°, 峰值内存258MB, 各轴≤16384整卷单纹理可渲。
复用 readIprb/IprHeader/GprGeometry/ChunkedVolumeStore/Quant, 未重造IO/store。
|
2026-06-24 12:34:07 +08:00 |
gaozheng
|
81e18ebd2d
|
feat(gpr): 加 assembleGprSurveySlab 装配道区间 slab
只装配 [t0,t1) 道段的 GprSurvey,各通道用 readIprbRange 只读该段,
内存只随 slab 大小。x0=t0*dx 使 slab 世界 X 与全线对齐(B4 拼接靠此)。
抽公共 assembleFromScans helper 复用校验/标尺/Y 升序置换/值转置,
不改 assembleGprSurvey 公开行为。新增 slab 对拍与越界/通道数测试。
|
2026-06-23 21:37:56 +08:00 |
gaozheng
|
c2ec1d34b4
|
feat(io): IprbReader 新增 readIprbRange 道区间读取
只 seek 并读取 [t0,t1) 道,不载全文件,供流式 slab 装配内存有界。
偏移与读取字节数全 64 位防大文件溢出;越界与文件打不开抛 std::runtime_error。
不改动 readIprb 现有行为。
|
2026-06-23 21:29:13 +08:00 |
gaozheng
|
d75a52e519
|
fix(io/gpr): readIprb 以文件大小为权威推导道数
真实明星路数据规律为「道数 == LAST TRACE」(非 lastTrace+1),旧实现硬假设
traces=lastTrace+1 并严格校验文件字节相等,导致真实 .iprb 装配抛错。
改为 traces = fileBytes / (samples*2),要求字节数为 samples*2 整数倍(否则抛),
lastTrace 仅作 header 提示不再决定道数。更新单测:新增
FileSizeIsAuthoritativeNotLastTracePlusOne(lastTrace=N 但文件含 N 道 → traces==N),
ReadsInt16AndLayout/ThrowsOnSizeMismatch 语义不变仍通过。
|
2026-06-23 12:37:42 +08:00 |
gaozheng
|
c15555dd8a
|
feat(io/gpr): 多通道 .iprb+.ord 装配 GprSurvey
assembleGprSurvey 把一条测线若干通道 .iprb(同名 .iprh)+.ord 装配为
geopro::core::GprSurvey:校验各通道 samples 一致、ntraces 取最小值对齐、
按 .ord 横偏 Y 升序重排通道(values 同步置换)、x0/z0=0、dx=道距、
dz=depthOfSample(1,h);通道数与 .ord 有效通道数不符抛 runtime_error。
索引 64 位。纯 C++17,零 Qt/VTK。
|
2026-06-23 11:36:56 +08:00 |
gaozheng
|
0bbed9c0c3
|
feat(io/gpr): GPR 几何-通道横偏解析与采样深度换算
新增 geopro::io::gpr 两个纯 C++17 几何函数:
- parseChannelXOffsets: 解析 .ord 末列==1 的有效通道横向偏移
- depthOfSample: 按物理把采样序号换算为深度米(samples<=1 防除零)
含失败先行的单测,GprGeometry.cpp 接入 geopro_io_gpr,
test 接入 geopro_tests。
|
2026-06-23 10:19:11 +08:00 |
gaozheng
|
0d7f646941
|
feat(io/gpr): 实现 .iprb B-scan 二进制读取器
readIprb 读取 int16 雷达剖面(布局 [trace*samples + s]):
traces=lastTrace+1;校验文件字节数=samples*traces*2,
不符或打不开抛 std::runtime_error。纯 C++17,零 Qt/VTK。
|
2026-06-23 10:00:08 +08:00 |
gaozheng
|
c395921ca8
|
feat(io/gpr): 新增 .iprh 头解析器(纯 C++17,零 Qt/VTK)
- IprHeader/parseIprHeader:按行解析 KEY: value,支持含空格键名
(LAST TRACE/SOIL VELOCITY/DISTANCE INTERVAL)
- SOIL VELOCITY 由 m/µs 统一换算为 m/s 存储(×1e6)
- 缺 SAMPLES/LAST TRACE/CHANNELS 任一抛 std::runtime_error
- CMake 接线:src/io(gpr) 静态库 geopro_io_gpr + tests 链接
- TDD:2 个新用例,全测试套件 100% 通过
|
2026-06-23 09:45:13 +08:00 |