windows 安裝gdal實現png轉tif,以及柵格拼接

windows 安裝gdal實現png轉tif,以及柵格拼接

一、安裝gdal

網上有很多安裝gdal的方法,此處通過osgeo4w安裝gdal

1.下載osgeo4w

下載地址 https://trac.osgeo.org/osgeo4w/

在這里插入圖片描述

2、安裝osgeo4w

exe文件安裝,前面部分很簡單,就不再贅述,此處主要介紹著重介紹這一步的選擇,如下如:

軟件安裝

在這里插入圖片描述

看這個頁面很多參數,會讓人看的一頭霧水,其實主要就是關注一下 gdalgdal-dev 兩個選項,這兩個選項是安裝gdalgdal-dev的選項,其他選項都是可選的,可以自己選擇。

在這里插入圖片描述
在這里插入圖片描述

選擇完成靜待安裝即可

設置系統環境變量

步驟如下:
1、在 Windows 中打開
👉【開始菜單】→ 輸入 環境變量 → 選擇 “編輯系統環境變量”

2、點擊右下角的【環境變量(N)…】

3、在下方【系統變量】區域,找到變量名為 Path,點擊“編輯”

4、點擊“新建”,然后輸入:

C:\OSGeo4W64\bin

5、一直點【確定】保存退出。

安裝完成后檢查目錄

gdal_translate主要用于png轉換tif使用

C:\OSGeo4W64\bin\gdal_translate.exe
檢查命令是否可用
gdal_translate --version

二、命令行實現png轉tif

核心代碼如下:

