MATLAB读取RTK定位数据日志,并将经纬度转换成高斯坐标

通过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博客

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: RTK(Real-Time Kinematic)是一种实时动态测量技术,能够提供高精度的三维定位和姿态信息。RTK技术主要通过差分GPS技术来实现,通过测量接收器与参考站之间的延迟差值,进行高精度的定位计算。 RTK定位算法在Matlab中可以实现。Matlab提供了丰富的工具和函数来处理和计算GPS数据。首先,需要加载GPS数据并对其进行前处理,例如预处理和卫星轨道拟合等。然后,可以利用Matlab中的GNSS工具箱来进行RTK解算,该工具箱提供了RTK解算所需的函数和算法。 RTK定位算法的核心是差分定位和多路径抑制。差分定位通过比较接收器与参考站之间的信号延迟差异来减小定位误差,并提高定位精度。多路径抑制是指通过处理和筛选接收器接收到的多路径反射信号,以减小定位误差。 使用Matlab进行RTK定位算法开发时,需要注意数据处理和误差补偿等方面的技术细节。此外,还可以根据需要添加滤波和优化算法来进一步提高定位精度。 总之,RTK定位算法在Matlab中可以很好地实现。Matlab提供了用于加载、处理和计算GPS数据的函数和工具,可以利用这些工具来实现RTK解算,并通过多路径抑制和差分定位来提高定位精度。 ### 回答2: RTK定位算法是一种基于全球卫星导航系统(GNSS)的高精度定位技术。RTK代表实时运动动态态定位,它通过使用双频GNSS接收器来接收来自多个卫星的信号并进行数据处理,从而提供具有亚米级精度的实时定位结果。 在RTK定位算法中,Matlab是一个常用的工具,用于处理和分析GNSS数据Matlab具有强大的数学计算功能和丰富的绘图功能,使RTK定位算法的实现更加便捷和高效。 Matlab可以用于处理RTK定位算法所需的各种数据,如接收器的原始观测数据,卫星星历数据和地球大气数据。它可以进行数据预处理,如去除噪声和修正数据的非理想效果。然后,Matlab可以执行以解算接收器位置和钟差为目标的算法,如单差算法和双差算法。这些算法利用多个卫星信号之间的差分来消除大气延迟等误差,以获得更准确的定位结果。 此外,Matlab还可以用于分析和评估定位结果的精度和可靠性。它可以生成各种图表和图像,用于可视化和比较不同算法和参数设置的定位性能。Matlab还可以进行误差分析,包括卫星几何条件和信号强度对精度的影响。 总之,RTK定位算法的实现和分析离不开Matlab的支持。Matlab提供了丰富的功能和工具,使得RTK定位算法在实践中更加可行和有效。它为我们提供了一种方便的方式来处理和分析GNSS数据,并优化定位结果的精度和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值