空间直角坐标转换成大地坐标matlab代码(附精度)
在实际生产中,通常需要进行空间直角坐标和大地坐标之间的相互转换。精度估计是大地测量数据处理的一项内容,而目前使用的的坐标转换软件中一般都没有提供空间直角坐标与大地坐标之间转换的精度。其中,空间直角坐标至大地坐标的转换常用的迭代法可以表示为:
在文章《空间直角坐标与大地坐标的精度关系式_徐思达》中,作者论通过误差传播律推导了由空间直角坐标转到大地坐标的精度,分析了严密公式和简便公式的精度转换结果的差异,发现两者只有微小差异,所以可以用简便公式。根据其提供的公式,用matlab编写程序实现。
function [llh, sigmallh ] = xyz2llh222(xyz,sigmaxyz)
%
% ... Transform from x,y,z to lat,lon,h
% 精度公式为 《空间直角坐标与大地坐标的精度关系式_徐思达》一文中的简便公式
%deg2rad = pi/180;
a = 6378137;
f = 1/298.257223563;%扁率
e2 = 2*f - f*f;%第一偏心率
rou=180*3600/pi;[junk,num] = size(xyz);for i = 1:num,p = sqrt(xyz(1:2,i)'*xyz(1:2,i));r = sqrt(xyz(:,i)'*xyz(:,i));lon = atan2(xyz(2,i),xyz(1,i));
%
% ... First iteration on lat and h
% - assumes h = 0
%lat = atan2(xyz(3,i)/p,(1-e2));n = a/sqrt((1 - e2*sin(lat)^2));m = (a*(1-e2))/sqrt((1 - e2*sin(lat)^2));h = p/cos(lat) - n;%%%以下公式为参考文献中的简便公式jian1 = (m+h)^2;jian2 = ((n+h)*cos(lat))^2;sigx2 = sigmaxyz(1,i)^2;sigy2 = sigmaxyz(2,i)^2;sigz2 = sigmaxyz(3,i)^2;siglat =(sin(lat)*cos(lon))^2/jian1*sigx2+(sin(lat)*sin(lon))^2/jian1*sigy2+cos(lat)^2/jian1*sigz2;sigmalat=rou*sqrt(siglat); siglon=sin(lon)^2/jian2*sigx2+cos(lon)^2/jian2*sigy2;sigmalon=rou*sqrt(siglon);sigh=(cos(lat)*cos(lon))^2*sigx2+(cos(lat)*sin(lon))^2*sigy2+sin(lat)^2*sigz2;sigmah=sqrt(sigh);
%
% ... Iterate until h converges (should be quick since h << n)
%oldh = -1e9;iter = 0;num = xyz(3,i)/p;while abs(h - oldh) > 0.0001,iter = iter + 1;oldh = h;den = 1 - e2*n/(n+h);lat = atan2(num,den);n = a/sqrt((1 - e2*sin(lat)^2));h = p/cos(lat) - n;end
%llh(1,i) = lat/deg2rad;llh(2,i) = lon/deg2rad;llh(3,i) = h;sigmallh(1,i) = sigmalat;sigmallh(2,i) = sigmalon;sigmallh(3,i) = sigmah;end
可以用下面的代码实现读取时间序列文件,完成转换,并将转换后的经纬度级精度写入指定路径下的新文件中:
clear
file='..\data_xyz\XCNG.xyz';
fid = fopen(file, 'r'); %以只读的方式打开文件
if (fid == -1 )disp(strcat('Error opening file ', file));
elsec = textscan(fid, '%f %f %f %f %f %f %f %f %f %f %f %f'); % 读取文件fclose(fid);yr=c{1}; %第一列为年份mt=c{2}; %第二列为月份dy=c{3}; %第三列为天数tm=decyear(yr,mt,dy);timeseries.time = tm;timeseries.year = yr;timeseries.month= mt;timeseries.day = dy;ndates = length(timeseries.time);t_init = timeseries.time(1);timeseries.xyz = zeros(3,ndates);timeseries.xyz(1,:) = c{4}';%4 5 6列为xyz坐标timeseries.xyz(2,:) = c{5}';timeseries.xyz(3,:) = c{6}';timeseries.sigmaxyz(1,:) = c{7}'; %7 8 9列为精度timeseries.sigmaxyz(2,:) = c{8}';timeseries.sigmaxyz(3,:) = c{9}';[timeseries.llh,timeseries.sigmallh] = xyz2llh222(timeseries.xyz,timeseries.sigmaxyz);% 把xyz转化成经纬度timeseries.llh=timeseries.llh';timeseries.sigmallh=timeseries.sigmallh';%生成llh文件path_file=file(1:3);site=file(13:16);%根据前面的file路径来 如果前面变动 则此处也需要变动paths=[path_file 'llhfile\'];pathfile=[paths site];name=[pathfile '.llh'];fid = fopen(name, 'wt');for i = 1:ndatesfprintf(fid,'%f %f %f %f %f %f %f\n',timeseries.time(i),timeseries.llh(i,1),...timeseries.llh(i,2),timeseries.llh(i,3),timeseries.sigmallh(i,1),...timeseries.sigmallh(i,2),timeseries.sigmallh(i,3));endfclose(fid);
end
参考文献:徐思达, 贾国宪, 王丽红,等. 空间直角坐标与大地坐标的精度关系式[J]. 北京测绘, 2018.
空间直角坐标转换成大地坐标matlab代码(附精度)相关推荐
- 空间直角坐标转换之仿射变换(转)
一.引言 工作开发中常常会遇到坐标系转换的问题,关于如何实现不同坐标系之间的转换的论述非常之多,基于实际应用项目,大都提出了一种较好的解决方法.两年前,我也从网上下载了一篇文章--<坐标 ...
- 【机器人学习】四自由度机械臂运动学轨迹规划分析+运动空间分析+动力学分析(三维模型+matlab代码)
模型与matlab代码下载 https://download.csdn.net/download/yjw0911/85865464) clear; clc close all% theta d a a ...
- 纹理特征描述之自相关函数法 纹理粗糙性与自相关函数的扩展成正比 matlab代码实现
图像中通常采用自相关函数作为纹理测度 自相关函数的定义为: 调用自定义函数 zxcor()对砖墙面和大理石面纹理进行分析: 自定义函数 zxcor(): function [epsilon,eta,C ...
- 四维空间的二维线框投影可视化(附matlab代码)
四维空间的二维线框投影可视化(附matlab代码) 1 三维空间在2维屏幕上的投影 1.1平行投影 1.2透视投影 2 四维空间在2维屏幕上的投影 2.1 四维空间与三维空间的一些区别 2.2 四维空 ...
- matlab仿真点目标,sar合成孔径雷达图像点目标仿真报告(附matlab代码).docx
sar合成孔径雷达图像点目标仿真报告(附matlab代码).docx SAR图像点目标仿真报告徐一凡1SAR原理简介合成孔径雷达(SyntheticApertureRadar,简称SAR)是一种高分辨 ...
- MATLAB应用实战系列NSGA-II多目标优化算法原理及应用实例(附MATLAB代码)
前言 NSGA-Ⅱ是最流行的多目标遗传算法之一,它降低了非劣排序遗传算法的复杂性,具有运行速度快,解集的收敛性好的优点,成为其他多目标优化算法性能的基准. NSGA-Ⅱ算法是 Srinivas 和 D ...
- 数学规划模型总结(附MatLab代码)
数学规划模型总结(附MatLab代码) 概述 定义 一般形式 分类 线性规划(linear programming) 非线性规划(nonlinear programming) 整数规划(integer ...
- 11种图像清晰度评价函数附MATLAB代码
本科毕业论文"基于图像处理的自动对焦技术研究",对焦过程中的一个重要阶段是图像清晰度评价,我用MATLAB实现了4类清晰度评价函数:基于图像梯度的清晰度评价函数.频域评价函数.信息 ...
- 数字水印进阶篇——基于DWT-SVD的数字水印(附matlab代码)
引言 之前写过一篇介绍空间域LSB的数字水印算法,有需要的朋友可以看看 数字水印入门篇--空间域LSB的数字水印(附matlab代码) 因空间域的数字水印是通过直接在图像上改变像素的方式来隐藏水印信息 ...
最新文章
- 设计建造者模式java代码,Java设计模式-建造者模式
- Node.js:Web模块、文件系统
- Python3 简明教程
- Java多线程(十一)之线程池深入分析(上)
- 马尔科夫链和马尔科夫链蒙特卡洛方法
- 为特使构建控制平面的指南-为可插入性构建
- 制作根文件系统时的错误解决
- Leetcode-5199 Smallest String With Swaps(交换字符串中的元素)
- GDI+中发生一般性错误的解决办法(转帖)
- Int VS Integer
- SQL 使用总结二 ( 不同库的日期总结)
- Spring 事务管理tx,aop
- (转)DPDK内存管理05 -- rte_mbuf
- ARM开发7.5.2 基础实训( 6 ) 4×4 矩阵键盘和 2 路 LED 显示系统( 2 )--LPC21XX
- LaTex中 viso及svg转emf
- ubuntu14.04安装skype4.3问题
- CSS3:3D环绕实现
- android 网络编程 笔记,【Android 应用开发】Android 网络编程 API笔记
- 高斯——拉盖尔积分法和高斯——勒让德积分法求积分
- linux基础知识复习学习笔记