WGS84GPS坐标与大地坐标系互相转化

2023-05-16

大地坐标表示顺序为:纬度B、经度L、海拔H
空间直角坐标表示方法:X、Y、Z

进行地图投影等价于将BLH转换为XYZ,涉及到两个椭球体以及坐标系之间的转换,本文主要讨论WGS84坐标系下BLH与XYZ相互转换的办法。

WGS84坐标系的参数:
已知长半轴a=6378137 ,
WGS84椭球扁率:f=1/298.257223563
椭球扁率f=(a-b)/a ,可求出b,
椭球第一偏心率:ee=(aa-bb)/aa,带入可求得e
W为第一辅助系数:W=√(1-e²sin²B) B为纬度
N为椭圆曲率半径:N=a/W
在这里插入图片描述

用python代码写出:

import math
def get_coordinate(latitude,longitude,altitude):
	B=math.radians(latitude);
	L=math.radians(longitude);
	H=altitude;
	f=1/298.257223563;
	r=6378137;
	b=r*(1-f);
	e=math.sqrt(2*f-f*f);
	N=r/math.sqrt(1-e*e*math.sin(B)*math.sin(B));
	data =[(N+H)*math.cos(B)*math.cos(L),(N+H)*math.cos(B)*math.sin(L),(N*(1-e*e)+H)*math.sin(B)];
	return data;

java语言写成了一个方法:

	public static double[] get_coordinate(double latitude,double longitude,double altitude){
		double B=Math.toRadians(latitude) ,L=Math.toRadians(longitude) ,H=altitude,x,y,z;
		double f=1/298.257223563,r=6378137;
		double b=r*(1-f),e=Math.sqrt(2*f-f*f);
		double N=r/Math.sqrt(1-e*e*Math.sin(B)*Math.sin(B));
		x=(N+H)*Math.cos(B)*Math.cos(L);
		y=(N+H)*Math.cos(B)*Math.sin(L);
		z=(N*(1-e*e)+H)*Math.sin(B);
		double[] data ={x,y,z};
		return data;
	}

这里完成了WGS84坐标系转大地坐标系,但是大地坐标系反解WGS84坐标系较为复杂
在这里插入图片描述
我们可以直接通过XY求出L经度,但是对于纬度和海拔求解较为复杂。
这里我们可以通过一种简单的方法将计算最简化。我们将N视为不变,来计算前后GPS坐标。程序如下:
python:

def return_gps(m,n,q):
	f=1/298.257223563;a=6378137;
	b=a*(1-f);e=math.sqrt(2*f-f*f);
	L=math.atan(n/m)+math.pi;
	B=math.atan(math.cos(L)*q/m/(1-N*e*e/(N+40.0038)));
	H=(m/math.cos(L)/math.cos(B)-N+n/math.sin(L)/math.cos(B)-N)/2;
	L1=L/math.pi*180;B1=B/math.pi*180;
	data = [B1,L1,H];
	return data;

Java:

	public static double[] returnlocation(double m,double n,double q){
		double f=1/298.257223563,a=6378137;
		double b=a*(1-f),e=Math.sqrt(2*f-f*f);
		double L=Math.atan(n/m)+Math.PI;
		double B=Math.atan(Math.cos(L)*q/m/(1-N*e*e/(N+40.0038)));
		double H=(m/Math.cos(L)/Math.cos(B)-N+n/Math.sin(L)/Math.cos(B)N)/2;
		double L1=L/Math.PI*180,B1=B/Math.PI*180;
		double[] data = {B1,L1,H};
		return data;
	}

