function readGPSdata
%观测文件读取程序
clear all;
clc;
[filename,pathname]=uigetfile('*.??O','打开O文件');
fid=fopen(strcat(pathname,filename),'rt');
if fid==-1
msgbox('文件选取出错,读取程序无法运行','warning','warn');
return;
end
fid2=fopen('观测文件备份.txt','wt');
fprintf(fid2,'观测文件数据备份\n');
%读取文件头
while (1)
line=fgets(fid);
%读取一行数据
if (line==-1)
break;
end
if (findstr(line,'APPROX POSITION XYZ')~=0)%测站近似坐标
approxx=str2num(line(1:14));
approxy=str2num(line(15:28));
approxz=str2num(line(29:42));
end
if (findstr(line,'DELTA H/E/N')~=0)%获取天线参数:高,东向、北向的偏心
anth=str2num(line(1:14));
ante=str2num(line(15:28));
anth=str2num(line(29:42));
end
if (findstr(line,'TYPES OF OBSERV')~=0)%观测值种类
signalnum=str2num(line(5:6));
typeNum=1;
for i=1:signalnum%使编号对应为0-L1;1-L2;2-C1;3-P1;4-P2;5-D1;6-D2
ii=11+(i-1)*6;
if (line(ii:ii+1)=='L1')
type(typeNum)=0;
typeNum=typeNum+1;
elseif (line(ii:ii+1)=='L2')
type(typeNum)=1;
typeNum=typeNum+1;
elseif (line(ii:ii+1)=='C1')
type(typeNum)=2;
typeNum=typeNum+1;
elseif (line(ii:ii+1)=='C2')
type(typeNum)=3;
typeNum=typeNum+1;
elseif (line(ii:ii+1)=='P1')
type(typeNum)=4;
typeNum=typeNum+1;
elseif (line(ii:ii+1)=='P2')
type(typeNum)=5;
typeNum=typeNum+1;
elseif (line(ii:ii+1)=='D1')%多普勒频率
type(typeNum)=6;
typeNum=typeNum+1;
elseif (line(ii:ii+1)=='D2')
type(typeNum)=7;
break;
end
end
end
if (findstr(line,'INTERVAL')~=0)%观测历元的间隔
inter=str2num(line(1:11));
end
if (findstr(line,'TIME OF FIRST OBS')~=0)%数据文件中第一个记录的时刻
nian(1,1)=str2num(line(1:6));
yue(1,1)=str2num(line(7:12));
ri(1,1)=str2num(line(13:18));
shi(1,1)=str2num(line(19:24));
fen(1,1)=str2num(line(25:30));
miao(1,1)=str2double(line(31:43));
end
if (findstr(line,'TIME OF LAST OBS')~=0)%数据文件中最后一个记录的时刻
nian(2,1)=str2num(line(1:6));
yue(2,1)=str2num(line(7:12));
ri(2,1)=str2num(line(13:18));
shi(2,1)=str2num(line(19:24));
fen(2,1)=str2num(line(25:30));
miao(2,1)=str2double(line(31:43));
end
if (findstr(line,'# OF SATELLITES')~=0)
satenum=str2num(line(1:6));
end
% if (findstr(line,'PRN / # OF OBS')~=0)
%读取个卫星观测数据的相应数据的个数
%end
if (findstr(line,'END OF HEADER')~=0)
break;
end
end
fprintf(fid2,'测站近似坐标X0=%14.4f',approxx);
fprintf(fid2,' Y0=%14.4f',approxy);
fprintf(fid2,' Z0=%14.4f\n',approxz);
fprintf(fid2,'测站观测间隔 interval=%10.3f\n',inter);
fprintf(fid2,'测站观测开始时间:Begin= ');
fprintf(fid2,'%15s',strcat(num2str(nian(1,1)),'年',num2str(yue(1,1)),'月',num2str(ri(1,1)),'日',num2str(shi(1,1)),':',num2str(fen(1,1)),':',num2str(miao(1,1))));
%fprintf(fid2,'测站观测结束时间:End= ');
%fprintf(fid2,'%15s\n',strcat(num2str(nian(2,1)),'年',num2str(yue(2,1)),'月',num2str(ri(2,1)),'日',num2str(shi(2,1)),':',num2str(fen(2,1)),':',num2str(miao(2,1))));
fprintf(fid2,'历元 卫星PRN号 观测值类型:L1 L2 C1 C2 P1 P2 D1 D2\n');
%读取观测数据
epochnum=1;
while (1)
if(epochnum==120)
tsttNUM=1;
end
if(epochnum==1)
line=fgets(fid);
else
line=fgets(fid);
line=fgets(fid);
end
testLineSize=length(line);
for nn=1:5
testChar=line(1);
if(testLineSize==1||line(1)=='R'||testLineSize<50)
line=fgets(fid);
testLineSize=length(line);
else
break;
end
end
if (line==-1)
break;
end
temp=str2num(line(2:32));
temp(1)=temp(1)+2000;
%组成一个结构数组
obsdata(epochnum).nian=temp(1);
obsdata(epochnum).yue=temp(2);
obsdata(epochnum).ri=temp(3);
obsdata(epochnum).shi=temp(4);
obsdata(epochnum).fen=temp(5);
obsdata(epochnum).miao=temp(6);
fprintf(fid2,'%15s',strcat(num2str(obsdata(epochnum).nian),'年',num2str(obsdata(epochnum).yue),'月',num2str(obsdata(epochnum).ri),'日',num2str(obsdata(epochnum).shi),':',num2str(obsdata(epochnum).fen),':',num2str(obsdata(epochnum).miao)));
obsdata(epochnum).satnum=temp(8);
fprintf(fid2,'观测卫星个数:%2d 个',temp(8));
ConstNum=31;
LineNum=1;
for i=1:obsdata(epochnum).satnum %satnum=temp(8) 观测卫星个数
if(LineNum==1)
ii=ConstNum+i*3;
else
ii=ConstNum+(i-tempSatNum)*3;
end
obsdata(epochnum).satprn(i)=str2num(line(ii:ii+1));
%跳至下一行继续读
lineSize=length(line);
if(ii+3>lineSize&&LineNum==1)
LineNum=LineNum+1;
tempSatNum=i;
line=fgetl(fid);
else if(ii+3>lineSize&&LineNum==2)
LineNum=LineNum+1;
tempSatNum=i;
line=fgetl(fid);
end
end
%fprintf(fid2,'G%2d ',obsdata(epochnum).satprn(i));
end%将测站上所观测到的卫星号全部放入数组中去
%fprintf(fid2,'\n');
for i=1:obsdata(epochnum).satnum
if(i==1)
line=fgets(fid);
else
line=fgets(fid);
line=fgets(fid);
line=fgets(fid);
line=fgets(fid);
end
%第一行
LineSize=length(line);
if(14<= LineSize)
if isspace(line(1:14)) %isspace 判读是否是空格
obsdata(epochnum).dataL1(i)=0;
else
obsdata(epochnum).dataL1(i)=str2num(line(1:14));
end
else
obsdata(epochnum).dataL1(i)=0;
end
if(30<=LineSize)
if isspace(line(17:30))
obsdata(epochnum).dataL2(i)=0;
else
obsdata(epochnum).dataL2(i)=str2num(line(17:30));
end
else
obsdata(epochnum).dataL2(i)=0;
end
if(46<=LineSize)
if isspace(line(33:46))
obsdata(epochnum).dataC1(i)=0;
else
obsdata(epochnum).dataC1(i)=str2num(line(33:46));
end
else
obsdata(epochnum).dataC1(i)=0;
end
if(62<=LineSize)
if isspace(line(49:62))
obsdata(epochnum).dataC2(i)=0;
else
obsdata(epochnum).dataC2(i)=str2num(line(49:62));
end
else
obsdata(epochnum).dataC2(i)=0;
end
if(78<=LineSize)
if isspace(line(65:78))
obsdata(epochnum).dataP1(i)=0;
else
obsdata(epochnum).dataP1(i)=str2num(line(65:78));
end
else
obsdata(epochnum).dataP1(i)=0;
end
%第二行
line=fgets(fid);
LineSize=length(line);
if(14<= LineSize)
if isspace(line(1:14)) %isspace 判读是否是空格
obsdata(epochnum).dataP2(i)=0;
else
obsdata(epochnum).dataP2(i)=str2num(line(1:14));
end
else
obsdata(epochnum).dataP2(i)=0;
- 1
- 2
前往页