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

😏★,° :.☆( ̄▽ ̄)/$:.°★ 😏

这篇文章主要介绍坐标转换和大地测量GeographicLib库配置使用。
无专精则不能成,无涉猎则不能通。------梁启超

欢迎来到我的博客,一起学习,共同进步。

喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • [:smirk:1. 项目介绍](#:smirk:1. 项目介绍)
    • [:blush:2. 环境配置](#:blush:2. 环境配置)
    • [:satisfied:3. 使用说明](#: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安装:

bash 复制代码
sudo apt install libgeographic-dev geographiclib-tools

程序g++编译:

bash 复制代码
g++ -o main main.cpp -lGeographic

😆3. 使用说明

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

cpp 复制代码
#include <iostream>
#include <GeographicLib/Geodesic.hpp>

int main() {
    // Create a Geodesic object for WGS84 ellipsoid
    GeographicLib::Geodesic geod(GeographicLib::Constants::WGS84_a(), GeographicLib::Constants::WGS84_f());

    // Coordinates of Philadelphia, PA
    double lat1 = 39.9526, lon1 = -75.1652;

    // Coordinates of Los Angeles, CA
    double lat2 = 34.0522, lon2 = -118.2437;

    // Calculate distance between the two points
    double 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坐标系的转换:

cpp 复制代码
// 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 calculation
      double lat = 33.3, lon = 44.4; // Baghdad
      int 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 calculation
      string 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;
  }
}

以上。

相关推荐
青柠之夏cc2 分钟前
前端拖拽功能原生实现,不引入拖拽库完成业务
开发语言·前端·python
ym hyd 1119 分钟前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
OKkankan15 分钟前
Python 高阶语法(一):高阶函数、闭包、lambda 与 functools——从底层真正理解装饰器
开发语言·python
geovindu22 分钟前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式
福大大架构师每日一题34 分钟前
Rust 1.99.0发布:C 可变参数、裸函数、Cargo 配置、Rustdoc 性能与大量兼容性调整全解析
c语言·开发语言·rust
智鸟科技GemeOpen开发者智能设备39 分钟前
平安校园 AI 智能实时告警系统 智鸟科技·GemeOpen + 谷华科技·融合创新方案白皮书
java·开发语言·python·物联网·智能家居
Wang's Blog1 小时前
Java框架 SpringCloud 快速入门: Feign 的自定义配置与日志级别
java·开发语言·spring cloud
成旭先生1 小时前
企业全景信息查询 API:工商照面 33 项、股东出资、变更与社保一次查全
java·开发语言·api接口·企业信息查询·工商数据·风控尽调·供应商准入
2601_962885721 小时前
批量取数比循环单取快多少?用 AlphaFeed klines.batch给多股票取数提速
开发语言·php·batch
动词ing1 小时前
【C语言题目练习】算法 整数反转
c语言·开发语言·算法