我正在读取一个RINEX-3.02观测数据文件来进行一些基于时间的卫星ID过滤,并将最终重建它。这将使我对卫星的选择有更多的控制权,随着时间的推移,我允许对RTK后处理的位置解决方案作出贡献。
但是,对于这个部分,我只是使用:
下面是一个样本,上面有三个时间戳的观测结果。
注意:我没有必要解析来自标头的数据。
3.02 OBSERVATION DATA M: Mixed RINEX VERSION / TYPE
CONVBIN 2.4.2 20130731 223656 UTC PGM / RUN BY / DATE
log: /home/ruffin/Documents/Data/in/FlagStaff_center/FlagStaCOMMENT
format: u-blox COMMENT
MARKER NAME
MARKER NUMBER
MARKER TYPE
OBSERVER / AGENCY
REC # / TYPE / VERS
ANT # / TYPE
808673.9171 -4086658.5368 4115497.9775 APPROX POSITION XYZ
0.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N
G 4 C1C L1C D1C S1C SYS / # / OBS TYPES
R 4 C1C L1C D1C S1C SYS / # / OBS TYPES
S 4 C1C L1C D1C S1C SYS / # / OBS TYPES
2013 7 28 0 27 28.8000000 GPS TIME OF FIRST OBS
2013 7 28 0 43 43.4010000 GPS TIME OF LAST OBS
G SYS / PHASE SHIFT
R SYS / PHASE SHIFT
S SYS / PHASE SHIFT
0 GLONASS SLOT / FRQ #
C1C 0.000 C1P 0.000 C2C 0.000 C2P 0.000 GLONASS COD/PHS/BIS
END OF HEADER
> 2013 7 28 0 27 28.8000000 0 10
G10 20230413.601 76808.847 -1340.996 44.000
G 4 20838211.591 171263.904 -2966.336 41.000
G12 21468211.719 105537.443 -1832.417 43.000
S38 38213212.070 69599.2942 -1212.899 45.000
G 5 22123924.655 -106102.481 1822.942 46.000
G25 23134484.916 -38928.221 656.698 40.000
G17 23229864.981 232399.788 -4048.368 41.000
G13 23968536.158 6424.1143 -123.907 28.000
G23 24779333.279 103307.5703 -1805.165 29.000
S35 39723655.125 69125.5242 -1209.970 44.000
> 2013 7 28 0 27 29.0000000 0 10
G10 20230464.937 77077.031 -1341.254 44.000
G 2 20684692.905 35114.399 -598.536 44.000
G12 21468280.880 105903.885 -1832.592 43.000
S38 38213258.255 69841.8772 -1212.593 45.000
G 5 22123855.354 -106467.087 1823.084 46.000
G25 23134460.075 -39059.618 657.331 40.000
G17 23230018.654 233209.408 -4048.572 41.000
G13 23968535.044 6449.0633 -123.060 28.000
G23 24779402.809 103668.5933 -1804.973 29.000
S35 39723700.845 69367.3942 -1208.954 44.000
> 2013 7 28 0 27 29.2000000 0 9
G10 20230515.955 77345.295 -1341.436 44.000
G12 21468350.548 106270.372 -1832.637 43.000
S38 38213304.199 70084.4922 -1212.840 45.000
G 5 22123786.091 -106831.642 1822.784 46.000
G25 23134435.278 -39190.987 657.344 40.000
G17 23230172.406 234019.092 -4048.079 41.000
G13 23968534.775 6473.9923 -125.373 28.000
G23 24779471.004 104029.6643 -1805.983 29.000
S35 39723747.025 69609.2902 -1209.259 44.000 如果我真的要做一个自定义解析器,
另一件棘手的事是卫星身份证来来去去,
(如卫星“G2”和“G4”所示)
(另外,他们在ID中也有空格)
所以当我把它们读入DataFrame时,
我需要制作新的列标签(还是MultiIndex的行标签?)当我找到他们的时候。
我一开始以为这是一个MultiIndex问题,
但我不太确定熊猫read_csv能做什么
跳转到用DataFrame读取MultiIndex对象
有什么建议吗?
有关消息来源如有兴趣:
发布于 2013-08-02 23:48:28
以下是我最后所做的
df = readObs(indir, filename)
df.set_index(['%_GPST', 'satID'])注意,我只是在构建完之后设置了新的MultiIndex。

def readObs(dir, file):
df = pd.DataFrame()
#Grab header
header = ''
with open(dir + file) as handler:
for i, line in enumerate(handler):
header += line
if 'END OF HEADER' in line:
break
#Grab Data
with open(dir + file) as handler:
for i, line in enumerate(handler):
#Check for a Timestamp lable
if '> ' in line:
#Grab Timestamp
links = line.split()
index = datetime.strptime(' '.join(links[1:7]), '%Y %m %d %H %M %S.%f0')
#Identify number of satellites
satNum = int(links[8])
#For every sat
for j in range(satNum):
#just save the data as a string for now
satData = handler.readline()
#Fix the names
satdId = satData.replace("G ", "G0").split()[0]
#Make a dummy dataframe
dff = pd.DataFrame([[index,satdId,satData]], columns=['%_GPST','satID','satData'])
#Tack it on the end
df = df.append(dff)
return df, header不过,使用虚拟数据帧似乎并不是最优雅的。
发布于 2013-08-02 17:08:40
我建议写一个自定义解析器,逐行读取文件。
“G5”之间的空格是编写自定义解析器的进一步提示。
在这种情况下,你不能简单地用空格来分割参数,
您必须同时读取所有三个字符,并删除第一个字符,并将其余两个字符(“5")转换为一个卫星数字。
https://stackoverflow.com/questions/18021056
复制相似问题