当前位置: 首页> 教育> 锐评 > 【C++】开源:坐标转换和大地测量GeographicLib库配置使用

【C++】开源:坐标转换和大地测量GeographicLib库配置使用

时间:2025/7/27 22:01:02来源:https://blog.csdn.net/qq_40344790/article/details/140303947 浏览次数:0次

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍坐标转换和大地测量GeographicLib库配置使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :satisfied:3. 使用说明

😏1. 项目介绍

项目Github地址:https://github.com/geographiclib/geographiclib

GeographicLib是一个用于处理地理坐标转换和大地测量(geodesy)的开源库,它提供了一系列工具和算法,用于在地球表面上执行各种地理计算。

主要特点:

1.精确的地理计算:GeographicLib库提供了高精度的地理计算方法,能够处理大地测量中的复杂数学问题,如计算两个地点之间的距离、方向、初始方位角等。

2.支持多种椭球体和大地基准:支持多种地球椭球体模型(如WGS84、GRS80等)和大地基准,可以根据需要选择合适的模型进行地理计算。

3.跨平台兼容性:GeographicLib库可以在多种操作系统上运行,包括Linux、Windows和macOS等,使其具有较好的跨平台兼容性。

4.多种接口和语言支持:提供了C++、Python和其他语言的接口,使得开发人员可以在不同的编程环境中使用GeographicLib的功能。

GeographicLib库广泛应用于地理信息系统(GIS)、地图制作、航海、航空、地理学研究等领域

😊2. 环境配置

Ubuntu可以apt安装:

sudo apt install libgeographic-dev geographiclib-tools

程序g++编译:

g++ -o main main.cpp -lGeographic

😆3. 使用说明

计算两个地点之间的大圆距离:

#include <iostream>
#include <GeographicLib/Geodesic.hpp>int main() {// Create a Geodesic object for WGS84 ellipsoidGeographicLib::Geodesic geod(GeographicLib::Constants::WGS84_a(), GeographicLib::Constants::WGS84_f());// Coordinates of Philadelphia, PAdouble lat1 = 39.9526, lon1 = -75.1652;// Coordinates of Los Angeles, CAdouble lat2 = 34.0522, lon2 = -118.2437;// Calculate distance between the two pointsdouble s12;geod.Inverse(lat1, lon1, lat2, lon2, s12);std::cout << "Distance between Philadelphia, PA and Los Angeles, CA: " << s12 / 1000.0 << " km\n";return 0;
}

官方给出的经纬度和UTM坐标系的转换:

// Example of using the GeographicLib::UTMUPS class#include <iostream>
#include <iomanip>
#include <exception>
#include <string>
#include <GeographicLib/UTMUPS.hpp>using namespace std;
using namespace GeographicLib;int main() {try {// See also example-GeoCoords.cpp{// Sample forward calculationdouble lat = 33.3, lon = 44.4; // Baghdadint zone;bool northp;double x, y;UTMUPS::Forward(lat, lon, zone, northp, x, y);string zonestr = UTMUPS::EncodeZone(zone, northp);cout << fixed << setprecision(2)<< zonestr << " " << x << " " << y << "\n";}{// Sample reverse calculationstring zonestr = "38n";int zone;bool northp;UTMUPS::DecodeZone(zonestr, zone, northp);double x = 444e3, y = 3688e3;double lat, lon;UTMUPS::Reverse(zone, northp, x, y, lat, lon);cout << lat << " " << lon << "\n";}}catch (const exception& e) {cerr << "Caught exception: " << e.what() << "\n";return 1;}
}

在这里插入图片描述

以上。

关键字:【C++】开源:坐标转换和大地测量GeographicLib库配置使用

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: