WGS84经纬度坐标转化成UTM坐标

  • 1 利用geodesy功能包实现转化
  • 2 利用GeographicLib功能包实现转化

  在无人驾驶或者机器人领域,经常会涉及到WGS 84 经纬度坐标与UTM坐标之间的转换,本文总结了两种方式来实现两者的转化。

1 利用geodesy功能包实现转化

  头文件:

#ifndef WGS2UTM_H
#define WGS2UTM_H#include <iostream>
#include <fstream>
#include <vector>
#include <Eigen/Geometry>
#include <GeographicLib/UTMUPS.hpp>
#include <geographic_msgs/GeoPointStamped.h>
#include <geodesy/utm.h>
#include <ros/ros.h>using namespace std;class WGS2UTM
{public:/*** @brief 构造函数*/WGS2UTM();/*** @brief 获取选取原点的经纬度lla坐标* @return  所选取原点的经纬度lla坐标*/inline Eigen::Vector3d get_origin_lla() {return origin_LLA_;}/*** @brief 获取选取原点的经纬度utm坐标* @return  所选取原点的经纬度utm坐标*/inline Eigen::Vector3d get_origin_tum() {return origin_UTM_;}/***********************************************************//***********************************************************//*****利用geodesy功能包实现WGS84经纬度坐标转化成UTM坐标*****//***********************************************************//***********************************************************//*** @brief 把选取的原点的经纬度lla坐标转化为东北天utm坐标* @param origin_LLA    输入--原点经纬度lla坐标*/void set_origin_1(Eigen::Vector3d origin_LLA);/*** @brief 把经纬度lla坐标转化为东北天utm坐标* @param LLA    输入--lla坐标* @param UTM    输出--utm坐标*/void LLA2UTM_1(const Eigen::Vector3d& LLA, Eigen::Vector3d& UTM);/*** @brief 把经纬度lla坐标转化为相对于所选取原点的东北天utm坐标* @param LLA    输入--lla坐标* @param UTM    输出--utm坐标*/void LLA2UTM_origin_1(const Eigen::Vector3d& LLA, Eigen::Vector3d& UTM_origin);private:Eigen::Vector3d origin_LLA_;Eigen::Vector3d origin_UTM_;double torad = M_PI / 180;
};
#endif //WGS2UTM_H

  源文件:

#include "convert_wgs2utm/wgs2utm.h"WGS2UTM::WGS2UTM() {}void WGS2UTM::set_origin_1(Eigen::Vector3d origin_LLA)
{origin_LLA_ = origin_LLA;LLA2UTM_1(origin_LLA_, origin_UTM_);
}void WGS2UTM::LLA2UTM_1(const Eigen::Vector3d& LLA, Eigen::Vector3d& UTM)
{geographic_msgs::GeoPointStampedPtr gps_msg(new geographic_msgs::GeoPointStamped());gps_msg->position.latitude  = LLA[0];gps_msg->position.longitude = LLA[1];gps_msg->position.altitude  = LLA[2];geodesy::UTMPoint utm_point;geodesy::fromMsg(gps_msg->position, utm_point);UTM[0] = utm_point.easting;UTM[1] = utm_point.northing;UTM[2] = utm_point.altitude;
}void WGS2UTM::LLA2UTM_origin_1(const Eigen::Vector3d& LLA, Eigen::Vector3d& UTM_origin)
{//经纬度转换为UTM投影Eigen::Vector3d UTM;LLA2UTM_1(LLA, UTM);//UTM2ENU, UTM投影平移至东北天坐标系, 东北天坐标系原点为第一个采样点UTM_origin = UTM - origin_UTM_;
}

  测试案例:

