进一步加强区门户网站建设管理办法,flashfxp 发布网站,网站制作的重要性,汕头自动seo#x1f60f;★,:.☆(#xffe3;▽#xffe3;)/$:.★ #x1f60f; 这篇文章主要介绍坐标转换和大地测量GeographicLib库配置使用。 无专精则不能成#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客#xff0c;一起学习#xff0c;共同进步。 喜欢的朋友可以关… ★,°:.☆(▽)/$:.°★ 这篇文章主要介绍坐标转换和大地测量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 -lGeographic3. 使用说明
计算两个地点之间的大圆距离
#include iostream
#include GeographicLib/Geodesic.hppint 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.hppusing 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;}
}以上。