【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;
}

在這里插入圖片描述

以上。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41800.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41800.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41800.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue中的watch和$watch的用法實際場景和區別

watch&#xff08;組件選項&#xff09; watch 是Vue組件的一個選項&#xff0c;它允許你定義一些監聽器&#xff0c;這些監聽器會在組件的響應式數據變化時調用。它主要用于組件內部的數據監聽。 實際場景&#xff1a; 當組件內部的數據變化時&#xff0c;需要執行一些操作&…

5款極其強大的大模型文生圖工具!

文生圖技術是一種基于深度學習的技術&#xff0c;可以根據自然語言描述生成相應的高品質圖像。 下面介紹幾個目前市場上比較優秀的工具或網站&#xff0c;并制作一張男性的白袍巫師圖來比較。 針對大模型和AIGC技術趨勢、AIGC 算法項目落地經驗分享、新手如何入門算法崗、該如…

el-scrollbar組件使用踩坑記錄

一、el-scrollbar和瀏覽器原生滾動條一起出現 問題描述 el-scrollbar組件主要用于替換瀏覽器原生導航條。如下圖所示&#xff0c;使用el-scrollbar組件后&#xff0c;發現未能成功替換掉瀏覽器原生導航條&#xff0c;二者同時出現。 引發原因 el-scrollbar的height屬性如果…

前端根據目錄生成模塊化路由routes

根據約定大于配置的邏輯&#xff0c;如果目錄結構約定俗成&#xff0c;前端是可以根據目錄結構動態生成路由所需要的 route 結構的&#xff0c;這個過程是要在編譯時 進行&#xff0c;生成需要的代碼&#xff0c;保證運行時的代碼正確即可 主流的打包工具都有對應的方法讀取文…

【不容錯過】可靈AI重磅更新:畫質升級,運鏡控制,首尾幀自定義,還有30萬創作激勵獎金!

還記得最近在各大平臺肆虐的老照片變成視頻嗎&#xff0c;就是用快手的可靈AI做的&#xff0c;今天可靈又迎來了一次重大更新。 「電腦端上線了」 之前一直用其他工具生的圖片還需要保存到手機上&#xff0c;再用可靈來生成視頻&#xff0c;很多人都能感受到手機操作不太方便&…

Vue3項目給ElementPlus設置中文的兩個方案

介紹 在Vue3項目將ElementPlus切換為中文 1、在App.vue的文件中修改 <template><el-config-provider :locale"zhCn"><router-view></router-view></el-config-provider> </template><script lang"ts" setup>im…

elasticsearch源碼分析-04集群狀態發布

集群狀態發布 cluster模塊封裝了在集群層面執行的任務&#xff0c;如集群健康、集群級元信息管理、分片分配給節點、節點管理等。集群任務執行之后可能會產生新的集群狀態&#xff0c;如果產生新的集群狀態主節點會將集群狀態廣播給其他節點。 集群狀態封裝在clusterState中&…

Linux下網絡編程-簡易poll服務器和客戶端

Linux下網絡編程-簡易poll服務器和客戶端 簡易poll服務器: //編譯命令&#xff1a;g -g xxx.cpp -o xxx #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h…

ionic7 使用Capacitor打包 apk 之后,設置網絡權限

報錯處理 在打包的時候遇到過幾個問題&#xff0c;這里記錄下來兩個 Visual Studio Code運行ionic build出錯顯示ionic : 無法加載文件 ionic 項目通過 android studio 打開報錯 capacitor.settings.gradle 文件不存在 ionic7 項目初始化以及打包 apk 這篇文章講到了如果安裝…

2-25 基于matlab的語音信號降噪處理算法

基于matlab的語音信號降噪處理算法&#xff0c;采用譜減法&#xff0c;可以對強噪聲背景下的語音信號進行去噪。輸入原始信號及加噪信號&#xff0c;對加噪信號進行降噪&#xff0c;并提高信噪比。程序已調通&#xff0c;可直接運行。 2-25 語音信號降噪處理算法 譜減法 - 小紅…

餐飲管理系統-計算機畢業設計源碼43667

餐飲管理系統 摘 要 在信息化、數字化的時代背景下&#xff0c;餐飲行業面臨著前所未有的挑戰與機遇。為了提高運營效率、優化顧客體驗&#xff0c;餐飲企業亟需一套高效、穩定且靈活的管理系統來支撐其日常運營。基于Spring Boot的餐飲管理系統應運而生&#xff0c;成為餐飲行…

mac 安裝nvm的教程

在macOS上切換Node.js版本&#xff0c;可以使用nvm&#xff08;Node Version Manager&#xff09;。以下是安裝nvm和切換Node.js版本的步驟&#xff1a; 安裝nvm 下載方式 終端復制輸入&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.…

教育科研行業算力池化解決方案

教育科研行業算力池化解決方案 解決方案概述 1. 算力資源集中管理 建立校級算力中心:通過信息中心建設校級的算力中心,將分散在各學院或科研團隊的算力資源集中管理。利用算力池化技術:采用先進的算力池化技術(如趨動科技的OrionX),將物理GPU資源切分為多個虛擬GPU(vGP…

GIT - 一條命令把項目更新到遠程倉庫

前言 閱讀本文大概需要1分鐘 說明 更新項目到遠程倉庫只需要執行一條命令&#xff0c;相當的簡便 步驟 第一步 編輯配置文件 vim ~/.bash_profile第二步 寫入配置文件 gsh() {local msg"${1:-ADD COMMIT PUSH}"git add . && git commit -m "$m…

mipi協議中的calibration和scramble模式

在MIPI(Mobile Industry Processor Interface)協議中,calibration(校準)和scramble(加擾)模式是兩個重要的特性,它們分別用于優化數據傳輸的準確性和減少信號干擾。以下是對這兩個模式的詳細解析: Calibration(校準)模式 目的與功能: 校準模式主要用于優化和補償由…

數據庫關鍵字執行順序

在 SQL 中&#xff0c;關鍵字的執行順序通常如下&#xff1a; FROM&#xff1a;確定要查詢的表或數據源&#xff0c;并執行表之間的連接操作&#xff08;如 INNER JOIN、LEFT JOIN 等&#xff09;。FROM 子句執行順序為從后往前、從右到左。ON&#xff1a;應用連接條件&#xf…

C生萬物之文件操作

文章目錄 一、為什么使用文件&#xff1f;二、什么是文件&#xff1f;1、程序文件2、數據文件3、文件名 三、文件的打開和關閉1、文件指針2、文件的打開和關閉 四、文件的順序讀寫1. 8個重要的庫函數1.1 單字符輸入輸出【fputc和fgetc】1.2 文本行輸入輸出【fputs和fgets】1.3 …

主干網絡篇 | YOLOv5/v7 更換主干網絡之 ShuffleNetv2 | 高效CNN架構設計的實用指南(2)

主干網絡篇 | YOLOv5/v7 更換主干網絡之 ShuffleNetv2 | 高效CNN架構設計的實用指南 概述 YOLOv5和YOLOv7是目前主流的輕量級目標檢測模型&#xff0c;在速度和精度方面取得了良好的平衡。然而&#xff0c;傳統的YOLOv5/v7模型使用FPN和CSPNet等結構作為主干網絡&#xff0c;…

機器學習 C++ 的opencv實現SVM圖像二分類的測試 (三)【附源碼】

機器學習 C 的opencv實現SVM圖像二分類的測試 (三) 數據集合下載地址&#xff1a;https://download.csdn.net/download/hgaohr1021/89506900 根據上節得到的svm.xml&#xff0c;測試結果為&#xff1a; #include <stdio.h> #include <time.h> #include <o…

網絡安全應急處理流程

網絡安全應急處理流程是指在發生網絡安全事件時&#xff0c;組織應采取的一系列措施&#xff0c;以快速響應、控制、恢復和調查網絡安全事件&#xff0c;確保業務連續性和數據安全。以下是一個詳細的網絡安全應急處理流程&#xff1a; 1. 準備階段 目標&#xff1a;建立和維護…