第02章:GDAL安裝與環境配置
2.1 安裝概述
GDAL 的安裝方式多種多樣,根據操作系統和使用場景的不同,可以選擇不同的安裝方法。本章將詳細介紹各種安裝方式,幫助你在不同環境下成功配置 GDAL。
2.1.1 安裝方式比較
|
安裝方式
|
優點
|
缺點
|
適用場景
|
|
包管理器
|
簡單快捷,依賴自動處理
|
版本可能較舊
|
快速開發、學習
|
|
Conda
|
版本選擇靈活,環境隔離
|
需要學習 Conda
|
Python 開發
|
|
OSGeo4W
|
Windows 專用,功能完整
|
僅限 Windows
|
Windows GIS 開發
|
|
Docker
|
環境隔離,可複製
|
需要 Docker 知識
|
生產部署、CI/CD
|
|
源碼編譯
|
完全自定義
|
複雜耗時
|
特殊需求、嵌入式
|
|
NuGet/.NET
|
.NET 集成簡單
|
僅限 .NET 項目
|
C#/.NET 開發
|
|
Maven
|
Java 集成簡單
|
僅限 Java 項目
|
Java 開發
|
2.1.2 版本選擇建議
|
使用場景
|
推薦版本
|
理由
|
|
生產環境
|
3.4.x LTS 或 3.6.x
|
穩定性高
|
|
學習開發
|
最新穩定版
|
功能最全
|
|
舊系統兼容
|
2.4.x
|
兼容性好
|
|
雲原生應用
|
3.6.x+
|
COG 支持完善
|
2.2 Windows 安裝
2.2.1 使用 OSGeo4W 安裝(推薦)
OSGeo4W 是 Windows 平台上安裝 GDAL 的最佳選擇,它提供了完整的 OSGeo 軟件棧。
步驟 1:下載安裝程序
訪問 OSGeo4W 官網 下載安裝程序:
https://download.osgeo.org/osgeo4w/v2/osgeo4w-setup.exe
步驟 2:運行安裝程序
1. 雙擊 osgeo4w-setup.exe
2. 選擇 "Express Install" 或 "Advanced Install"
3. 選擇下載站點(推薦選擇離你最近的鏡像)
4. 選擇要安裝的包
Express Install 包含:
- GDAL
- QGIS
- GRASS GIS
Advanced Install 可選包:
|
包名
|
描述
|
|
gdal
|
GDAL 核心庫和工具
|
|
gdal-python
|
Python 綁定
|
|
gdal-java
|
Java 綁定
|
|
gdal-csharp
|
C# 綁定
|
|
proj
|
PROJ 投影庫
|
|
geos
|
GEOS 幾何庫
|
步驟 3:配置環境變量
安裝完成後,需要配置環境變量:
:: 設置 OSGeo4W 根目錄
set OSGEO4W_ROOT=C:\OSGeo4W
:: 添加到 PATH
set PATH=%OSGEO4W_ROOT%\bin;%PATH%
:: 設置 GDAL 數據目錄
set GDAL_DATA=%OSGEO4W_ROOT%\share\gdal
:: 設置 PROJ 數據目錄
set PROJ_LIB=%OSGEO4W_ROOT%\share\proj
也可以通過系統設置永久添加:
1. 右鍵"此電腦" -> 屬性
2. 高級系統設置 -> 環境變量
3. 在"系統變量"中編輯 Path,添加 C:\OSGeo4W\bin
4. 新建系統變量 GDAL_DATA = C:\OSGeo4W\share\gdal
5. 新建系統變量 PROJ_LIB = C:\OSGeo4W\share\proj
步驟 4:驗證安裝
打開命令提示符:
:: 查看 GDAL 版本
gdalinfo --version
:: 輸出示例:
:: GDAL 3.7.0, released 2023/05/02
:: 查看支持的格式
gdalinfo --formats
:: 查看矢量格式
ogrinfo --formats
2.2.2 使用 Conda 安裝
Conda 是另一種在 Windows 上安裝 GDAL 的好方法:
步驟 1:安裝 Miniconda 或 Anaconda
從 Conda 官網 下載安裝。
步驟 2:創建環境並安裝 GDAL
:: 創建新環境
conda create -n gdal_env python=3.10
:: 激活環境
conda activate gdal_env
:: 從 conda-forge 安裝 GDAL
conda install -c conda-forge gdal
:: 或指定版本
conda install -c conda-forge gdal=3.7.0
步驟 3:驗證安裝
:: 激活環境
conda activate gdal_env
:: Python 中驗證
python -c "from osgeo import gdal; print(gdal.__version__)"
2.2.3 使用預編譯二進制包
GISInternals 提供預編譯的 Windows GDAL 包:
下載地址: https://www.gisinternals.com/release.php
選擇合適的版本:
|
選項
|
説明
|
|
release-1930-x64
|
VS2022 64位編譯
|
|
release-1928-x64
|
VS2019 64位編譯
|
|
MSVC 版本
|
選擇與你的開發環境匹配的版本
|
安裝步驟:
1. 下載 gdal-X.X.X-XXXX-x64-core.msi
2. 運行安裝程序
3. 選擇安裝目錄(如 C:\GDAL)
4. 配置環境變量
2.3 Linux 安裝
2.3.1 Ubuntu/Debian 安裝
方法 1:使用 apt 安裝(版本可能較舊)
# 更新包列表
sudo apt update
# 安裝 GDAL 庫
sudo apt install gdal-bin libgdal-dev
# 安裝 Python 綁定
sudo apt install python3-gdal
# 驗證安裝
gdalinfo --version
方法 2:使用 UbuntuGIS PPA(推薦,版本較新)
# 添加 UbuntuGIS PPA
sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt update
# 安裝 GDAL
sudo apt install gdal-bin libgdal-dev
# 安裝 Python 綁定
sudo apt install python3-gdal
# 驗證安裝
gdalinfo --version
方法 3:使用 UbuntuGIS Unstable PPA(最新版本)
# 添加 unstable PPA(慎用於生產環境)
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
sudo apt update
# 安裝 GDAL
sudo apt install gdal-bin libgdal-dev
2.3.2 CentOS/RHEL/Rocky Linux 安裝
方法 1:使用 EPEL 倉庫
# 安裝 EPEL 倉庫
sudo dnf install epel-release
# 安裝 GDAL
sudo dnf install gdal gdal-devel
# 安裝 Python 綁定
sudo dnf install python3-gdal
方法 2:使用 Conda
# 安裝 Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 創建環境並安裝 GDAL
conda create -n gdal_env python=3.10
conda activate gdal_env
conda install -c conda-forge gdal
2.3.3 從源碼編譯(高級)
當需要特定功能或最新版本時,可以從源碼編譯:
步驟 1:安裝依賴
# Ubuntu/Debian
sudo apt install build-essential cmake \
libproj-dev libgeos-dev \
libtiff-dev libgeotiff-dev \
libpng-dev libjpeg-dev \
libcurl4-openssl-dev libxml2-dev \
libsqlite3-dev libpq-dev \
python3-dev swig
# CentOS/RHEL
sudo dnf groupinstall "Development Tools"
sudo dnf install cmake proj-devel geos-devel \
libtiff-devel libgeotiff-devel \
libpng-devel libjpeg-devel \
libcurl-devel libxml2-devel \
sqlite-devel postgresql-devel \
python3-devel swig
步驟 2:下載源碼
# 從 GitHub 克隆
git clone https://github.com/OSGeo/gdal.git
cd gdal
# 或下載發佈版本
wget https://github.com/OSGeo/gdal/releases/download/v3.7.0/gdal-3.7.0.tar.gz
tar -xzf gdal-3.7.0.tar.gz
cd gdal-3.7.0
步驟 3:配置和編譯
# 創建構建目錄
mkdir build
cd build
# 配置(使用 CMake)
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_PYTHON_BINDINGS=ON \
-DGDAL_USE_GEOS=ON \
-DGDAL_USE_PROJ=ON
# 編譯(使用多線程加速)
make -j$(nproc)
# 安裝
sudo make install
# 更新庫緩存
sudo ldconfig
步驟 4:驗證安裝
# 檢查版本
gdalinfo --version
# 檢查庫路徑
ldconfig -p | grep gdal
2.4 macOS 安裝
2.4.1 使用 Homebrew 安裝(推薦)
# 安裝 Homebrew(如果未安裝)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安裝 GDAL
brew install gdal
# 驗證安裝
gdalinfo --version
2.4.2 使用 Conda 安裝
# 安裝 Miniconda
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
# 或 Apple Silicon
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
bash Miniconda3-latest-MacOSX-*.sh
# 創建環境並安裝 GDAL
conda create -n gdal_env python=3.10
conda activate gdal_env
conda install -c conda-forge gdal
2.4.3 使用 KyngChaos 包(較舊方法)
訪問 https://www.kyngchaos.com/software/frameworks/ 下載框架包。
2.5 Docker 安裝
Docker 是部署 GDAL 的理想方式,提供了完全隔離和可複製的環境。
2.5.1 使用官方鏡像
# 拉取官方 GDAL 鏡像
docker pull ghcr.io/osgeo/gdal:ubuntu-full-latest
# 或指定版本
docker pull ghcr.io/osgeo/gdal:ubuntu-full-3.7.0
# 運行容器
docker run -it --rm ghcr.io/osgeo/gdal:ubuntu-full-latest gdalinfo --version
2.5.2 鏡像類型選擇
|
鏡像標籤
|
大小
|
描述
|
|
alpine-small
|
~50MB
|
最小鏡像,基礎功能
|
|
alpine-normal
|
~150MB
|
常用格式支持
|
|
ubuntu-small
|
~200MB
|
Ubuntu 基礎
|
|
ubuntu-full
|
~1GB
|
完整功能,所有驅動
|
2.5.3 掛載數據目錄
# 掛載本地目錄到容器
docker run -it --rm \
-v /path/to/data:/data \
ghcr.io/osgeo/gdal:ubuntu-full-latest \
gdalinfo /data/myfile.tif
2.5.4 自定義 Dockerfile
# Dockerfile
FROM ghcr.io/osgeo/gdal:ubuntu-full-3.7.0
# 安裝額外的 Python 包
RUN pip install numpy pandas rasterio
# 設置工作目錄
WORKDIR /app
# 複製應用代碼
COPY . /app
# 運行命令
CMD ["python", "process.py"]
構建和運行:
docker build -t my-gdal-app .
docker run -v /data:/data my-gdal-app
2.6 Python 環境配置
2.6.1 使用 pip 安裝
注意:pip 安裝需要系統已安裝 GDAL 庫。
# 查看系統 GDAL 版本
gdal-config --version
# 輸出: 3.7.0
# 安裝匹配版本的 Python 綁定
pip install GDAL==3.7.0
常見問題解決:
# 如果遇到編譯錯誤,設置 GDAL 配置路徑
export CPLUS_INCLUDE_PATH=/usr/include/gdal
export C_INCLUDE_PATH=/usr/include/gdal
# 或使用 gdal-config
pip install GDAL==$(gdal-config --version) \
--global-option=build_ext \
--global-option="-I$(gdal-config --cflags | sed 's/-I//')"
2.6.2 使用 Conda 安裝(推薦)
# 創建新環境
conda create -n gis_env python=3.10
# 激活環境
conda activate gis_env
# 安裝 GDAL 和常用 GIS 庫
conda install -c conda-forge gdal rasterio fiona geopandas
# 驗證
python -c "from osgeo import gdal; print(gdal.__version__)"
2.6.3 虛擬環境最佳實踐
# 創建項目目錄
mkdir my_gis_project
cd my_gis_project
# 創建 Conda 環境文件 environment.yml
cat > environment.yml << EOF
name: my_gis_env
channels:
- conda-forge
dependencies:
- python=3.10
- gdal=3.7
- rasterio
- fiona
- geopandas
- shapely
- pyproj
- numpy
- pandas
- jupyter
EOF
# 創建環境
conda env create -f environment.yml
# 激活環境
conda activate my_gis_env
2.6.4 常用 Python GIS 庫
|
庫名
|
功能
|
與 GDAL 關係
|
|
rasterio
|
柵格數據處理
|
基於 GDAL
|
|
fiona
|
矢量數據處理
|
基於 OGR
|
|
geopandas
|
空間數據分析
|
基於 fiona
|
|
shapely
|
幾何操作
|
基於 GEOS
|
|
pyproj
|
座標轉換
|
基於 PROJ
|
2.7 Java 環境配置
2.7.1 使用 Maven 依賴
在 pom.xml 中添加 GDAL Java 綁定:
<dependencies>
<!-- GDAL Java 綁定 -->
<dependency>
<groupId>org.gdal</groupId>
<artifactId>gdal</artifactId>
<version>3.7.0</version>
</dependency>
</dependencies>
注意:Java 綁定需要本地 GDAL 庫支持。
2.7.2 本地庫配置
Windows:
:: 設置 JAVA_OPTS 包含 GDAL 庫路徑
set JAVA_OPTS=-Djava.library.path=C:\OSGeo4W\bin
:: 或在代碼中加載
System.loadLibrary("gdaljni");
Linux:
# 設置庫路徑
export LD_LIBRARY_PATH=/usr/lib/jni:$LD_LIBRARY_PATH
# 或在運行時指定
java -Djava.library.path=/usr/lib/jni -jar myapp.jar
2.7.3 完整 Maven 項目配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>gdal-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<gdal.version>3.7.0</gdal.version>
</properties>
<dependencies>
<dependency>
<groupId>org.gdal</groupId>
<artifactId>gdal</artifactId>
<version>${gdal.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
</plugin>
</plugins>
</build>
</project>
2.7.4 驗證 Java 安裝
import org.gdal.gdal.gdal;
import org.gdal.gdal.Driver;
public class GdalTest {
public static void main(String[] args) {
// 註冊所有驅動
gdal.AllRegister();
// 打印版本
System.out.println("GDAL Version: " + gdal.VersionInfo("VERSION_NUM"));
// 列出所有驅動
int driverCount = gdal.GetDriverCount();
System.out.println("Driver Count: " + driverCount);
for (int i = 0; i < driverCount; i++) {
Driver driver = gdal.GetDriver(i);
System.out.println(" " + driver.getShortName() + " - " + driver.getLongName());
}
}
}
2.8 C#/.NET 環境配置
2.8.1 使用 NuGet 包
推薦使用 MaxRev.Gdal.Universal 包,它提供了跨平台支持:
# 使用 dotnet CLI
dotnet add package MaxRev.Gdal.Universal
# 或在 .csproj 中添加
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MaxRev.Gdal.Universal" Version="3.7.0.100" />
</ItemGroup>
</Project>
2.8.2 初始化 GDAL
using MaxRev.Gdal.Core;
using OSGeo.GDAL;
using OSGeo.OGR;
using OSGeo.OSR;
class Program
{
static void Main(string[] args)
{
// 初始化 GDAL(必須首先調用)
GdalBase.ConfigureAll();
// 打印版本
Console.WriteLine($"GDAL Version: {Gdal.VersionInfo("VERSION_NUM")}");
// 列出驅動
int driverCount = Gdal.GetDriverCount();
Console.WriteLine($"Driver Count: {driverCount}");
for (int i = 0; i < driverCount; i++)
{
using var driver = Gdal.GetDriver(i);
Console.WriteLine($" {driver.ShortName} - {driver.LongName}");
}
}
}
2.8.3 其他 NuGet 包選項
|
包名
|
描述
|
平台支持
|
|
MaxRev.Gdal.Universal
|
自動配置,跨平台
|
Windows, Linux, macOS
|
|
MaxRev.Gdal.WindowsRuntime.Minimal
|
Windows 最小運行時
|
Windows
|
|
MaxRev.Gdal.LinuxRuntime.Minimal
|
Linux 最小運行時
|
Linux
|
|
GDAL.Native
|
官方原生包
|
平台特定
|
2.8.4 常見問題解決
問題 1:DLL 找不到
// 確保正確初始化
GdalBase.ConfigureAll();
// 或手動設置路徑
string gdalPath = @"C:\path\to\gdal";
Environment.SetEnvironmentVariable("PATH",
gdalPath + ";" + Environment.GetEnvironmentVariable("PATH"));
問題 2:PROJ 數據缺失
// 設置 PROJ 數據目錄
string projDataPath = @"C:\path\to\proj\data";
Gdal.SetConfigOption("PROJ_LIB", projDataPath);
2.9 環境變量配置
2.9.1 常用環境變量
|
變量名
|
描述
|
示例值
|
|
GDAL_DATA
|
GDAL 數據文件目錄
|
/usr/share/gdal
|
|
PROJ_LIB
|
PROJ 數據文件目錄
|
/usr/share/proj
|
|
GDAL_DRIVER_PATH
|
額外驅動目錄
|
/usr/lib/gdalplugins
|
|
CPL_DEBUG
|
調試輸出
|
ON
|
|
GDAL_CACHEMAX
|
緩存大小(MB)
|
512
|
|
GDAL_NUM_THREADS
|
並行線程數
|
ALL_CPUS
|
|
CPL_VSIL_CURL_ALLOWED_EXTENSIONS
|
允許的網絡文件擴展名
|
.tif,.vrt
|
2.9.2 Windows 環境變量設置
:: 永久設置(需要管理員權限)
setx GDAL_DATA "C:\OSGeo4W\share\gdal" /M
setx PROJ_LIB "C:\OSGeo4W\share\proj" /M
:: 臨時設置
set GDAL_DATA=C:\OSGeo4W\share\gdal
set PROJ_LIB=C:\OSGeo4W\share\proj
2.9.3 Linux/macOS 環境變量設置
# 添加到 ~/.bashrc 或 ~/.zshrc
export GDAL_DATA=/usr/share/gdal
export PROJ_LIB=/usr/share/proj
# 性能優化設置
export GDAL_CACHEMAX=512
export GDAL_NUM_THREADS=ALL_CPUS
# 調試設置
export CPL_DEBUG=ON
# 使設置生效
source ~/.bashrc
2.9.4 在代碼中設置配置
Python:
from osgeo import gdal
# 設置配置選項
gdal.SetConfigOption('GDAL_CACHEMAX', '512')
gdal.SetConfigOption('GDAL_NUM_THREADS', 'ALL_CPUS')
gdal.SetConfigOption('CPL_DEBUG', 'ON')
# 獲取配置選項
cache_max = gdal.GetConfigOption('GDAL_CACHEMAX')
print(f"Cache Max: {cache_max}")
Java:
import org.gdal.gdal.gdal;
// 設置配置選項
gdal.SetConfigOption("GDAL_CACHEMAX", "512");
gdal.SetConfigOption("GDAL_NUM_THREADS", "ALL_CPUS");
// 獲取配置選項
String cacheMax = gdal.GetConfigOption("GDAL_CACHEMAX", "64");
System.out.println("Cache Max: " + cacheMax);
C#:
using OSGeo.GDAL;
// 設置配置選項
Gdal.SetConfigOption("GDAL_CACHEMAX", "512");
Gdal.SetConfigOption("GDAL_NUM_THREADS", "ALL_CPUS");
// 獲取配置選項
string cacheMax = Gdal.GetConfigOption("GDAL_CACHEMAX", "64");
Console.WriteLine($"Cache Max: {cacheMax}");
2.10 驗證安裝
2.10.1 命令行驗證
# 檢查 GDAL 版本
gdalinfo --version
# 檢查支持的柵格格式
gdalinfo --formats
# 檢查支持的矢量格式
ogrinfo --formats
# 檢查 PROJ 版本
projinfo --version
# 檢查特定格式支持
gdalinfo --format GTiff
ogrinfo --format "ESRI Shapefile"
2.10.2 Python 驗證腳本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""GDAL 安裝驗證腳本"""
def check_gdal_installation():
"""檢查 GDAL Python 綁定安裝"""
try:
from osgeo import gdal, ogr, osr
print("=" * 50)
print("GDAL Python 綁定安裝驗證")
print("=" * 50)
# 版本信息
print(f"\nGDAL 版本: {gdal.VersionInfo('VERSION_NUM')}")
print(f"發佈日期: {gdal.VersionInfo('RELEASE_DATE')}")
# 柵格驅動
gdal.AllRegister()
raster_count = gdal.GetDriverCount()
print(f"\n柵格驅動數量: {raster_count}")
# 列出部分常用柵格驅動
print("\n常用柵格驅動:")
important_raster_formats = ['GTiff', 'PNG', 'JPEG', 'HFA', 'VRT', 'COG']
for fmt in important_raster_formats:
driver = gdal.GetDriverByName(fmt)
if driver:
print(f" ✓ {fmt}: {driver.LongName}")
else:
print(f" ✗ {fmt}: 不可用")
# 矢量驅動
vector_count = ogr.GetDriverCount()
print(f"\n矢量驅動數量: {vector_count}")
# 列出部分常用矢量驅動
print("\n常用矢量驅動:")
important_vector_formats = ['ESRI Shapefile', 'GeoJSON', 'PostgreSQL',
'GPKG', 'KML', 'FileGDB']
for fmt in important_vector_formats:
driver = ogr.GetDriverByName(fmt)
if driver:
print(f" ✓ {fmt}")
else:
print(f" ✗ {fmt}: 不可用")
# 空間參考測試
print("\n空間參考系統測試:")
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
print(f" WGS84 (EPSG:4326): {srs.GetName()}")
srs.ImportFromEPSG(4490)
print(f" CGCS2000 (EPSG:4490): {srs.GetName()}")
print("\n" + "=" * 50)
print("✓ GDAL 安裝驗證通過!")
print("=" * 50)
return True
except ImportError as e:
print(f"✗ 導入錯誤: {e}")
return False
except Exception as e:
print(f"✗ 驗證失敗: {e}")
return False
if __name__ == "__main__":
check_gdal_installation()
2.10.3 Java 驗證代碼
import org.gdal.gdal.gdal;
import org.gdal.gdal.Driver;
import org.gdal.ogr.ogr;
import org.gdal.osr.SpatialReference;
public class GdalVerify {
public static void main(String[] args) {
System.out.println("==================================================");
System.out.println("GDAL Java 綁定安裝驗證");
System.out.println("==================================================");
// 註冊所有驅動
gdal.AllRegister();
ogr.RegisterAll();
// 版本信息
System.out.println("\nGDAL 版本: " + gdal.VersionInfo("VERSION_NUM"));
System.out.println("發佈日期: " + gdal.VersionInfo("RELEASE_DATE"));
// 柵格驅動
int rasterCount = gdal.GetDriverCount();
System.out.println("\n柵格驅動數量: " + rasterCount);
// 矢量驅動
int vectorCount = ogr.GetDriverCount();
System.out.println("矢量驅動數量: " + vectorCount);
// 空間參考測試
System.out.println("\n空間參考系統測試:");
SpatialReference srs = new SpatialReference();
srs.ImportFromEPSG(4326);
System.out.println(" WGS84 (EPSG:4326): " + srs.GetName());
System.out.println("\n==================================================");
System.out.println("✓ GDAL Java 綁定安裝驗證通過!");
System.out.println("==================================================");
}
}
2.10.4 C# 驗證代碼
using System;
using MaxRev.Gdal.Core;
using OSGeo.GDAL;
using OSGeo.OGR;
using OSGeo.OSR;
class GdalVerify
{
static void Main(string[] args)
{
Console.WriteLine("==================================================");
Console.WriteLine("GDAL C# 綁定安裝驗證");
Console.WriteLine("==================================================");
// 初始化 GDAL
GdalBase.ConfigureAll();
// 版本信息
Console.WriteLine($"\nGDAL 版本: {Gdal.VersionInfo("VERSION_NUM")}");
Console.WriteLine($"發佈日期: {Gdal.VersionInfo("RELEASE_DATE")}");
// 柵格驅動
int rasterCount = Gdal.GetDriverCount();
Console.WriteLine($"\n柵格驅動數量: {rasterCount}");
// 矢量驅動
int vectorCount = Ogr.GetDriverCount();
Console.WriteLine($"矢量驅動數量: {vectorCount}");
// 空間參考測試
Console.WriteLine("\n空間參考系統測試:");
var srs = new SpatialReference("");
srs.ImportFromEPSG(4326);
Console.WriteLine($" WGS84 (EPSG:4326): {srs.GetName()}");
Console.WriteLine("\n==================================================");
Console.WriteLine("✓ GDAL C# 綁定安裝驗證通過!");
Console.WriteLine("==================================================");
}
}
2.11 常見問題與解決方案
2.11.1 安裝問題
|
問題
|
原因
|
解決方案
|
|
pip 安裝失敗
|
GDAL 版本不匹配
|
使用 |
|
找不到 gdal-config
|
GDAL 未安裝或不在 PATH
|
安裝 GDAL 開發包或添加到 PATH
|
|
編譯錯誤
|
缺少頭文件
|
安裝 libgdal-dev
|
|
ImportError
|
Python 版本不匹配
|
確保 Python 版本與 GDAL 綁定兼容
|
2.11.2 運行時問題
|
問題
|
原因
|
解決方案
|
|
PROJ 數據缺失
|
PROJ_LIB 未設置
|
設置 PROJ_LIB 環境變量
|
|
驅動不可用
|
驅動未編譯
|
使用完整版 GDAL 或重新編譯
|
|
內存不足
|
處理大文件
|
增加 GDAL_CACHEMAX
|
|
性能慢
|
單線程處理
|
設置 GDAL_NUM_THREADS
|
2.11.3 調試技巧
from osgeo import gdal
# 啓用調試輸出
gdal.SetConfigOption('CPL_DEBUG', 'ON')
gdal.SetConfigOption('CPL_LOG', 'gdal_debug.log')
gdal.SetConfigOption('CPL_LOG_ERRORS', 'ON')
# 查看詳細錯誤信息
gdal.UseExceptions()
try:
ds = gdal.Open('nonexistent.tif')
except Exception as e:
print(f"錯誤: {e}")
2.12 本章小結
本章詳細介紹了 GDAL 在各種平台上的安裝方法:
- Windows:OSGeo4W(推薦)、Conda、預編譯包
- Linux:包管理器、UbuntuGIS PPA、源碼編譯
- macOS:Homebrew、Conda
- Docker:官方鏡像、自定義鏡像
- Python:Conda(推薦)、pip
- Java:Maven 依賴 + 本地庫
- C#/.NET:NuGet 包(MaxRev.Gdal.Universal)
關鍵配置要點:
- 正確設置環境變量(GDAL_DATA、PROJ_LIB)
- 版本匹配(Python 綁定與系統 GDAL)
- 驗證安裝完整性
在下一章中,我們將深入探討 GDAL 的核心架構與數據模型。
2.13 思考與練習
- 在你的操作系統上安裝 GDAL,並驗證安裝是否成功。
- 比較不同安裝方式的優缺點,選擇最適合你的安裝方式。
- 配置 GDAL 環境變量,並測試配置是否生效。
- 編寫一個驗證腳本,檢查 GDAL 的所有主要功能是否可用。
- 嘗試使用 Docker 運行 GDAL 命令,體會容器化部署的優勢。