当前位置: 首页 > news >正文

【C++】开源:地图投影和坐标转换proj库配置使用

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

文章目录

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

😏1. 项目介绍

官网:https://proj.org/en/9.4/

项目Github地址:https://github.com/OSGeo/PROJ

proj 库是一个开源的库,主要用于地理坐标系之间的转换和地图投影。它被广泛应用于地理信息系统(GIS)和其他需要坐标转换和地图投影的应用中。

基本概念:

1.坐标系:地球上的位置可以用不同的坐标系表示,如经纬度(WGS84)和投影坐标系(如UTM)。
2.地图投影:将地球的三维表面映射到二维平面上(如地图)的方法。不同的投影方法适用于不同的应用场景。
3.坐标转换:将一种坐标系中的点转换到另一种坐标系中,通常涉及复杂的数学计算。

主要功能:

1.坐标转换:支持多种地理坐标系之间的转换,如从WGS84到UTM,或者从地理坐标系到地心坐标系。
2.地图投影:支持多种地图投影方式,如墨卡托投影、兰伯特正形投影等。
3.坐标操作:支持各种坐标操作,如偏移、旋转等。

😊2. 环境配置

Ubuntu上使用可以直接apt安装:

sudo apt install libproj-dev

程序g++编译:

g++ -o main main.cpp -lproj

😆3. 使用说明

WGS84转UTM示例:

#include <proj.h>
#include <iostream>int main() {// 创建坐标转换上下文PJ_CONTEXT *ctx = proj_context_create();// 定义源和目标坐标系PJ *source_crs = proj_create(ctx, "EPSG:4326"); // WGS84PJ *target_crs = proj_create(ctx, "EPSG:32633"); // UTM zone 33N// 创建坐标转换对象PJ *transformation = proj_create_crs_to_crs_from_pj(ctx, source_crs, target_crs, nullptr, nullptr);if (transformation == nullptr) {std::cerr << "Failed to create transformation object." << std::endl;proj_context_destroy(ctx);return 1;}// 坐标转换前,需要将坐标转换对象转为度量型PJ *transform = proj_normalize_for_visualization(ctx, transformation);proj_destroy(transformation);if (transform == nullptr) {std::cerr << "Failed to normalize transformation." << std::endl;proj_context_destroy(ctx);return 1;}// 输入经纬度坐标 (经度, 纬度)PJ_COORD input = proj_coord(12.0, 55.0, 0, 0); // (Longitude, Latitude)PJ_COORD output;// 执行坐标转换output = proj_trans(transform, PJ_FWD, input);// 输出转换后的坐标 (东, 北)std::cout << "Easting: " << output.xy.x << " Northing: " << output.xy.y << std::endl;// 清理资源proj_destroy(transform);proj_context_destroy(ctx);return 0;
}

UTM转WGS84示例:

#include <proj.h>
#include <iostream>int main() {// 创建PROJ上下文PJ_CONTEXT *ctx = proj_context_create();// 定义UTM坐标系 (EPSG:32633 - UTM zone 33N) 和 WGS84坐标系 (EPSG:4326)PJ *utm_crs = proj_create(ctx, "EPSG:32633"); // UTM zone 33NPJ *wgs84_crs = proj_create(ctx, "EPSG:4326"); // WGS84// 创建坐标转换对象PJ *transformation = proj_create_crs_to_crs_from_pj(ctx, utm_crs, wgs84_crs, nullptr, nullptr);if (transformation == nullptr) {std::cerr << "Failed to create transformation object." << std::endl;proj_context_destroy(ctx);return 1;}// 将转换对象规范化为视觉化使用PJ *transform = proj_normalize_for_visualization(ctx, transformation);proj_destroy(transformation);if (transform == nullptr) {std::cerr << "Failed to normalize transformation." << std::endl;proj_context_destroy(ctx);return 1;}// 输入UTM坐标 (Easting, Northing)double utm_easting = 500000.0; // 例如: 500000米double utm_northing = 4649776.22482; // 例如: 4649776.22482米PJ_COORD input = proj_coord(utm_easting, utm_northing, 0, 0);// 执行坐标转换PJ_COORD output = proj_trans(transform, PJ_INV, input); // PJ_INV 表示逆转换(UTM -> WGS84)// 输出转换后的WGS84坐标 (经度, 纬度)std::cout << "Longitude: " << output.lp.lam << " Latitude: " << output.lp.phi << std::endl;// 清理资源proj_destroy(transform);proj_context_destroy(ctx);return 0;
}

在这里插入图片描述

以上。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • qt 自定义信号和槽举例
  • Spring的AOP进阶。(AOP的通知类型、通知顺序、切入点表达式和连接点。)
  • 数据绑定注解功能
  • @component注解的分类
  • 【手写数据库内核组件】0201 哈希表hashtable的实战演练,多种非加密算法,hash桶的冲突处理,查找插入删除操作的代码实现
  • uni-app三部曲之三: 路由拦截
  • 【系统架构设计】计算机组成与体系结构(一)
  • alibaba EasyExcel 简单导出数据到Excel
  • 创建vue3项目
  • 侯捷C++面向对象高级编程(上)-9-扩展补充:类模板、函数模板及其他
  • 哪些独立站外链策略最有效?
  • 压测jmeter 插件 之 tps和响应时间图
  • mysql 一主多从环境搭建
  • (C++哈希表01)
  • java springboot监听事件和处理事件
  • __proto__ 和 prototype的关系
  • 【Leetcode】104. 二叉树的最大深度
  • express如何解决request entity too large问题
  • HTML5新特性总结
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Node + FFmpeg 实现Canvas动画导出视频
  • Vue ES6 Jade Scss Webpack Gulp
  • vuex 学习笔记 01
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 对超线程几个不同角度的解释
  • 基于web的全景—— Pannellum小试
  • 聊聊flink的TableFactory
  • 微信开源mars源码分析1—上层samples分析
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小而合理的前端理论:rscss和rsjs
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 在weex里面使用chart图表
  • Linux权限管理(week1_day5)--技术流ken
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 国内开源镜像站点
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • # Redis 入门到精通(七)-- redis 删除策略
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $$$$GB2312-80区位编码表$$$$
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (八)Spring源码解析:Spring MVC
  • (搬运以学习)flask 上下文的实现
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (接口封装)
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (转)C#调用WebService 基础
  • (转)socket Aio demo