讀取shp文件,並把它轉化為json
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:\\test\\NODE.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:\\test\\node.json"); System.out.println("轉換成功!" ); } }
寫shp文件
import org.gdal.ogr.*; import org.gdal.gdal.*; class writeShp2 { public static void main(String[] args) { writeShp2 readshpObj = new writeShp2(); readshpObj.WriteVectorFile(); } static void WriteVectorFile() { String strVectorFile = "D:\\test\\test.shp"; ogr.RegisterAll(); gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO"); gdal.SetConfigOption("SHAPE_ENCODING", "CP936"); String strDriverName = "ESRI Shapefile"; org.gdal.ogr.Driver oDriver = ogr.GetDriverByName(strDriverName); if (oDriver == null) { System.out.println(strVectorFile + " 驅動不可用!\n"); return; } DataSource oDS = oDriver.CreateDataSource(strVectorFile, null); if (oDS == null) { System.out.println("創建矢量文件【" + strVectorFile + "】失敗!\n"); return; } Layer oLayer = oDS.CreateLayer("TestPolygon", null, ogr.wkbPolygon, null); if (oLayer == null) { System.out.println("圖層創建失敗!\n"); return; } // 下面創建屬性表 // 先創建一個叫FieldID的整型屬性 FieldDefn oFieldID = new FieldDefn("FieldID", ogr.OFTInteger); oLayer.CreateField(oFieldID); // 再創建一個叫FeatureName的字符型屬性,字符長度為50 FieldDefn oFieldName = new FieldDefn("FieldName", ogr.OFTString); oFieldName.SetWidth(100); oLayer.CreateField(oFieldName); FeatureDefn oDefn = oLayer.GetLayerDefn(); // 創建三角形要素 Feature oFeatureTriangle = new Feature(oDefn); oFeatureTriangle.SetField(0, 0); oFeatureTriangle.SetField(1, "三角形"); Geometry geomTriangle = Geometry.CreateFromWkt("POLYGON ((0 0,20 0,10 15,0 0))"); oFeatureTriangle.SetGeometry(geomTriangle); oLayer.CreateFeature(oFeatureTriangle); // 創建矩形要素 Feature oFeatureRectangle = new Feature(oDefn); oFeatureRectangle.SetField(0, 1); oFeatureRectangle.SetField(1, "矩形"); Geometry geomRectangle = Geometry.CreateFromWkt("POLYGON ((30 0,60 0,60 30,30 30,30 0))"); oFeatureRectangle.SetGeometry(geomRectangle); oLayer.CreateFeature(oFeatureRectangle); // 創建五角形要素 Feature oFeaturePentagon = new Feature(oDefn); oFeaturePentagon.SetField(0, 2); oFeaturePentagon.SetField(1, "五角形"); Geometry geomPentagon = Geometry.CreateFromWkt("POLYGON ((70 0,85 0,90 15,80 30,65 15,70 0))"); oFeaturePentagon.SetGeometry(geomPentagon); oLayer.CreateFeature(oFeaturePentagon); oDS.SyncToDisk(); System.out.println("\n數據集創建完成!\n"); } }
得到test.dbf, test.shp, test.shx。
test.dbf如下:
打開形狀如下