【GDAL/OGR】利用GDAL/OGR讀取shp文件並轉換爲json文件(Java版)

前言:

對於GIS開發者來說,GDAL/OGR是最熟悉不過的開源GIS庫了,GDAL(Geospatial Data Abstraction
Library)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。它利用抽象數據模型來表達所支持的各種文件格式。它還有一系列命令行工具來進行數據轉換和處理。OGR是GDAL項目的一個分支,功能與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中的命令行進行格式轉換。
具體網址參考:

ogr2ogr命令行使用

評論中提到的用法

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