地理计算库 GeographicLib 极简入门

  • 时间:20210412

文章目录

  • 1. 文档
  • 2. 安装
  • 3. 项目集成
  • 4. 极简的例子

1. 文档

  • GeographicLib - 官方文档
  • GeographicLib::LocalCartesian - 官方文档

2. 安装

  • 克隆源码并编译安装 GeographicLib 。 (码云镜像更快,已有较多人转储,不用自己导入,如需自己导入,参考gitee文档)。

    git clone https://gitee.com/masonqin/geographiclib.git
    cd geographiclib
    mkdir build && cd build
    cmake .. #无报错
    make #无报错
    sudo make install #无报错
    

3. 项目集成

  • 编写 CMakeLists.txt,非常简单的老三句。

    find_package (GeographicLib REQUIRED)
    include_directories(${GeographicLib_INCLUDE_DIRS})
    target_link_libraries(<可执行程序> ${GeographicLib_LIBRARIES})
    
  • 代码集成,最常用的功能,使用局部坐标系转换,从 经纬高ENU

    #include <GeographicLib/LocalCartesian.hpp> //包含头文件
    //经纬度原点初始化
    GeographicLib::LocalCartesian geo_converter;
    geo_converter.Reset(latitude, longitude, altitude);
    //经纬度转ENU
    geo_converter.Forward(latitude, longitude, altitude, local_E, local_N, local_U);
    
  • 初始化原点用了 Reset 函数,Forward 用于将经纬高转换成米制坐标[E,N,U] 。俩函数都是调用 geo_converter 对象的成员函数,geo_converter 就是 GeographicLib::LocalCartesian 的实例。

    • GeographicLib::LocalCartesian 简介,官方文档

      • 功能就是把椭球体下的地理坐标系坐标转为ENU局部系下的坐标。
      • Reset 函数的作用是重置原点,LocalCartesian构造函数是默认在(0,0,0)也就是地心。
      • Forward (lat, lon, alt, x, y, z)函数就是把经纬高转换为ENU,前三个传入,后三个传出。

4. 极简的例子

  • 新建 geographiclib_demo 文件夹,在里面新建 CMakeLists.txtmain.cpp

  • main.cpp ,经纬度数据转ENU米制坐标,数据文件为lonlat.csv,格式为**[纬度,经度,高度]**。

    #include <iostream>
    #include <vector>
    #include <string>
    #include <fstream>
    #include <sstream>
    #include <GeographicLib/LocalCartesian.hpp> //header filetypedef std::vector<std::vector<double>> dataMat_NxN;void ReadCSV(std::string str_csv_file, dataMat_NxN &data_NxN)
    {std::ifstream in_file(str_csv_file, std::ios::in);std::string std_line;while (getline(in_file, std_line)){std::stringstream ss(std_line);std::string data_each;std::vector<double> data_array;while (getline(ss, data_each, ',')){data_array.push_back(atof(data_each.c_str()));}data_NxN.push_back(data_array);}
    }void WriteDat(std::string str_dat_file, dataMat_NxN &data_NxN)
    {std::ofstream out_file(str_dat_file, std::ios::out);for (int i = 0; i < data_NxN.size(); ++i){for (int j = 0; j < data_NxN[i].size(); ++j){out_file << data_NxN[i][j]<<" ";}out_file << "\n";}
    }int main()
    {std::cout << "Demo program of GeographicLib." << std::endl;// geo origin initGeographicLib::LocalCartesian geo_converter;// data structure definedataMat_NxN geo_data;dataMat_NxN ENU_data;// read data from filestd::string str_geo_data = "../lonlat.csv";//lat,lon,hReadCSV(str_geo_data, geo_data);if (geo_data.size() > 0){if (geo_data[0].size() == 3){geo_converter.Reset(geo_data[0][0], geo_data[0][1], geo_data[0][2]);for (int i = 0; i < geo_data.size(); ++i){double local_E, local_N, local_U;// convert[lat,lon,hgt] to ENUgeo_converter.Forward(geo_data[i][0], geo_data[i][1], geo_data[i][2], local_E, local_N, local_U);std::vector<double> data_each;data_each.emplace_back(local_E);data_each.emplace_back(local_N);data_each.emplace_back(local_U);ENU_data.emplace_back(data_each);std::cout << "i=" << i << std::endl;}}}std::string str_ENU_data = "../enu.dat";//e,n,uWriteDat(str_ENU_data, ENU_data);return 0;
    }
    
  • CMakeLists.txt 文件

    cmake_minimum_required(VERSION 3.10)
    project(geographiclib_demo)set(CMAKE_CXX_STANDARD 14)find_package (GeographicLib REQUIRED)
    include_directories(${GeographicLib_INCLUDE_DIRS})add_executable(geographiclib_demo main.cpp)
    target_link_libraries(geographiclib_demo ${GeographicLib_LIBRARIES})
    
  • 编译 & 执行

    git clone https://gitee.com/jqf64078/geographiclib_demo.git
    cd geographiclib_demo
    mkdir build && cd build
    cmake ..
    make
    ./geographiclib_demo
    
  • 转换ENU米制坐标结果绘制,matlab 绘制。

    enu_data = load('enu.dat');
    plot(enu_data(:,1),enu_data(:,2));grid on;xlabel('East'),ylabel('North');
    
  • csv 文件格式,程序只是简单地定义 [纬度,经度,高度] 如下所示的格式进行读取。

    lat, lon, h,
    lat, lon, h,
    lat, lon, h,

SLAM 中地理计算库 GeographicLib 极简入门 (Ubuntu 18.04 c++例子)相关推荐

  1. linux界面美化 简书,Ubuntu 18.04 装机及美化

    Ubuntu 系统安装及美化教程,以及一些实用软件推荐 一.Ubuntu 18.04 装机 安装教程以 Ubuntu18.04 为例,但安装方法也适用于其他版本的安装 装机步骤 下载 Ubuntu 镜 ...

  2. linux界面美化 简书,Ubuntu 18.04 LTS 界面美化方法

    Ubuntu 系统是一款非常入门级的Linux操作系统, 简单易用 , 软件源也比较丰富, 大多数软件工具可以直接下载安装使用,对于不会编程的小白来说,省去了不少折腾时间. 当我们第一次安装Ubunt ...

  3. 如何在 Ubuntu 18.04 LTS 中配置 IP 地址?

    在 Ubuntu 18.04 LTS 上配置 IP 地址的方法与旧方法有很大不同,与以前的版本不同,Ubuntu 18.04 使用Netplan实用程序,它是一个新的命令行网络配置实用程序,用于配置 ...

  4. Linux终端文件夹管理员,如何在Ubuntu 18.04中以管理员权限打开文件和文件夹

    本文向你介绍在Ubuntu 18.04中以管理员权限打开文件和文件夹. 与 Windows 中的资源管理器一样,在 Ubuntu 系统的 Nautilus 文件管理器中,您也可以查看到系统中的所有文件 ...

  5. 黑科技抢先尝(续) - Windows terminal中WSL Linux 终端的极简美化指南

    之前,本人写了两篇文章 黑科技抢先尝 | Windows全新终端初体验(附代码Build全过程) 和 程会玩 | 无需自行编译也能玩转 Windows Terminal,介绍了玩转Windows te ...

  6. tensorflow平台极简方式_TensorFlow极简入门教程

    原标题:TensorFlow极简入门教程 随着 TensorFlow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架.本文介绍了TensorFlow 基础,包括静态计 ...

  7. Docker极简入门

    原 Docker极简入门 2018年05月22日 20:25:12 阅读数:44 一.Docker概述 Docker通过一个包括应用程序运行时所需的一切的可执行镜像启动容器,包括配置有代码.运行时.库 ...

  8. Python极简入门教程

    前言 为了方便各位小白能轻松入门Python,同时加深自己对Python的理解,所以创造了"Python极简入门教程",希望能帮到大家,若有错误请多指正,谢谢.极简入门教程代表着不 ...

  9. Seata 极简入门

    1. 概述 Seata 是阿里开源的一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务. 1.1 四种事务模式 Seata 目标打造一站式的分布事务的解决方案,最终会提供四种事务 ...

最新文章

  1. 微信小程序实时获取用户经纬度
  2. 精选 GitHub 值得收藏的100个前端项目
  3. 推荐一个AutoCad查看器——Free DWG Viewer试用
  4. 前端:JS字符串操作函数类库
  5. min-width:100%和max-width:100%的区别
  6. SDOI2014 旅行
  7. 一个奇怪的注意事项TNS-12545 TNS-12560 TNS-00515
  8. 【VirtualBox】设置NAT端口映射-SSH登录
  9. UWP开发学习笔记3
  10. 190628每日一句
  11. 计算机回收站设置大小,电脑怎么设置回收站容量 电脑回收站的数据文件位置在哪...
  12. 北漂18届三本毕业生从实习到正式工作的前端开发求职经历
  13. 实习日记5:过滤器+批量删除+角色管理
  14. oneos组件系列02:ws2812全彩LED
  15. 【3小时学会C语言】横向对比/纵向剖析,轻松学习C语言
  16. Git 初學筆記 - 指令操作教學
  17. androidP 对反射的限制之黑名单机制
  18. 鲜为人知的另一面?比尔·盖茨被曝猛料!
  19. strtok函数的使用
  20. 计算机硬盘做u盘启动不了,U盘启动找不到硬盘的解决方法

热门文章

  1. vue3图片头像裁剪上传
  2. U盘安装windows10时显示 windows无法安装到这个磁盘
  3. 关于极限的有界性的理解
  4. android之通过MediaRecorder进行手机录音
  5. 深度强化学习综述(上)
  6. 【树上算法】最近公共祖先(LCA)
  7. 3dsMax---点击渲染软件卡死
  8. 如何理解数据库事务?
  9. python读取路径中相对路径_python 路径相关
  10. ubuntu下查看当前使用的python路径