#include <iostream>
#include "convert_wgs2utm/wgs2utm.h"using namespace std;int main()
{WGS2UTM wgs2utm;Eigen::Vector3d origin_LLA;Eigen::Vector3d origin_UTM;origin_LLA[0] = 30.9543508;origin_LLA[1] = 121.4795984;origin_LLA[2] = 17.0970000;wgs2utm.set_origin_1(origin_LLA);origin_UTM = wgs2utm.get_origin_tum();cout << "origin_UTM: (" <<  origin_UTM[0] << ", " << origin_UTM[1] << ", " << origin_UTM[2] << ")" << endl;cout << "******************************" << endl;Eigen::Vector3d P_LLA;  // 任意一点的经纬度坐标Eigen::Vector3d P_UTM;  // 该点相对于所选取原点的utm坐标P_LLA[0] = 30.9543508;P_LLA[1] = 121.4755984;P_LLA[2] = 17.0970000;wgs2utm.LLA2UTM_origin_1(P_LLA, P_UTM);cout << "P_UTM: (" <<  P_UTM[0] << ", " << P_UTM[1] << ", " << P_UTM[2] << ")" << endl;cout << "******************************" << endl;}

  输出结果如下:

2 利用GeographicLib功能包实现转化

  头文件:

#ifndef WGS2UTM_H
#define WGS2UTM_H#include <iostream>
#include <fstream>
#include <vector>
#include <Eigen/Geometry>
#include <GeographicLib/UTMUPS.hpp>
#include <geographic_msgs/GeoPointStamped.h>
#include <geodesy/utm.h>
#include <ros/ros.h>using namespace std;class WGS2UTM
{public:/*** @brief 构造函数*/WGS2UTM();/*** @brief 获取选取原点的经纬度lla坐标* @return  所选取原点的经纬度lla坐标*/inline Eigen::Vector3d get_origin_lla() {return origin_LLA_;}/*** @brief 获取选取原点的经纬度utm坐标* @return  所选取原点的经纬度utm坐标*/inline Eigen::Vector3d get_origin_tum() {return origin_UTM_;}/***********************************************************//***********************************************************//**利用GeographicLib功能包实现WGS84经纬度坐标转化成UTM坐标**//***********************************************************//***********************************************************//*** @brief 把选取的原点的经纬度lla坐标转化为东北天utm坐标* @param origin_LLA    输入--原点经纬度lla坐标*/void set_origin_2(Eigen::Vector3d origin_LLA);/*** @brief 把经纬度lla坐标转化为东北天utm坐标* @param LLA    输入--lla坐标* @param UTM    输出--utm坐标*/void LLA2UTM_2(const Eigen::Vector3d& LLA, Eigen::Vector3d& UTM);/*** @brief 把经纬度lla坐标转化为相对于所选取原点的东北天utm坐标* @param LLA    输入--lla坐标* @param UTM    输出--utm坐标*/void LLA2UTM_origin_2(const Eigen::Vector3d& LLA, Eigen::Vector3d& UTM_origin);private:Eigen::Vector3d origin_LLA_;Eigen::Vector3d origin_UTM_;double torad = M_PI / 180;
};
#endif //WGS2UTM_H

  源文件:

void WGS2UTM::set_origin_2(Eigen::Vector3d origin_LLA)
{origin_LLA_ = origin_LLA;LLA2UTM_2(origin_LLA_, origin_UTM_);
}void WGS2UTM::LLA2UTM_2(const Eigen::Vector3d& LLA, Eigen::Vector3d& UTM)
{GeographicLib::Math::real lat = LLA[0];GeographicLib::Math::real lon = LLA[1];GeographicLib::Math::real alt = LLA[2];int UTMZone;bool isNorth;   GeographicLib::UTMUPS::Forward(lat, lon, UTMZone, isNorth, UTM[0], UTM[1]);UTM[2] = LLA[2];
}void WGS2UTM::LLA2UTM_origin_2(const Eigen::Vector3d& LLA, Eigen::Vector3d& UTM_origin)
{//经纬度转换为UTM投影Eigen::Vector3d UTM;LLA2UTM_2(LLA, UTM);//UTM2ENU, UTM投影平移至东北天坐标系, 东北天坐标系原点为第一个采样点UTM_origin = UTM - origin_UTM_;
}

  测试案例:

#include <iostream>
#include "convert_wgs2utm/wgs2utm.h"using namespace std;int main()
{WGS2UTM wgs2utm;Eigen::Vector3d origin_LLA;Eigen::Vector3d origin_UTM;origin_LLA[0] = 30.9543508;origin_LLA[1] = 121.4795984;origin_LLA[2] = 17.0970000;wgs2utm.set_origin_2(origin_LLA);origin_UTM = wgs2utm.get_origin_tum();cout << "origin_UTM: (" <<  origin_UTM[0] << ", " << origin_UTM[1] << ", " << origin_UTM[2] << ")" << endl;cout << "******************************" << endl;Eigen::Vector3d P_LLA;  // 任意一点的经纬度坐标Eigen::Vector3d P_UTM;  // 该点相对于所选取原点的utm坐标P_LLA[0] = 30.9543508;P_LLA[1] = 121.4755984;P_LLA[2] = 17.0970000;wgs2utm.LLA2UTM_origin_2(P_LLA, P_UTM);cout << "P_UTM: (" <<  P_UTM[0] << ", " << P_UTM[1] << ", " << P_UTM[2] << ")" << endl;cout << "******************************" << endl;}

WGS84经纬度坐标转化成UTM坐标相关推荐

  1. 局部(x,y)坐标 转 WGS84经纬度坐标

    局部坐标转WGS84坐标 背景: 最近在做一个小项目,其中需要把局部坐标转换成wgs84坐标.我的局部地图是用激光雷达扫出来的一张图,就是下面这张图 用激光雷达建好图以后,就知道图上每一个点的局部坐标 ...

  2. WGS84经纬度坐标到北京54高斯投影坐标的转换

    张兢1 王文瑞2 陈溪1 (1.广西第一测绘院 广西南宁 530023: 2.南宁市勘测院 广西南宁 530022) [摘 要] 本文针对从事测绘工作者普遍遇到的坐标转换问题,简要介绍ArcGIS实现 ...

  3. wgs84坐标格式转换度分秒_使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换...

    [摘 要] 本文针对从事测绘工作者普遍遇到的坐标转换问题,简要介绍ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标转换原理和步骤. [关键词] ArcGIS 坐标转换 投影变换 1 坐标转换 ...

  4. UTM坐标与GPS经纬度(WGS84)的相互转换

    一.UTM介绍 统一横轴墨卡托投影系统(Universal Transverse Mercator,UTM) 参考: https://www.youtube.com/watch?v=LcVlx4Gur ...

  5. WGS84经纬度坐标与北京54坐标或者…

    WGS84经纬度坐标与北京54坐标或者西安80坐标的关系     一般来讲,GPS直接提供的坐标(B,L,H)是1984年世界大地坐标系(Word Geodetic System1984即WGS-84 ...

  6. utm坐标和经纬度相互转换

    项目中用到经纬度相互转换,自己写感觉太麻烦,查询后发现利用geos和proj4可以完成坐标转换,现在记录一下方便以后自己查询. //经纬度转utm坐标int convert_lonlat_utm(co ...

  7. WGS84经纬度坐标转北京54高斯投影地方坐标流程

    坐标系统之间的坐标转换既包括不同的参心坐标之间的转换,或者不同的地心坐标系之间的转换,也包括参心坐标系与地心坐标系之间的转换以及相同坐标系的直角坐标与大地坐标之间的坐标转换,还有大地坐标与高斯平面坐标 ...

  8. 西安80转换成北京独立计算机,WGS84经纬度坐标转换为西安80高斯投影坐标.

    dsfqfzneiphp 通过 波段编号18和相应的中央子午线为105°,表示计算基于6度波段划分. 您要注意标题" WGS84经纬度坐标转换为西安80高斯投影坐标",也就是说,在 ...

  9. 经纬度转换为UTM坐标

    概念 : UTM(通用横向墨卡托投影): 是一种以米为单位的坐标系统,用于地图和GPS导航.将地球划分为60个纵向的区域.每个区域宽6度,从赤道开始往南北两级方向划分.每个区域都有一个特定的字母. 转 ...

  10. c# WGS84坐标转换成UTM坐标

    通过查阅相关资料,有一篇博客里面给出了WGS84坐标转换成UTM坐标的功能,该博主使用matlab程序实现坐标的转换,基于已有的公式,用c#语言实现坐标的转换. 参考的博客连接如下: https:// ...

最新文章

  1. MMinte:预测微生物群体内代谢物互作
  2. oracle如何进入管理器,oracle 启动管理器
  3. jq修改iframe html代码,使用jQuery替换iframe的所有内容(包括doctype和html标签)
  4. SQLServer数据表的创建
  5. 【JVM性能调优】使用jstack找出最耗CPU的java线程
  6. Web安全测试实战之测试HTTP方法
  7. centos7的telnet不通已经关闭防火墙,打开阿里云端口仍然ping不通的解决办法
  8. linux启动python项目_java项目部署Linux服务器几种启动方式总结经验
  9. python中提交post表单_python接口自动化二(发送post请求)
  10. 解决在局域网内QQ传文件慢的问题(转)
  11. 米哈游web前端面试题Js/Vue/浏览器原理等
  12. md5加密工具类(16位,32位,64位)
  13. 如何查找Steam好友代码(以及添加好友代码)
  14. ssm后台权限管理系统
  15. win0如何添加计算机用户,Win10系统如何添加来宾账户 win10添加来宾账户的方法
  16. Mac 系统mysql密码重置
  17. 最后一公里极速配送(一)
  18. 七人成团即拼即赚七人拼团模式解析
  19. 解决 手机使用10193 拨打国际长途时候 国际拨号助手 自动增加区号的问题
  20. 基于spring mvc+bootstrap 集成的返利平台 新增内容-自动对接京东数据

热门文章

  1. 如何使用代理服务器下载文件_8uftp怎么下载客户文件,怎么使用8uftp下载客户文件?...
  2. CRNN原理详解、代码实现及BUG分析
  3. 全能地图工具共享及操作规范
  4. mysql安装包msi_【MySQL】MySQL之MySQL5.7安装包(msi文件)在Windows8下安装
  5. 纪录篇 之 我收集整理的一些网址(不断更新 ing)
  6. C语言 IDE的介绍及安装
  7. Ubuntu下c语言IDE学习
  8. 视频解析工具youtube-dl
  9. 4.FX Blue 本地跟单软件EA参数说明
  10. (附源码)php初中历史专题教学网站 毕业设计 100623