通过H2定位板卡,得到定位数据的日志文件,需要提取其中的经度、纬度、航向角。
clc
close all
clear
format long
file = 'C2.log';
datafid=fopen(file,'r');
Freq=[];
Curr=[];
Theta=[];
while ~feof(datafid)
tline=fgetl(datafid);
if strncmp(tline,'纬',1) %如果这一行开头的第一个字符和'f'匹配则
freq=regexp(tline,'\d*\.\d*','match'); %提取这一行的浮点数
Freq=[Freq freq];
end
if strncmp(tline,'经',1)
curr=regexp(tline,'\d*\.\d*','match');
Curr=[Curr curr];
end
if strncmp(tline,'航',1)
theta=regexp(tline,'\d*\.\d*','match');
Theta=[Theta theta];
end
end
Freq=cellfun(@str2num,Freq); %元组中的字符串转数字
Curr=cellfun(@str2num,Curr);
Theta=cellfun(@str2num,Theta);
% disp(Freq)
% disp(Curr)
L = Freq; % 纬度
B = Curr; % 经度
sz = 25;
c = linspace(1,100,length(L));
title(file);
%% 经纬换算高斯坐标
[m,n] = size(Freq);
for i = 1:n
lat = Freq(i);
lon = Curr(i);
a= 6378137.0;
e2 = 0.0066943799013;
latitude2Rad = (pi / 180.0) * lat;
beltNo = floor((lon + 1.5) / 3.0);
L = beltNo * 3;
l0 = lon - L;
tsin = sin(latitude2Rad);
tcos = cos(latitude2Rad);
t = tan(latitude2Rad);
m = (pi / 180.0) * l0 * tcos;
et2 = e2 * tcos^2; % X
et3 = e2 * tsin^2;
X = 111132.9558 * lat - 16038.6496 * sin(2 * latitude2Rad) + 16.8607 * sin(4 * latitude2Rad) - 0.0220 * sin(6 * latitude2Rad);
N = a / sqrt(1 - et3);
x(i) = X + N * t * (0.5 * m^2 + (5.0 - t^2 + 9.0 * et2 + 4 * et2^2) * m^4 / 24.0 + (61.0 - 58.0 * t^2 + t^4) * m^6 / 720.0);
y(i) = 500000 + N * (m + (1.0 - t^2 + et2) * m^3 / 6.0 + (5.0 - 18.0 * t^2 + t^4 + 14.0 * et2 - 58.0 * et2 * t^2) * m^5 / 120.0);
% disp(x)
% disp(y)
end
% x1 = 4045050.76981237;
% y1 = 480313.74478215;
% r1 = 0.01;
% r2 = 0.02;
% r3 = 0.03;
% r4 = 0.04;
% r5 = 0.05;
% rectangle('Position',[x1-r1,y1-r1,2*r1,2*r1],'Curvature',[1,1],'LineWidth',1,'EdgeColor','#77AC30')
% rectangle('Position',[x1-r2,y1-r2,2*r2,2*r2],'Curvature',[1,1],'LineWidth',1,'EdgeColor','#EDB120')
% rectangle('Position',[x1-r3,y1-r3,2*r3,2*r3],'Curvature',[1,1],'LineWidth',1,'EdgeColor','#D95319')
% rectangle('Position',[x1-r4,y1-r4,2*r4,2*r4],'Curvature',[1,1],'LineWidth',1,'EdgeColor','#A2142F')
% rectangle('Position',[x1-r5,y1-r5,2*r5,2*r5],'Curvature',[1,1],'LineWidth',1,'EdgeColor','#7E2F8E')
hold on
scatter(x,y,sz,c,'filled')
hold on
scatter(x(end-20:end),y(end-20:end),sz+15,'filled')
运行结果:
参考代码:(3条消息) matlab 提取特定字符串后的数字_matlab截取字符串后几位_Zaгathustra的博客-CSDN博客