windows 安裝gdal實現png轉tif,以及柵格拼接
一、安裝gdal
網上有很多安裝gdal的方法,此處通過osgeo4w
安裝gdal
1.下載osgeo4w
下載地址 https://trac.osgeo.org/osgeo4w/
2、安裝osgeo4w
exe
文件安裝,前面部分很簡單,就不再贅述,此處主要介紹著重介紹這一步的選擇,如下如:
軟件安裝
看這個頁面很多參數,會讓人看的一頭霧水,其實主要就是關注一下 gdal
和 gdal-dev
兩個選項,這兩個選項是安裝gdal
和gdal-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}"`;
🔍 各參數解釋:
參數 | 含義 |
---|---|
gdalwarp | GDAL 的重投影 & 拼接工具 |
-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