function generateGeoTIFF(pngPath, tiffPath, bbox) {const [minX, maxY, maxX, minY] = bbox;const command = `gdal_translate -of GTiff -a_ullr ${minX} ${maxY} ${maxX} ${minY} -a_srs EPSG:4326 "${pngPath}" "${tiffPath}"`;try {execSync(command,{env: {...process.env,PROJ_LIB: "C:\\OSGeo4W\\share\\proj",          // 替換為你的路徑PATH: `C:\\OSGeo4W\\bin;${process.env.PATH}`,   // 添加 gdal_translate 所在目錄stdio: 'inherit' // 方便看執行過程中的輸出}});console.log(`GeoTIFF 生成成功: ${tiffPath}`);} catch (err) {console.error('GeoTIFF 生成失敗:', err);}
}

參數詳細解釋

🧱 構建命令字符串
const [minX, maxY, maxX, minY] = bbox;
const command = `gdal_translate -of GTiff -a_ullr ${minX} ${maxY} ${maxX} ${minY} -a_srs EPSG:4326 "${pngPath}" "${tiffPath}"`;

🔹 gdal_translate 參數解析:

參數含義
-of GTiff輸出格式為 GeoTIFF
-a_ullr <ulx> <uly> <lrx> <lry>指定影像的四角坐標
ulx/uly 是左上角經緯度,
lrx/lry 是右下角經緯度
-a_srs EPSG:4326指定空間參考系統為 WGS 84(經緯度坐標)
"${pngPath}"輸入 PNG 文件路徑
"${tiffPath}"輸出 GeoTIFF 路徑
?? 執行命令 + 環境配置
execSync(command, {env: {...process.env,PROJ_LIB: "C:\\OSGeo4W\\share\\proj",         // 設置 PROJ 庫路徑PATH: `C:\\OSGeo4W\\bin;${process.env.PATH}`, // 添加 GDAL 所在目錄},stdio: 'inherit' // 把子進程的輸出繼承到當前進程中(其實應在外面)
});
  • execSync(command, { … }): 同步執行命令。child_process.execSync 是 Node.js 的標準 API。

  • env: 設置執行該命令時的環境變量。

    • …process.env: 保留當前系統環境變量。

    • PROJ_LIB: 指定 proj.db 所在目錄(GDAL 依賴它進行坐標系轉換)。

    • PATH: 加入 gdal_translate 所在目錄(默認在 OSGeo4W 安裝路徑下的 bin 目錄)。

這個函數實現了用 GDAL 工具 將普通圖像(PNG)轉為含有地理坐標信息的 GeoTIFF,關鍵點是設置好

  • bbox 正確代表圖像的地理范圍;

  • 環境變量配置必須包含正確的 PROJ_LIB 路徑;

  • PATH 包含 gdal_translate.exe 所在路徑

三、帶空間參考的tifff拼接

核心代碼如下

使用gdalinfo 輸出提取像素大小
// 從 gdalinfo 輸出提取像素大小
function getPixelSize(file) {const output = execSync(`gdalinfo "${file}"`, { encoding: 'utf8' });const match = output.match(/Pixel Size = \(([-\d.]+),\s*([-.\d]+)\)/);if (!match) throw new Error(`無法從 ${file} 提取 Pixel Size`);return {x: Math.abs(parseFloat(match[1])),y: Math.abs(parseFloat(match[2]))};
}
使用gdalwarp實現帶空間參考的tifff拼接
const rowPaths = rowImages.map(f => `"${path.resolve(f)}"`).join(' ');
const finalCmd = `gdalwarp -overwrite -r near -of GTiff -co COMPRESS=LZW -tr ${pixelSizeFinal.x} ${pixelSizeFinal.y} ${rowPaths} "${finalOutput}"`;log('📦 最終拼接...');
log(`命令: ${finalCmd}`);try {execSync(finalCmd, {env: {...process.env,PROJ_LIB: "C:\\OSGeo4W\\share\\proj",},stdio: 'inherit'});log(`? 拼接完成,輸出文件:${finalOutput}`);
} catch (err) {log(`? 最終拼接失敗: ${err.message}`);process.exit(1);
構造 gdalwarp 命令
const finalCmd = `gdalwarp -overwrite -r near -of GTiff -co COMPRESS=LZW -tr ${pixelSizeFinal.x} ${pixelSizeFinal.y} ${rowPaths} "${finalOutput}"`;
🔍 各參數解釋:
參數含義
gdalwarpGDAL 的重投影 & 拼接工具
-overwrite如果輸出文件已存在則覆蓋
-r near采樣方法:最近鄰(near),適用于分類圖(比如影像瓦片)
-of GTiff輸出格式為 GeoTIFF
-co COMPRESS=LZW使用 LZW 壓縮 GeoTIFF 文件,減小體積
-tr <x> <y>設置輸出影像的分辨率(像素大小)
x: 像素寬度(經度);y: 像素高度(緯度)
${rowPaths}所有輸入圖像的路徑
"${finalOutput}"最終輸出文件路徑

感興趣可以在關注一下:

https://mp.weixin.qq.com/s/pH5oMnyz65zs8bOOrJARAw

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

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

相關文章

Node.js 源碼概覽

Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行時環境&#xff0c;它的源碼結構相當龐大且復雜。下面我將為你講解 Node.js 源碼的主要結構和關鍵組成部分。 源碼結構 Node.js 的主要源碼目錄結構如下&#xff1a; node/ ├── lib/ # JavaScript 核心模…

Linux :線程 【生產者消費者模型】

Linux &#xff1a;線程 【生產者消費者模型與信號量】 &#xff08;一&#xff09;生產消費模型1、生產消費模式概念2、生產者消費者之間的關系3、生產者消費者模型優點 &#xff08;二&#xff09;基于BlockingQueue的生產者消費者模型1、基于阻塞隊列模型2、模擬實現基于阻塞…

mac本地docker鏡像上傳指定虛擬機

在Mac本地將Docker鏡像上傳至指定虛擬機的完整步驟 1. 在Mac本地保存Docker鏡像為文件 通過docker save命令將鏡像打包為.tar文件&#xff0c;便于傳輸至虛擬機。 # 示例&#xff1a;保存名為"my_image"的鏡像到當前目錄 docker save -o my_image.tar my_image:ta…

C++跨平臺開發經驗與解決方案

在當今軟件開發領域&#xff0c;跨平臺開發已成為一個重要的需求。C作為一種強大的系統級編程語言&#xff0c;在跨平臺開發中扮演著重要角色。本文將分享在實際項目中的跨平臺開發經驗和解決方案。 1. 構建系統選擇 CMake的優勢 跨平臺兼容性好 支持多種編譯器和IDE 強大…

Void: Cursor 的開源平替

GitHub&#xff1a;https://github.com/voideditor/void 更多AI開源軟件&#xff1a;發現分享好用的AI工具、AI開源軟件、AI模型、AI變現 - 小眾AI Void&#xff0c;這款編輯器號稱是開源的 Cursor 和 GitHub Copilot 替代品&#xff0c;而且完全免費&#xff01; 在你的代碼庫…

基于HTML+JavaScript+CSS實現教學網站

摘要 21世紀是信息化的時代&#xff0c;信息化物品不斷地涌入我們的生活。同時&#xff0c;教育行業也產生了重大變革。傳統的身心教授的模式&#xff0c;正在被替代。互聯網模式的教育開辟了一片新的熱土。 這算是對教育行業的一次重大挑戰。截至目前&#xff0c;眾多教育行…

基于ssm+mysql的高校設備管理系統(含LW+PPT+源碼+系統演示視頻+安裝說明)

系統功能 管理員功能&#xff1a;系統登錄、員工管理、設備管理、設備采購統計、設備報廢統計&#xff1b;用戶角色功能&#xff1a;設備采購管理、設備報廢管理、個人資料管理。 作者&#xff1a;計算機搬磚家 開發技術&#xff1a;SpringBoot、php、Python、小程序、SSM、Vu…

電力桿塔安全監測解決方案

一、方案背景 在臺風、滑坡等自然災害出現時&#xff0c;極易產生倒桿、斷桿、桿塔傾斜、塔基滑動等致使桿塔失穩的狀況&#xff0c;進而引發導線斷線、線路跳閘等事故&#xff0c;給電網的安全穩定運行造成影響。可借助在鐵塔上裝設的傳感器&#xff0c;能夠感知鐵塔的工作狀態…

基于Quicker構建從截圖到公網圖像鏈接獲取的自動化流程

寫在前面&#xff1a;本博客僅作記錄學習之用&#xff0c;部分圖片來自網絡&#xff0c;如需引用請注明出處&#xff0c;同時如有侵犯您的權益&#xff0c;請聯系刪除&#xff01; 文章目錄 前言預備內容轉webp程序PicGo設置Quicker設置視頻演示總結互動致謝參考 前言 在自建博…

Python Requests庫完全指南:從入門到精通

引言 在Python的生態系統中&#xff0c;requests庫以其簡潔優雅的API設計和強大的功能&#xff0c;成為HTTP請求處理領域的標桿工具。無論是數據爬蟲開發、API接口調用&#xff0c;還是自動化測試場景&#xff0c;requests都能將復雜的網絡交互簡化為幾行可讀性極高的代碼。相…

滲透測試核心技術:內網滲透與橫向移動

內網滲透是紅隊行動的關鍵階段,攻擊者通過突破邊界進入內網后,需快速定位域控、橫向移動并維持權限。本節從內網環境搭建、信息收集、橫向移動技巧到權限維持工具,系統講解如何在內網中隱蔽行動并擴大戰果。 1. 內網環境搭建與基礎配置 目標: 模擬真實企業網絡,構建包含…

學習FineBI

FineBI 第一章 FineBI 介紹 1.1. FineBI 概述 FineBI 是帆軟軟件有限公司推出的一款商業智能 &#xff08;Business Intelligence&#xff09; 產品 。 FineBI 是新一代大數據分析的 BI 工具 &#xff0c; 旨在幫助企業的業務人員充分了解和利用他們的數據 。FineBI 憑借強…

CSS 浮動(Float)及其應用

1. 什么是浮動&#xff08;Float&#xff09;&#xff1f; 浮動元素會脫離正常的文檔流&#xff08;Document Flow&#xff09;&#xff0c;并向左或向右移動&#xff0c;直到碰到父元素的邊緣或另一個浮動元素。 基本語法 .float-left {float: left; }.float-right {float:…

二分算法的介紹簡單易懂

目錄 1.概論 2.樸素的二分算法 3.求左端點的二分算法和求右端點的二分算法 4.總結 1.概論 要想了解什么是二分算法&#xff0c;我們就要知道什么是二分算法&#xff0c;二分算法是根據數組的規律&#xff0c;每次查找的數據原來的效率可能要O&#xff08;n&#xff09;,而我…

ROS2學習(3)------架構概述

操作系統&#xff1a;ubuntu22.04 IDE:Visual Studio Code 編程語言&#xff1a;C11 ROS版本&#xff1a;2 ROS 2&#xff08;Robot Operating System 2&#xff09;的設計旨在提供一個靈活、可擴展且高效的框架&#xff0c;用于編寫復雜的機器人軟件。它引入了發布者/訂閱者&…

墨水屏顯示模擬器程序解讀

程序如下&#xff1a;出處https://github.com/tsl0922/EPD-nRF5?tabreadme-ov-file // GUI emulator for Windows // This code is a simple Windows GUI application that emulates the display of an e-paper device. #include <windows.h> #include <stdint.h>…

【技海登峰】Kafka漫談系列(十一)SpringBoot整合Kafka之消費者Consumer

【技海登峰】Kafka漫談系列(十一)SpringBoot整合Kafka之消費者Consumer spring-kafka官方文檔: https://docs.spring.io/spring-kafka/docs/2.8.10/reference/pdf/spring-kafka-reference.pdf KafkaTemplate API: https://docs.spring.io/spring-kafka/api/org/springframe…

【言語理解】邏輯填空之邏輯對應11

front&#xff1a;詞義辨析 11.1前后解釋對應 填空的詞匯大意可能是吖要結合實際情況不要一味高估導致適得其反的結果 未雨綢繆&#xff1a;趁著天沒下雨&#xff0c;先修繕房屋門窗。比喻事先做好準備工作&#xff0c;預防意外的事發生。&#xff08;提前做好準備&#xff0c…

ubuntu上 opencv + eclipse + C++

ubuntu上 opencv eclipse C 1. 安裝eclipse 安裝eclipse不用說了&#xff0c;前置條件要安裝java 配置快捷鍵方式 2. 新建c項目 配置opencv環境 project -> properties: 配置c標準庫版本&#xff1a; 配置opencv頭文件&#xff1a; 配置opencv庫文件&#xff1a;…

動態內存管理2+柔性數組

一、動態內存經典筆試題分析 分析錯誤并改正 題目1 void GetMemory(char *p) {p (char *)malloc(100); } void Test(void) {char *str NULL;GetMemory(str);strcpy(str, "hello world");printf(str); } int main() {Test();return 0; }錯誤的原因&#xff1a; …