MATLAB解算坐标转换7参数

这篇具有很好参考价值的文章主要介绍了MATLAB解算坐标转换7参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

1、布尔莎七参数模型一直被广泛用于测绘领域,不仅仅是几大常用坐标系统之间的七参数、或者是两个独立(建筑)坐标系统之间的七参数,其都可以利用最小二乘求解的方法进行解算。
2、MATLAB作为数学计算编程软件的天花板,其高精度的数据处理方式和简易的语言风格,一直以来很受欢迎。此处,我利用MATLAB作为平台以及布尔莎七参数模型,对WGS_84到XIAN_80两个坐标系统的七参数进行解算。
3、如有错误,还望各位指正,谢谢

一、WGS_84与XIAN_80转换七参数说明

1、两种坐标系统说明

WGS_84坐标系:
其属于地心坐标系,坐标原点位于地球质心,z轴指向BIH1984定义的地级CTP方向,x轴指向BIH1984定义的零子午面和CTP赤道的交点,y轴与xz组成右手坐标系,是世界大地坐标系统。
XIAN_80坐标系:
其属于参心坐标系,坐标原点位于陕西省泾阳县永乐镇,x轴在大地起始子午面内与z轴垂直指向经度0方向,其主要的参数采用国际标准,y轴与xz组成右手坐标系,是中国在1980年设立的全国大地坐标系统。

椭球参数 长半轴a 短半轴b 扁率a 第一偏心率
WGS84椭球 6378137±2(m) 6356752.3142 (m) 1/298.2572236 0.00669437999013
XIAN80椭球 6378140±5(m) 6356755.2882(m) 1/298.2570 0.00669438499959

在此处需要说的就是,由于地球椭球是数学体面,所以其实常见的几种大地坐标系统其椭球参数都相差无几。

坐标形式 x’ y’ z ’ 坐标类型
地理大地坐标 L(经度) B(纬度) H(大地高) 数学坐标系
投影平面坐标 y x z(水准高) 投影坐标系
空间直角坐标 X Y Z 数学坐标系

2、七参数求解公式(布尔莎模型)

(1)七参数

本次利用的是WGS84以及XIAN80分别的三个空间直角坐标系计算的七参数
备注:
若源数据为BLH地理坐标系,可参考的我上一个文章,里面有经纬度转空间直角坐标的转换过程和源码;
若源数据为xyz投影坐标系,可以自行寻找高斯反算的流程和代码进行转换,我将于不久之后发布高斯反算

所谓七参数,就是两个坐标系之间的转换参数,通常用7个参数形式来表示,分别是:
坐标平移参数(dx,dy,dz): ---------原点O1相对于原点O2的平移距离,单位m
坐标旋转参数(rx,ry,rz):---------该坐标系的三个坐标轴相对于另一坐标系的三个坐标轴的旋转角度的余弦值
坐标尺度因子(m):---------该坐标系与另一坐标系之间的尺度变化因子,一般都是无限接近于0,所以一般用(1+m’)表示,程序中m=m’+1

MATLAB解算坐标转换7参数 七参数图示(来源百度百科)

(2)布尔莎模型

所谓布尔莎(Bursa)模型,俗你七参数转换法,是用来转换两个不同椭球之间相应点坐标,因为每个点有坐标和高程,所以最少有三个点才能解算,多余的点要用最小二法求最或然值

图1 线性矩阵形式表示
图2 方程组形式表示

3、转换流程

  • 源数据:
    由于布尔莎模型中含有7个参数,因此需要至少3组或3组以上的数据进行计算,留1组进行最后的验证工作。
    在下面的txt文件8行数据中,前4行表示4个点WGS_84坐标系的空间直角坐标,后4行表示该4点在XIAN _80坐标系的空间直角坐标
    MATLAB解算坐标转换7参数
  • 带入公式最小二乘求参:

由于MATLAB中最小二乘拟合参数的函数很难对高维空间的!多元一次方程组!进行解算,或许是我技术不精没有找到相关函数,故利用普通方法解算,希望读者能够理解

由于数据和涉及的参数比较多,我这里就说一下大概流程,具体可以参考代码

1、将3个点的坐标数据分别带入布尔莎方程组,可以产生9个公式
2、根据最小二乘原理,将上面的9个公式进行移项并分别整体平方,然后相加赋值给S,形成一个总的公式
3、利用此公式对7个参数进行求偏导并分别赋值为0,可产生9个公式
4、将这9个公式联立解得7个参数的值

二、MATLAB代码实现以及解释

程序清单:
importdata函数: 以文件的方式读取文件
diff函数(a=diff(s,b)): 利用公式s对b求偏导,如果s是多元方程,则a的结果是一个式子
solve函数(a=solve(s)): 解算公式s的值,并赋值给a
format long g: 临时关闭科学计数法,以双精度或者浮点数的形式输出

MATLAB代码

clc;
clear all;
filename=importdata("WX_XYZ.txt");
WGS_X=double(filename.data(1:3,1));
WGS_Y=double(filename.data(1:3,2));
WGS_Z=double(filename.data(1:3,3));
XIAN_X=double(filename.data(5:7,1));
XIAN_Y=double(filename.data(5:7,2));
XIAN_Z=double(filename.data(5:7,3));
% X2=dx+m*x1-ry*z1+rz*y1;
% y2=dy+m*y1+rx*z1-rz*x1;
% z2=dz+m*z1-rx*y1+ry*x1;

% y=kx+b

syms dx dy dz m rx ry rz gg
gg(1)=WGS_X(1)-(dx+m*XIAN_X(1)-ry*XIAN_Z(1)+rz*XIAN_Y(1));
gg(2)=WGS_X(2)-(dx+m*XIAN_X(2)-ry*XIAN_Z(2)+rz*XIAN_Y(2));
gg(3)=WGS_X(3)-(dx+m*XIAN_X(3)-ry*XIAN_Z(3)+rz*XIAN_Y(3));

gg(4)=WGS_Y(1)-(dy+m*XIAN_Y(1)+rx*XIAN_Z(1)-rz*XIAN_X(1));
gg(5)=WGS_Y(2)-(dy+m*XIAN_Y(2)+rx*XIAN_Z(2)-rz*XIAN_X(2));
gg(6)=WGS_Y(3)-(dy+m*XIAN_Y(3)+rx*XIAN_Z(3)-rz*XIAN_X(3));

gg(7)=WGS_Z(1)-(dz+m*XIAN_Z(1)-rx*XIAN_Y(1)+ry*XIAN_X(1));
gg(8)=WGS_Z(2)-(dz+m*XIAN_Z(2)-rx*XIAN_Y(2)+ry*XIAN_X(2));
gg(9)=WGS_Z(3)-(dz+m*XIAN_Z(3)-rx*XIAN_Y(3)+ry*XIAN_X(3));

ss=(gg(1))^2+(gg(2))^2+(gg(3))^2+(gg(4))^2+(gg(5))^2+(gg(6))^2+(gg(7))^2+(gg(8))^2+(gg(9))^2;

s_dx=diff(ss,dx)==0;
s_dy=diff(ss,dy)==0;
s_dz=diff(ss,dz)==0;
s_m=diff(ss,m)==0;
s_rx=diff(ss,rx)==0;
s_ry=diff(ss,ry)==0;
s_rz=diff(ss,rz)==0;
[dx,dy,dz,m,rx,ry,rz]=solve(s_dx,s_dy,s_dz,s_m,s_rx,s_ry,s_rz);

check_X=dx+m.*(filename.data(8,1))-ry.*(filename.data(8,3))+rz.*(filename.data(8,2));
check_Y=dy+m.*(filename.data(8,2))+rx.*(filename.data(8,3))-rz.*(filename.data(8,1));
check_Z=dz+m.*(filename.data(8,3))-rx.*(filename.data(8,2))+rz.*(filename.data(8,1));
wucha_xx=(check_X-filename.data(4,1));
wucha_yy=(check_Y-filename.data(4,2));
wucha_zz=(check_Z-filename.data(4,3));


format long g;
result=[];
result(1,:)=[double(dx),double(dy),double(dz)];
result(2,:)=[double(rx),double(ry),double(rz)];
result(3,:)=[double(m),str2double('null'),str2double('null')];
result(4,:)=[double(check_X),double(check_Y),double(check_Z)];
result(5,:)=[double(filename.data(4,1)),double(filename.data(4,2)),double(filename.data(4,3))];
result(6,:)=[double(wucha_xx),double(wucha_yy),double(wucha_zz)]
% xlswrite('C:\Users\稳魂\Desktop\result.xls',result);

程序运行结果

MATLAB解算坐标转换7参数

我们可以将其输出为xls表格文件(最后一行代码),加以编辑成txt文档,可以观察到本次七参数计算结果

MATLAB解算坐标转换7参数文章来源地址https://www.toymoban.com/news/detail-413471.html

到了这里,关于MATLAB解算坐标转换7参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用MATLAB解算炼油厂的选址

    记得有一年的数据建模大赛,试题是炼油厂的选址,最后我们采用MATLAB编写(复制)蒙特卡洛算法,还到了省级一等奖,这里把仅有一些记忆和材料,放到这里来,用来纪念消失的青春。 本文使用素材下载,内含MATLAB代码 使用蒙特卡洛算法解算炼油厂的选址MATLAB程序,提供

    2024年02月10日
    浏览(70)
  • elasticsearch[二]-DSL查询语法:全文检索、精准查询(term/range)、地理坐标查询(矩阵、范围)、复合查询(相关性算法)、布尔查询

    elasticsearch 的查询依然是基于 JSON 风格的 DSL 来实现的。 Elasticsearch 提供了基于 JSON 的 DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有 :查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询 :利用分词器对用户输入内容分词,然后去

    2024年01月18日
    浏览(47)
  • python argparse传入布尔参数不生效的解决方法

    在一个需要用到flag作为信号控制代码中一些代码片段是否运行的,比如\\\"--flag True\\\"或者\\\"--flag False\\\"。 但是古怪的是无法传入False,无论传入True还是False,程序里面都是True的参数,所以这个flag并没有生效,也就失去了意义。 参考代码: 执行上面的代码:python3 test.py --flag False

    2024年02月13日
    浏览(27)
  • MATLAB 构建协方差矩阵,解算特征值和特征向量(63)

    对于某片有待分析的点云,我们希望构建协方差矩阵,计算特征值和特征向量,这是很多算法必要的分析方法,这里提供完整的计算代码(验证正确) !!! 特别需要注意的是:特征值的排序方式 这里计算的特征值按照从小到大的顺序重新排列得到:L1 L2 L3,这样每个特征值都

    2024年04月14日
    浏览(41)
  • Weibull Distribution韦布尔分布的深入详述(2)参数和公式意义

    上一章里面我们主要针对韦伯分布的基本公式和意义进行了阐述,本章我们深入一点,针对韦伯分布的公式里面的三个重要参数的作用和意义进行详细讨论。 韦伯分布从诞生起,就因为他分布的多样性,导致适用于很多不同的应用场景。支持这种广泛应用的基础是,这3个参

    2023年04月08日
    浏览(30)
  • ES 布尔查询中 minimum_should_match 参数使用避坑

    在 Elasticsearch (ES) 中,布尔查询(Boolean Query)是一种查询类型,它允许你组合多个查询子句以控制搜索结果的匹配逻辑。minimum_should_match 是布尔查询中一个重要的参数,用于指定至少应该匹配的子句数量。 minimum_should_match 的值可以是一个具体的数字,也可以是一个百分比。它

    2024年02月09日
    浏览(32)
  • 机器人坐标系转换从局部坐标系转换到世界坐标系

    矩阵方式: 下面是代码: 函数方式: 根据三角函数的特性,可以进行一下简化: 下面是简化前的代码示例:

    2024年04月16日
    浏览(50)
  • 二维坐标和三维坐标相互转换

    原理参考世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换 我的需求是将二维点转换成三维点,旋转三维点,再转换为二维点,此处的旋转跟相机成像的旋转矩阵又没有关系。 假定像素坐标为(u,v),处理的输入数据是像素坐标,图像坐标为(x,y),相机坐标为(Xc

    2024年02月15日
    浏览(33)
  • opencv相机坐标到图像坐标的转换

    相机坐标到图像坐标的转换通常需要使用相机内参矩阵和外参矩阵。在OpenCV中,可以通过cv2.projectPoints()函数实现相机坐标到图像坐标的转换。具体的程序如下: 以上代码中,读取了一张图像和相机参数,使用cv2.projectPoints()函数进行相机坐标到图像坐标的转换,最后在图像上

    2024年02月11日
    浏览(29)
  • 相机照片的像素坐标和世界坐标转换

    相机坐标和世界坐标变换原理就是在4个坐标系直接转换, 如果考虑GIS系统那么还需要考虑空间参考坐标, 空间参考坐标系又需要考虑地理和投影坐标系,  加起来就是6个坐标系. 示例图如下   此段代码基于opencv,  畸变参数未考虑,  采用pnp求解内外参数,封装相机坐标和世界坐标

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包