[Python] GAMP结果文件批量统计与绘图

[Python] GAMP结果文件批量统计与绘图

处理逻辑

通过tkinter库点选文件夹,遍历GAMP结果文件夹内所有 .pos 或 .pdop 文件,依次进行绘图操作,pos文件另外计算PPP定位精度RMS与收敛时间,pdop则计算卫星数和pdop均值,并将结果输出至csv文件,方便后续统一进行站点结果数据统计。

pos文件批量统计与绘图

# gamp_pos.py
# Author:LZ-CUMT

# 2021-04-27 v1.0
# 2021-10-06 v1.1 fix the bug of accuracy statistics

import os
import csv
import math
import numpy as np
import matplotlib.pyplot as plt
from tkinter import filedialog

F=[]
foldername = filedialog.askdirectory()
f_list = os.listdir(foldername)
for filename in f_list:
    if os.path.splitext(filename)[1] == '.pos':
        F.append(filename)

filepath = foldername.split('/')
csvfilename=filepath[-2]+'-'+filepath[-1]+'-'+'ppp.csv'
fs = open(foldername + '/'+csvfilename,'w',newline="")
csv_write=csv.writer(fs)
csv_write.writerow(['SAT_NAME','DAY','E','N','U','3D','E','N','U','3D','Use_Rate'])
fs.close()

covgetime = np.zeros([4], dtype=np.float32)
ylib = np.linspace(-1, 1, 11)
Num=0

for filename in F:
    Num=Num+1
    print('*************** Processing the '+str(Num)+'th file ***************')
    print(foldername+'/'+filename)
    f = open(foldername + '/' + filename,'r')
    list1 = f.readlines()
    num = len(list1)
    epoch = np.arange(0, num).reshape((num, 1))
    pos = np.zeros([num, 15], dtype=np.float32)

    for i in range(0, len(list1)):
        list1[i] = list1[i].rstrip('\n')
        if len(list1[i])>0:
            pos[i] = list1[i].split()
        else:
            pos[i] = None
            
    Square = np.zeros([4])
    N = np.zeros([4])
    RMS = np.zeros([4])
    EPON = np.zeros([4])

    for j in range(0,4):
        for i in range(0, len(pos)):
            if pos[i,j+11]!=None:
                if math.isnan(pos[i,j+11])!= True :
                    EPON[j] = EPON[j] + 1
                    if (abs(pos[i, j + 11])<0.1):
                        Square[j] = Square[j] + pos[i, j + 11] ** 2
                        N[j] = N[j] + 1
        if N[j]!=0:
            RMS[j]=math.sqrt(Square[j]/N[j])

    for j in range(0,4):
        for i in range(0, len(pos)-20):
            nannp=np.isnan(pos[i:i+20,j+11])
            if (np.all(nannp== False)): 
                if (np.all(abs(pos[i:i+20,j+11]) <0.1)):
                    covgetime[j] = (i)/2
                    break
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    ax.plot(epoch,pos[:,11:14])
    ax.grid(True, linestyle='--')
    ax.axis([0, num, -1, 1])
    ax.set_yticks(ylib)

    plt.title(filename[0:4].upper())
    plt.ylabel('Error[m]')
    plt.xlabel('Epoch')

    plt.text(1000, -0.55, ' Covengence Time', fontsize=12)
    plt.text(1000, -0.65,'E: '+ str(covgetime[0])+'min', fontsize=12)
    plt.text(1000, -0.75,'N: '+ str(covgetime[1])+'min', fontsize=12)
    plt.text(1000, -0.85,'U: '+ str(covgetime[2])+'min', fontsize=12)
    plt.text(1000, -0.95,'3D:'+ str(covgetime[3])+'min', fontsize=12)

    plt.text(2000, -0.55, 'Positioning RMS', fontsize=12)
    plt.text(2000, -0.65, 'E :'+ str(RMS[0])[0:5]+'m', fontsize=12)
    plt.text(2000, -0.75, 'N :'+ str(RMS[1])[0:5]+'m', fontsize=12)
    plt.text(2000, -0.85, 'U :'+ str(RMS[2])[0:5]+'m', fontsize=12)
    plt.text(2000, -0.95, '3D:'+ str(RMS[3])[0:5]+'m', fontsize=12)
    
    plt.legend(['E','N','U'])

    plt.savefig(foldername + '/' + filename+'.png',dpi=400)
    plt.close()
    plt.show()
    f.close()
    
    fs = open(foldername + '/'+csvfilename,'a',newline="")
    csv_write=csv.writer(fs)
    csv_write.writerow([filename[0:4],int(filename[4:7]),covgetime[0],covgetime[1],covgetime[2],covgetime[3],\
                        RMS[0],RMS[1],RMS[2],RMS[3],EPON[0]/2880])
    fs.close()

pdop文件批量统计与绘图

# gamp_pdop.py
# Author:LZ-CUMT

import os
import csv
import numpy as np
import matplotlib.pyplot as plt
from tkinter import filedialog

F=[]
foldername = filedialog.askdirectory()

f_list = os.listdir(foldername)
for filename in f_list:
    if os.path.splitext(filename)[1] == '.pdop':
        print(foldername+'/'+filename)
        F.append(filename)

filepath = foldername.split('/')
csvfilename=filepath[-2]+'-'+filepath[-1]+'-'+'PDOP.csv'
fs = open(foldername + '/'+csvfilename,'w',newline="")
csv_write=csv.writer(fs)
csv_write.writerow(['STA_NAME','DOY','SUM','G','R','C','E','J','PDOP'])
fs.close()

for filename in F:
    f = open(foldername + '/' + filename,'r')
    list1 = f.readlines()

    num = len(list1)
    epoch = np.arange(0, num).reshape((num, 1))
    pdop = np.zeros([num, 15], dtype=np.float32)
    covgetime = np.arange(0, 4)

    for i in range(0, len(list1)):
        list1[i] = list1[i].rstrip('\n')
        if len(list1[i])>0:
            pdop[i] = list1[i].split()
        else:
            pdop[i] = None    

    meansat=np.mean(pdop,0)
    legendindex=['ALL','G','R','C','E','J','PDOP']
    legendadd=[]
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    for i in range(8,15):
        if meansat[i]!=0 :
            ax.plot(epoch,pdop[:,i])
            legendadd.append(legendindex[i-8])
    ax.grid(True, linestyle='--')
    ax.axis([0, num, 0, max(pdop[:,8])+2])
    plt.title(filename[0:4].upper())
    plt.ylabel('Value')
    plt.xlabel('Epoch')
    plt.legend(legendadd)
    plt.savefig(foldername + '/' + filename+'.png',dpi=400)
    plt.close()
    plt.show()
    f.close()

    fs = open(foldername + '/'+csvfilename,'a',newline="")
    csv_write=csv.writer(fs)
    csv_write.writerow([filename[0:4],int(filename[4:7]),meansat[8],meansat[9],meansat[10],meansat[11],meansat[12],meansat[13],meansat[14]])
    fs.close()

结果示例

GAMP处理后的原始结果文件:
在这里插入图片描述
统计后:
在这里插入图片描述
pos文件绘图:
在这里插入图片描述
pdop文件绘图:
在这里插入图片描述
pos文件统计表csv:
在这里插入图片描述
pdop文件统计表csv:
在这里插入图片描述

  • 2
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值