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

打开形状如下

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要将Shapefile格式文件转换为DWG格式,你可以使用GDAL库中的OGR(OpenGIS Simple Features Reference Implementation)功能。下面是使用GDAL进行转换的基本步骤: 1. 引用GDAL和OGR库:在C#项目中,首先需要引用GDAL和OGR库。你可以在代码文件中添加以下引用: ```csharp using OSGeo.GDAL; using OSGeo.OGR; ``` 2. 初始化GDAL:在程序的入口点或初始化代码中,调用GDAL的初始化方法: ```csharp Gdal.AllRegister(); ``` 3. 打开Shapefile数据源:使用OGR打开Shapefile数据源: ```csharp DataSource sourceDS = Ogr.Open("path/to/your/shapefile", 0); ``` 4. 创建DWG文件数据源:使用OGR创建DWG文件数据源: ```csharp Driver dwgDriver = Ogr.GetDriverByName("DWG"); DataSource targetDS = dwgDriver.CreateDataSource("path/to/your/dwgfile", null); ``` 5. 复制图层:遍历Shapefile数据源中的图层,并将其复制到DWG数据源中: ```csharp for (int i = 0; i < sourceDS.GetLayerCount(); i++) { Layer sourceLayer = sourceDS.GetLayerByIndex(i); Layer targetLayer = targetDS.CreateLayer(sourceLayer.GetName(), sourceLayer.GetSpatialRef(), sourceLayer.GetGeomType(), null); FeatureDefn featureDefn = sourceLayer.GetLayerDefn(); for (int j = 0; j < featureDefn.GetFieldCount(); j++) { FieldDefn fieldDefn = featureDefn.GetFieldDefn(j); targetLayer.CreateField(fieldDefn, 1); } sourceLayer.ResetReading(); Feature feature; while ((feature = sourceLayer.GetNextFeature()) != null) { Feature targetFeature = new Feature(featureDefn); targetFeature.SetFrom(feature); targetLayer.CreateFeature(targetFeature); feature.Dispose(); targetFeature.Dispose(); } sourceLayer.Dispose(); targetLayer.Dispose(); } ``` 6. 关闭数据源:在使用完数据后,需要关闭数据源以释放资源: ```csharp sourceDS.Dispose(); targetDS.Dispose(); ``` 以上是使用GDAL库将Shapefile格式文件转换为DWG格式的基本步骤。请注意,转换过程中可能需要进行投影转换或其他额外的操作,具体取决于你的数据和需求。你可以根据需要进行进一步的处理和优化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值