首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 整合 GDAL 實現 Shapefile (SHP) 轉 GeoJSON 完整教程

     編輯:Java 綜合教學

Java 整合 GDAL 實現 Shapefile (SHP) 轉 GeoJSON 完整教程

需求:上傳 ZIP 壓縮的 Shapefile 資料集,後端解壓、讀取 SHP、轉換為 GeoJSON 返回前端,配合 ArcGIS API for JavaScript 顯示。本文記錄 Java 環境配置 GDAL(含 32/64 位匹配、DLL 載入、JAR 引用)與核心轉換代碼。

環境配置關鍵點

  1. JDK 與 GDAL 位數必須一致:若 JDK 為 32 位,必須下載 32 位 GDAL(反之亦然),否則 UnsatisfiedLinkError。
  2. DLL 放入 JRE bin 目錄:將 GDAL 發布包內所有 .dll 複製到 $JAVA_HOME/jre/bin/(或系統 PATH 目錄)。
  3. 引用 gdal.jar:將 gdal.jar 加入專案 Classpath(Maven 可用 system scope 或本地安裝)。

核心轉換代碼

package com.lzugis.gdal;

import org.gdal.ogr.*;
import org.gdal.gdal.*;

public class GdalShpTest {
    public static void main(String[] args) {
        // 1. 註冊所有驅動
        ogr.RegisterAll();

        // 2. 支援中文路徑
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");

        // 3. 支援屬性表中文字段
        gdal.SetConfigOption("SHAPE_ENCODING", "");

        String shpPath = "D:\\data\\china\\capital.shp";

        // 4. 開啟資料源 (0=只讀)
        DataSource ds = ogr.Open(shpPath, 0);
        if (ds == null) {
            System.err.println("開啟 SHP 失敗!");
            return;
        }
        System.out.println("開啟 SHP 成功!");

        // 5. 取得 GeoJSON 驅動
        Driver geoJsonDriver = ogr.GetDriverByName("GeoJSON");
        if (geoJsonDriver == null) {
            System.err.println("GeoJSON 驅動不可用!");
            return;
        }

        // 6. 複製/轉換資料源
        geoJsonDriver.CopyDataSource(ds, "D:\\data\\china\\capital.geojson");
        System.out.println("轉換 GeoJSON 成功!");
    }
}

執行結果驗證

開啟 SHP 成功!
GeoJSON 驅動成功!
轉換成功!

生成的 capital.geojson 可直接用於 Leaflet、OpenLayers、ArcGIS JS API 等前端地圖庫。

常見問題排查

  • no gdaljni in java.library.path:DLL 未放正確目錄或位數不匹配。
  • 中文路徑亂碼:確保設定 GDAL_FILENAME_IS_UTF8=YES。
  • 屬性欄位中文亂碼:設定 SHAPE_ENCODING="" 讓 GDAL 自動偵測(或指定 CP936/UTF-8)。
  • 多幾何類型/多圖層 SHP:需遍歷 ds.GetLayerCount() 逐圖層轉換。

Maven 依賴建議(若使用公開倉庫)

<dependency>
  <groupId>org.gdal</groupId>
  <artifactId>gdal</artifactId>
  <version>3.4.1</version>
</dependency>

注意:官方 Maven 發布的 gdal.jar 通常包含原生庫,可能仍需手動配置 java.library.path。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved