第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 版本不匹配

使用 pip install GDAL==$(gdal-config --version)

找不到 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 在各種平台上的安裝方法:

  1. Windows:OSGeo4W(推薦)、Conda、預編譯包
  2. Linux:包管理器、UbuntuGIS PPA、源碼編譯
  3. macOS:Homebrew、Conda
  4. Docker:官方鏡像、自定義鏡像
  5. Python:Conda(推薦)、pip
  6. Java:Maven 依賴 + 本地庫
  7. C#/.NET:NuGet 包(MaxRev.Gdal.Universal)

關鍵配置要點:

  • 正確設置環境變量(GDAL_DATA、PROJ_LIB)
  • 版本匹配(Python 綁定與系統 GDAL)
  • 驗證安裝完整性

在下一章中,我們將深入探討 GDAL 的核心架構與數據模型。

2.13 思考與練習

  1. 在你的操作系統上安裝 GDAL,並驗證安裝是否成功。
  2. 比較不同安裝方式的優缺點,選擇最適合你的安裝方式。
  3. 配置 GDAL 環境變量,並測試配置是否生效。
  4. 編寫一個驗證腳本,檢查 GDAL 的所有主要功能是否可用。
  5. 嘗試使用 Docker 運行 GDAL 命令,體會容器化部署的優勢。