概述:
前兩天,有位同仁再問我一個問題,問題大概是介個樣子的:打包shp數據位zip格式並上傳,上傳完成後再在web上展示出來。這個需求,以前在Arcgis Online上見過,所以還是比較熟悉的,所以我就給他說:先將zip解壓,再讀取shp數據並將之轉換為Geojson返回前台,並在web上展示出來。很慶幸的是,者為同仁很快就實現了shp到Geojson的轉換,就問我Arcgis for js 中怎麼展示Geojson,我截了個Arcgis for js的API給他他就實現了上述的功能。同時,我想他請教了如何實現的轉換,他告訴我說是GDAL實現的,並給了我關鍵代碼,因為代碼是C#的,所以,經過周末的折騰,在JAVA上實現了,在此分享給大家。
實現:
想要在java上用GDAL比較費勁,中間的嘗試過程在此略過,直接說結果。
首先是jdk,下載的GDAL的位數一定要與JDK的位數相符,我的JDK的位數是32位的,所以下載了32位的GDAL,為方便大家使用,並將此上傳到了百度網盤,下載地址為:鏈接:http://pan.baidu.com/s/1mhrywn2 密碼:lsch。將GDAL下載完成後,將所有的dll文件復制到jdk的安裝路徑“C:\Program Files (x86)\Java\jdk1.7.0_17\jre\bin”下即可。
接著,將JDAL.jar文件添加到你的Java lib引用中去。
最後,代碼實現。實現的關鍵代碼如下:
package com.lzugis.gdal; import org.gdal.ogr.*; import org.gdal.ogr.Driver; import org.gdal.gdal.*; public class GdalShpTest { public static void main(String[] args) { // 注冊所有的驅動 ogr.RegisterAll(); // 為了支持中文路徑,請添加下面這句代碼 gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES"); // 為了使屬性表字段支持中文,請添加下面這句 gdal.SetConfigOption("SHAPE_ENCODING",""); String strVectorFile = "D:\\data\\china\\capital.shp"; //打開數據 DataSource ds = ogr.Open(strVectorFile,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, "D:\\data\\china\\capital.geojson"); System.out.println("轉換成功!" ); } }打印的信息如下: