最近在用RTKLIB处理较长时间的观测数据时,会出现内存不足的问题,这是因为在一开始读取星历和观测文件时,将所有的观测数据都存储到了结构体obss中,在后续定位解算的时候再逐历元处理。感觉这种设计不太合理,星历需要预先读取,但是观测文件应该逐历元读取与处理,否则没法处理较长时间的数据。因此,在原程序的基础上进行了相应修改,区分单点定位和相对定位两种模式。
1 源程序分析
首先观察源代码中观测数据的存储和提取位置。
源代码中观测数据在函数readrnxfp()->readrnxh()读取观测文件头,readrnxobs()->readrnxobsb中读取单历元观测数据存储到obsd_t类型的结构体data中,再通过addobsdata()添加到大的全局结构体obss中。
定位解算时通过procpos()->inputobs()函数逐历元读取观测数据,存储到obsd_t类型结构体obs中,再输入进rtkpos()进行解算。
这样看来,中间的存储过程其实并不必要,可以在procpos()函数中直接读取观测值输入给rtkpos(),修改方案如下:
2 修改方案
(1)在读取观测文件的函数readrnxfp()中进行相应修改,不读取观测数据,直接返回