Java 使用GDAL 讀寫 shapefile


讀取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如下:

打開形狀如下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM