macOS下GDAL Java開發環境搭建


版權聲明:本文爲博主原創文章,轉載請註明原文出處!

寫作時間:2020年4月9日下午


macOS下GDAL Java開發環境搭建

今天在筆記本(macOS平臺)上折騰了一下如何搭建GDAL的Java開發環境。雖然GDAL的Python接口更好用,但是有時候需要協同使用一些Java庫的時候,也必須使用Java版本的GDAL。

在macOS上安裝GDAL一般有三種方式:

  1. 使用HomeBrew
  2. 使用Kyng-Chaos提供的編譯好的二進制包(Framework)
  3. 從源碼編譯

由於前兩種方式不自帶有Java相關的接口,所以這裏選擇從源碼編譯。

GDAL源碼編譯安裝

首先,下載GDAL源碼,可以從GitHub上下載,也可以從GDAL官網下載。

我這裏從官網下載了最新的2.4.4版本(3.X版本也發佈了,但是還是先用穩定一點的吧)的源碼進行編譯安裝。GDAL依賴的庫都可以使用HomeBrew安裝,我的方法是直接使用Brew安裝GDAL,然後再卸載掉GDAL,這樣GDAL依賴的第三方庫都就自動安裝了。

此外,還需要系統中安裝了Java JDK和SWIG以及Ant編譯工具。

下面進行GDAL源碼編譯並安裝到/usr/local目錄中。注意配置系統中Java的路徑,我這裏使用的是JDK11。

cd gdal-2.4.4
./configure --with-threads --disable-static --without-grass --with-jasper=/usr/local/lib --with-libtiff=/usr/local/lib --with-jpeg=/usr/local/lib --with-gif=/usr/local/lib --with-png=/usr/local/lib --with-geotiff=/usr/local/lib --with-pcraster=internal --with-geos=/usr/local/lib --with-static-proj4=/usr/local/lib --with-expat=/usr/local/lib --with-curl=/usr/local/lib --with-netcdf=/usr/local/lib --with-hdf5=/usr/local/lib --with-opencl --with-libz=internal --without-python --with-java --with-jvm-lib=/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home 
make
sudo make install

然後接下來我們編譯Java接口需要的相關文件。make install命令會將動態鏈接庫libgdalalljni.20.dyliblibgdalalljni.dylib拷貝到/usr/local/lib目錄中。

cd swig/java
make CFLAGS="-I/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/include -I//Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/include/darwin"
sudo make install

make命令會生成我們需要的gdal.jar包,是我們做Java開發需要的依賴包,必須添加到工程中。

我以爲這樣就可以了,但是當我在工程中調用GDAL的時候,提示找不到Native Library,然後我就把libgdalalljni.20.dyliblibgdalalljni.dylib又拷貝到了/Library/Java/Extensions目錄中,問題才得以解決。

Maven安裝本地JAR

我習慣使用Maven管理依賴,但是Maven中央倉庫中沒有提供GDAL 2.4.4版本的JAR包。所以需要把剛纔生成的gdal.jar文件安裝到本地Maven倉庫中,這樣才能在Maven工程中使用。

使用如下命令進行安裝以後,我們就可以在工程中開心的使用了!

mvn install:install-file -Dfile=/Users/TheOneGIS/Development/gdal-2.4.4/swig/java/gdal.jar -DgroupId=org.gdal -DartifactId=gdal -Dversion=2.4.4 -Dpackaging=jar

使用Java版GDAL示例

這裏使用Better Java(Kotlin)語言進行一個簡單的Shapefile文件讀取的示例。首先,新建Maven Kotlin工程;然後在POM文件中添加GDAL依賴,最後書寫我們的HelloWorld示例。

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

示例代碼如下:

package cn.demo

import org.gdal.gdal.*

fun main(args: Array<String>) {
    // 初始化GDAL環境
    gdal.UseExceptions()
    gdal.AllRegister()
	
		// 讀取數據,輸出數據信息
    val path = "China.shp"
    val ds = gdal.OpenEx(path)
    val layer = ds.GetLayer(0)
    println(layer.GetName())
    for (i in 0 until layer.GetFeatureCount()) {
        print(layer.GetNextFeature().GetFieldAsString("NAME"))
    }
    ds.delete()
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章