WGS84大地坐标转目标椭球平面坐标完整代码和步骤___含高精度高斯投影(正算)

本文主要是介绍WGS84大地坐标转目标椭球平面坐标完整代码和步骤___含高精度高斯投影(正算),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

WGS84大地坐标转目标椭球平面坐标完整代码和步骤___含高精度高斯投影(正算)
最近摸索高精度坐标解算,从WGS84椭球大地坐标转换到目标椭球平面坐标,大都是四步,总结大多公式,如下:

1、从大地坐标转换到空间直角坐标,同椭球,公式基本一致。

VB代码:
Dim e2 As Double, N As Double
e2 = 1 - (1 - 1 / f) ^ 2 
N = a / Sqr(1 - e2 * Sin(B) ^ 2) '卯酉圈的曲率半径
X = (N + H) * Cos(B) * Cos(L)
Y = (N+ H) * Cos(B) * Sin(L)
Z = (N * (1 - e2) + H) * Sin(B)
'a为源椭球长半轴,1/f为源椭球扁率,e2为源椭球第一偏心率平方,B为GPS纬度,L为GPS经度,H为GPS海拔

2、从源空间直角坐标转换到目标空间直角坐标,异椭球,公式基本一致(七参数或三参数转换)。

VB代码:
X = dX + (1 + K * 0.000001) * X + wZ * Y - wY * Z
Y = dY + (1 + K * 0.000001) * Y - wZ * x + wX * Z
Z = dZ + (1 + K * 0.000001) * Z + Y * x - wX * Y
'dX、dY、dZ、wX、wY、wZ、K为七参数系数

3、从目标空间坐标转换到目标大地坐标,同椭球,公式基本一致。根据空间坐标,应用回归方程计算平面坐标。

VB代码:
L = Atn(Y/X)
B = 0
Dim CalcLat As Double '计算纬度
Dim N As Double,e2 As Double
e2 = 1 - (1 - 1 / f) ^ 2 
Do '回归计算纬度CalcLat = BN = a / Sqr(1 - e2 * Sin(B) ^ 2) '卯酉圈的曲率半径B = Atn(Z + N * e2 * Sin(CalcLat) / Sqr(X ^ 2 + Y ^ 2))
Loop While Abs(B - CalcLat) > 0.00000000000001If Lon < 0 ThenLon = Lon + Pi
End If
N = a / Sqr(1 - e2 * Sin(B) ^ 2)  '卯酉圈的曲率半径
H = Sqr(X ^ 2 + Y ^ 2)  / Cos(B) - N
'X、Y、Z为空间坐标,a为目标椭球长半轴,1/f为目标椭球扁率,e2为目标椭球第一偏心率平方

4、从目标大地坐标转换到目标平面坐标,同椭球,俗称投影,我国一般采用高斯投影,坐标转换计算的精度,关键在于投影的展开精度。

高精度高斯投影(正算),适应所有椭球,VB代码,通过计算验证,精度高,达到微米级,亲测代码非常可靠:
高精度高斯投影(正算)VB代码
高精度高斯投影(正算),适应所有椭球,C#代码,通过计算验证,精度高,达到微米级,亲测代码非常可靠:
高精度高斯投影(正算)C#代码
5、最后是一个WGS84椭球转目标平面坐标的简易集成模块,一个模块一步到位,合并所有步骤,通过代码优化,精度可以达到0.001米,毫米级,亲测代码可靠:

莫洛登斯基椭球转换和简易高斯投影。为简洁代码,使用参数类,EllipsoidParam 为自定义椭球参数类,SevenParam 为自定义七参数类,VB代码:
莫洛登斯基椭球转换和简易高斯投影,VB代码
6、程序中关于椭球的定义和常用公式,其中很多参数与公式,参照EXCEL坐标高精度转换,如下详图介绍:
EXCEL坐标转换
以上代码只要在单元格中加入另外4个参数的单元格,即可支持七参数。
在这里完善命令即可:
Private Sub CommandButton1_Click() '完整布尔莎七参数和简易布尔莎七参数转换,高斯投影


dx = Val(Range(“G2”)) '七参数
dy = Val(Range(“G3”))
dz = Val(Range(“G4”))
wx = Val(Range(“H2”))
wy = Val(Range(“H3”))
wz = Val(Range(“H4”))
K = Val(Range(“H5”))

ConvertSevenParam.dx = dx
ConvertSevenParam.dy = dy
ConvertSevenParam.dz = dz
ConvertSevenParam.wx = wx
ConvertSevenParam.wy = wy
ConvertSevenParam.wz = wz
ConvertSevenParam.K = K

在这里插入图片描述
初学者看代码要多研究、多测试。

这篇关于WGS84大地坐标转目标椭球平面坐标完整代码和步骤___含高精度高斯投影(正算)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241942

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp