经纬度转换为UTM坐标
概念 :
UTM(通用横向墨卡托投影): 是一种以米为单位的坐标系统,用于地图和GPS导航。将地球划分为60个纵向的区域。每个区域宽6度,从赤道开始往南北两级方向划分。每个区域都有一个特定的字母。
转换过程:
- 将经纬度值转化为弧度值
// 将经度归一化到-180到180度之间double LongTemp =(Long + 180) - static_cast<int>((Long + 180) / 360) * 360 - 180;double LatRad = Lat * DEG_TO_RAD;double LongRad = LongTemp * DEG_TO_RAD;
- 根据经纬度计算所在的UTM区域
计算UTM带号,即 zoneNumber
,这是由所在位置的经度计算得到的,计算公式为zoneNumber = floor((longTemp + 180)/6) + 1
,其中 floor()
函数表示向下取整。
对于特殊区域(Norway 和 Svalbard)需要进行特殊处理。对于Norway,UTM带号为31;对于Svalbard,需要根据具体位置计算UTM带号。
// 纬度在56度到64度之间,经度在3度到12度之间的区域属于挪威,对应的UTM带号为32if (Lat >= 56.0 && Lat < 64.0 && LongTemp >= 3.0 && LongTemp < 12.0)ZoneNumber = 32;// Special zones for Svalbard// 如果经纬度在北极圈内,则根据经度范围判断属于哪个UTM区域。// 对于挪威的斯瓦尔巴群岛(Svalbard)有特殊的UTM区域设置。// 如果纬度在72到84度之间,则根据经度范围判断属于哪个UTM区域,分别为31、33、35、37区。if (Lat >= 72.0 && Lat < 84.0) {if (LongTemp >= 0.0 && LongTemp < 9.0)ZoneNumber = 31;else if (LongTemp >= 9.0 && LongTemp < 21.0)ZoneNumber = 33;else if (LongTemp >= 21.0 && LongTemp < 33.0)ZoneNumber = 35;else if (LongTemp >= 33.0 && LongTemp < 42.0)ZoneNumber = 37;}
- 根据维度值计算UTM纵向带
- 计算以赤道为基准的投影面的相对圆柱体坐标系(即UTM投影)的各种参数
椭球体参数,包括长半轴a,扁率f,第一偏心率平方eccSquared,以及第二偏心率平方eccPrimeSquared。 - 根据投影参数,计算经纬度值对应的UTM坐标值
计算UTM坐标时,需要使用以下几个参数:
- N:卯酉圈曲率半径。
- T:曲率平面的切线方位角正切值。 T = t a n 2 ( L a t R a d ) T=tan^2(LatRad) T=tan2(LatRad)
- C:子午圈曲率半径。 C = e c c P r i m e S q u a r e d × c o s 2 ( L a t R a d ) C=eccPrimeSquared×cos^2(LatRad) C=eccPrimeSquared×cos2(LatRad)
- A:中央经线到点的经线长度。 A = c o s ( L a t R a d ) × ( L o n g R a d − L o n g O r i g i n R a d ) A=cos(LatRad)×(LongRad−LongOriginRad) A=cos(LatRad)×(LongRad−LongOriginRad)
- M:纬度的子午线弧长。
M = a ∗ ( ( 1 − e 2 4 − 3 e 4 64 − 5 e 6 256 ) ∗ ϕ − ( 3 e 2 8 + 3 e 4 32 + 45 e 6 1024 ) ∗ s i n ( 2 ϕ ) + ( 15 e 4 256 + 45 e 6 1024 ) ∗ s i n ( 4 ϕ ) − 35 e 6 3072 ∗ s i n ( 6 ϕ ) ) M=a∗((1−\frac{e^2}{4}-\frac{3e^4}{64}−\frac{5e^6}{256})∗ϕ−(\frac{3e^2}{8}+\frac{3e^4}{32}+\frac{45e^6}{1024})∗sin(2ϕ)+(\frac{15e^4}{256}+\frac{45e^6}{1024})∗sin(4ϕ)−\frac{35e^6}{3072}∗sin(6ϕ)) M=a∗((1−4e2−643e4−2565e6)∗ϕ−(83e2+323e4+102445e6)∗sin(2ϕ)+(25615e4+102445e6)∗sin(4ϕ)−307235e6∗sin(6ϕ))
其中,a是椭球体的半长轴,e是椭球体的离心率, ϕ \phi ϕ是转换前的纬度。
U T M E a s t i n g = k 0 × N × ( A + ( 1 − T + C ) × A 3 / 6 + ( 5 − 18 × T + T 2 + 72 × C − 58 × e c c P r i m e S q u a r e d ) × A 5 / 120 ) + 500000.0 U T M N o r t h i n g = k 0 × ( M + N × t a n ( L a t R a d ) × ( A 2 / 2 + ( 5 − T + 9 × C + 4 × C 2 ) × A 4 / 24 + ( 61 − 58 × T + T 2 + 600 × C − 330 × e c c P r i m e S q u a r e d ) × A 6 / 720 ) ) UTM_{Easting}=k_0×N×(A+(1−T+C)×A^3/6+(5−18×T+T^2+72×C−58×eccPrimeSquared)×A^5/120)+500000.0 \\ UTM_{Northing}=k_0×(M+N×tan(LatRad)×(A^2/2+(5−T+9×C+4×C^2)×A^4/24+(61−58×T+T^2+600×C−330×eccPrimeSquared)×A^6/720)) UTMEasting=k0×N×(A+(1−T+C)×A3/6+(5−18×T+T2+72×C−58×eccPrimeSquared)×A5/120)+500000.0UTMNorthing=k0×(M+N×tan(LatRad)×(A2/2+(5−T+9×C+4×C2)×A4/24+(61−58×T+T2+600×C−330×eccPrimeSquared)×A6/720))
eccPrimeSquared = (eccSquared) / (1 - eccSquared);N = a / sqrt(1 - eccSquared * sin(LatRad) * sin(LatRad));
T = tan(LatRad) * tan(LatRad);
C = eccPrimeSquared * cos(LatRad) * cos(LatRad);
A = cos(LatRad) * (LongRad - LongOriginRad);M = a *((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 -5 * eccSquared * eccSquared * eccSquared / 256) *LatRad -(3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 +45 * eccSquared * eccSquared * eccSquared / 1024) *sin(2 * LatRad) +(15 * eccSquared * eccSquared / 256 +45 * eccSquared * eccSquared * eccSquared / 1024) *sin(4 * LatRad) -(35 * eccSquared * eccSquared * eccSquared / 3072) * sin(6 * LatRad));UTMEasting = k0 * N * (A + (1 - T + C) * A * A * A / 6 + (5 - 18 * T + T * T + 72 *
经纬度转换为UTM坐标相关推荐
- GPS坐标转换:经纬度转UTM坐标(Matlab程序)
GPS的输出一般为经纬度坐标,如:北纬(N)41度30分5秒, 东经(E)114度10分30秒. UTM(Universal Transverse Mercator)坐标是一个投影坐标系,将地球分为6 ...
- wgs utm java,Java,将经纬度转换为UTM
Does anyone know of a way, in Java, to convert an earth surface position from lat, lon to UTM (say i ...
- 经纬度坐标系转换为UTM坐标系(matlab)
如题所说,直接上程序.验证自己做一下,结果应该是对的.诚不我欺. (注意:程序名与函数名保持一致!!!) function[shuchu]=lat_lon2utm(lat_shuru,lon_shur ...
- utm坐标和经纬度相互转换
项目中用到经纬度相互转换,自己写感觉太麻烦,查询后发现利用geos和proj4可以完成坐标转换,现在记录一下方便以后自己查询. //经纬度转utm坐标int convert_lonlat_utm(co ...
- java 弧度 转经纬度_GPS 经纬度转换为 经过旋转后的平面坐标详解
/** * 地图工具 * * @author dxm * */ public class MapUtil { // 参考点 private double[] d34 = null; private d ...
- UTM坐标与GPS经纬度(WGS84)的相互转换
一.UTM介绍 统一横轴墨卡托投影系统(Universal Transverse Mercator,UTM) 参考: https://www.youtube.com/watch?v=LcVlx4Gur ...
- Python使用proj将GPS经纬度数据转换为utm坐标系(真实的地理位置坐标系,以米为单位),然后可以进行轨迹显示
1. 代码如下 from pyproj import Transformer import pyproj import json from matplotlib.pyplot import *if _ ...
- 经纬度坐标转换为工程坐标
1. 绪论 在施工和工程测量时,经常需要将GPS坐标转换为工程中所使用的坐标.在Bing上检索到的类似问题,基本描述为两个坐标系的转换,但实际上并非如此. 本文将详细解释转换过程和转换方法. 1.1 ...
- 墨卡托投影法将经纬度转换为平面坐标
地球经纬度转换为平面坐标,想必是数学建模里面经常会遇到的问题. 由于地球是一个近似椭圆,因此用经纬度确定的坐标,无法直接使用平面几何的计算公式计算距离等数据.使用墨卡托投影法将经纬度坐标投影为平面坐标 ...
最新文章
- 23. matlab并行计算原理以及parpool函数
- write() ,read();
- Mysql 查询一天中每半小时记录的数量
- 【转】Android Studio简单设置
- Android 动画(二)
- IntersectionObserve初试
- 使用JAX-RS(Jersey)的HTTP状态错误消息响应中的自定义原因短语
- ETL异构数据源Datax_部署前置环境_01
- 数值计算:设计算法的若干原则
- 英语学习笔记2019-9-27
- linux malloc core,Linux上使用的malloc版本
- 怎么解log方程_微观动力学解合成氨催化反应TOF
- Delphi在代码编辑栏按回车无法换行
- 设计并搭建Python容器化项目的CI/CD流水线
- 使用mpvue开发小程序需要注意和了解的知识点
- 何宾 单片机原理及应用_STC单片机原理及应用何宾答案
- ceph 部署后rbd块设备读写只有10M左右,慢的更龟速一样,怎样解决!,求各位博友指点……,感激不尽……...
- Contect Me
- 关于redis创建集群时出现[ERR] Node x.x.x.x:6379 is not empty. Either the node already knows other nodes (check
- 【海思篇】【Hi3516DV300】六、音频输入篇