能极大的简化计算。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WGS84GPS坐标与大地坐标系互相转化 的相关文章

  • 浮点数的二进制表示方法

    浮点数的二进制表示 Double型 xff0c 64位 例一 xff1a 已知 xff1a double类型38414 4 xff0c 求 xff1a 其对应的二进制表示 分析 xff1a double类型共计64位 xff0c 折合8字节
  • PHP解决http和https跨域,PHP解决HTTP和HTTPS跨域共享session的方法及代码实例

    HTTP HTTPS协议下跨域解决session共享的办法 xff0c 也许不是最好的 xff0c 但是比较实用 如下是具体的解决方案 阿里西西小编给您推荐这个PHP解决HTTP和HTTPS跨域共享session的方法及代码实例 xff0c
  • ucosii使用

    当需要同时跑多个任务的时候裸机显然不能很好的完成使命 xff0c 这个时候我们可以给单片机上系统 xff0c 创建多任务 xff0c 完成复杂逻辑 一 首先移植uocii在我们的板上 xff0c 根据mcu型号移植ucosii xff0c
  • QT以POST方法上传文件(文本、图片、excel文件等)

    最近项目需要用QT上传文件给HTTP服务器 之前服务器接收的数据格式都是json xff0c 这次是form data 经查找资料 xff0c 需要用到QHttpMultiPart和QHttpPart这两个类 xff0c 看QT的实例教程可
  • js数组删除元素

    var arr 61 39 a 39 39 b 39 39 c 39 若要删除其中的 39 b 39 有两种方法 xff1a 1 delete方法 delete arr 1 这种方式数组长度不变 此时arr 1 变为undefined了 但
  • 回调函数简单使用

    一 回调函数是什么 xff0c 我们为什么要用它 xff1f 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针 xff08 地址 xff09 作为参数传递给另一个函数 xff0c 当这个指针被用来调用其所指向的函数时 xff0c
  • pwm控制电机原理

    首先我们要明白电机的原理 电机 简单来说就是 实现电能与机械能相互转换的电工设备 那么我们经常使用的直流电机原理就是 xff1a 电生磁 xff1a 通电导线会产生磁场 也就是电磁感应 旋转磁场带动转子转动 电动机是由定子和转子组成 xff
  • FLASH操作记录

    使用的单片机为GD403系列 xff0c 要操作的数据flash地址位于bank1 xff0c 最小操作单位为一页 xff0c 即4k 下面程序演示操作一页中部分内存空间 span class token macro property sp
  • MCU启动异常分析记录

    一 问题背景 量产的产品在品质抽检中出现设备概率无法正常使用的问题 xff0c 经过初步定位确定是MCU上电未正常启动 二 问题分析以及定位 在产品中考虑到MCU程序升级 RF SUB 1G升级 xff0c NB IOT等无线升级方法 xf
  • u-BOOT启动流程

    1 u boot入口 xff1a 入口即第一行程序 xff0c 程序的链接是由链接脚本决定的 xff0c 编译uboot之后 xff0c 可以在根目录下生成u boot lds文件 打开lds文件可以看到代码当前入口点 xff1a xff1
  • qt字符串与字符串数组操作

    QString定义 QString s1 61 abc QString s2 hello 字符串连接 QString s 61 s1 43 s2 组包 s 61 QString a 61 1 b 61 2 c 61 3 arg 250 ar
  • QT中16进制二进制字符串的转换

    最近使用串口通信操作nfc卡的扇区内的内容设及到了很多数据类型之间的转换 xff0c 今天总结一下 1 10进制16进制字符串相互显示 10 gt 16 int a 61 10 Qstring b 61 QString 34 1 34 ar
  • 使用vs安装qt插件过程中遇到的问题

    一直在用qtcreater开发程序 最近安装了vs2017 xff0c 想着慢慢改用vs xff0c 毕竟功能强大嘛 按照网上大神的教程安装qt vs tools 过程中遇到了 qt in the given path was built
  • verilog基础语法 {}

    1 的作用 xff1f 起拼接的作用 如 a 61 b 5 b 4 0 意思为 b的最高位和b的低五位拼接起来 xff0c 组成的a为6位 2 数字表达式 4 d15 4 xff1a 代表位宽 d xff1a 代表进制 15 xff1a 代
  • 从程序员的角度,来拆解物联网系统中的开发工作

    物联网的概念已经被炒了好多年了 xff0c 奇怪的是 xff1a 市场中对这个概念的反应总是不愠不火 随着5G 的迅速普及 xff0c 不知道是否能够再次把这个领域带火起来 但是不管怎样 xff0c 很多大学已经把物联网这个专业给坐实了 前
  • amixer命令用于设置系统音量

    该句为 c选择0的声卡 xff08 貌似 xff09 xff0c PCMvolume设置为增加60 2 61 120 xff08 value值变为加上120 xff09 xff0c 60dB 就是减小60 2 61 120 xff0c 如果
  • jetson nano配置远程桌面连接

    一 jetson nano 远程桌面设置 默认jetson nano 的 Desktop Sharing是打不开的需要进行如下配置 xff1a 1 编辑org gnome Vino gschema xml文件 sudo vi span cl
  • 如何修改访问vnc服务器的密码,修改VNC访问的密码

    vncserver iptables I INPUT p tcp dport j ACCEPT 客户端方式 iptables I INPUT p tcp dport j ACCEPT 浏览器方式 vi root vnc xstartup 注
  • sensor配置项解释

    主要介绍 sensor 的配置项 json 里面的 data 类型 都是 10进制的 以 a 43 g sensor 介绍 所有平台特定的配置文件在 JSON 文件顶层均包含 config 组 json 开头的 就是 config 组 这里
  • xp ie清除css缓存,如何清空浏览器的CSS缓存

    项目需求 xff1a 请求一个网站时 xff0c 浏览器会缓存CSS xff0c 导致每次更新网站的代码后 xff0c 不会自动更新样式 xff0c 甚至需要手动去清空浏览器的缓存 xff0c 但是用户不可能每次都清空缓存 xff0c 这就

随机推荐