前言:
對於GIS開發者來說,GDAL/OGR是最熟悉不過的開源GIS庫了,GDAL(Geospatial Data Abstraction
Library)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。它利用抽象數據模型來表達所支持的各種文件格式。它還有一系列命令行工具來進行數據轉換和處理。OGR是GDAL項目的一個分支,功能與GDAL類似,只不過它提供對矢量數據的支持。
編譯的dll文件下載以及各個語言的相應開發包,這個地址裏面有各個不同版本的編譯文件,裏面會詳細介紹裏面的各個文件目錄的文件都是什麼文件。例如:這個版本的編譯好的文件目錄詳情
在開發前,需要安裝GDAL(其實就是配置相應的環境變量)
GDAL的安裝:
在上面第三個網址中,裏面有相應的安裝介紹,讀者可以自己相應的安裝自己需要的組件和開發環境。
按照官網的說法如下:
In order to run the utility programs the compiled dll-s should be available to load during the execution. Therefore the PATH environment parameter should contain the full path to /bin directory of the package or the dlls in this directory should be copied into the directory from which the application (executable) is running
這裏有兩種安裝方法:
(1)把自己需要用到的dll文件路徑配置到環境變量的Path變量中(主要是bin目錄下的dll文件,這部分文件是common dll,以及bin/gdal/java目錄下的dll文件),至於jar包就需要引入到項目中。
(2)將需要的dll文件放到項目的根目錄下
這裏需要使用java調用dll文件,至於其原理,可以參考:
Java 本地調用(java調用window DLL裏的函數)
主要代碼:
/**
* 將shp文件轉換爲json數據文件輸出,這個json後面缺少反括號,要自己加上去,是gdal的bug還是?
* @param shpfilePath
* @param outGeojsonPath
*/
public static void parseShpfile2GeojsonFile(String shpfilePath,String outGeojsonPath) {
// 註冊所有的驅動
ogr.RegisterAll();
// 爲了支持中文路徑,請添加下面這句代碼
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
// 爲了使屬性表字段支持中文,請添加下面這句
gdal.SetConfigOption("SHAPE_ENCODING", "");
// 打開文件
DataSource ds = ogr.Open(shpfilePath, 0);
if (ds == null) {
System.out.println("打開文件失敗!");
return;
}
System.out.println("打開文件成功!");
Driver dv = ogr.GetDriverByName("GeoJSON");
if (dv == null) {
System.out.println("打開驅動失敗!");
return;
}
System.out.println("打開驅動成功!");
dv.CopyDataSource(ds, outGeojsonPath);
System.out.println("轉換成功!");
}
注:
就筆者的實驗結果,轉換後的json文件的json格式有一點問題,就是json格式的最後面缺少反大括號,不知道這是筆者使用的這個gdal版本的bug還是其他情況。讀者根據自己的實際情況做處理,同時也希望有了解的同學,指導交流一下。
另外,筆者看到另外一種不使用代碼方式轉換文件的方法,就是使用ogr中的命令行進行格式轉換。
具體網址參考: