6

我正在阅读 [RINEX-3.02](第 60 页)观测数据文件以进行一些基于时间的卫星 ID 过滤,并最终将在稍后重建它。这将使我能够更好地控制我允许通过 RTK 后处理随着时间的推移为位置解决方案做出贡献的卫星选择。

不过,专门针对这一部分,我只是在使用:

  • [python-3.3]
  • [熊猫]
  • [麻木]

这是一个带有前三个时间戳观察的样本。
注意:我没有必要从标题中解析数据。

     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  

如果我必须制作一个自定义解析器,
另一个棘手的事情是卫星 ID 会随着时间的推移而变化,
(如卫星“G 2”和“G 4”所示)
(加上它们在 ID 中也有空格)
所以我将它们读入 DataFrame,
我需要在找到它们时制作新的列标签(或 MultiIndex 的行标签?)。

我最初认为这可能是一个 MultiIndex 问题,
但我不太确定 pandas read_csv 可以做任何事情
Jump to Reading DataFrame objects with MultiIndex

有什么建议么?

有兴趣的相关来源:

4

2 回答 2

3

这是我最终做的

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-02T23:48:28.107 回答
1

我建议编写一个自定义解析器,逐行读取文件。

“G 5”中间的空格是编写自定义解析器的进一步提示。
在这种情况下,您不能简单地按空格拆分参数,
您必须一次读取所有 3 个字符,并删除第一个字符,并将剩余的两个(“5”)转换为卫星编号。

于 2013-08-02T17:08:40.190 回答