java 利用gdal,转换shpfile的坐标系

简要说明

在java开发中,利用gdal,将原本shpfile的坐标系转为想要的坐标系,并输出新的shpfile

maven依赖

		<!--需要安装完gdal后,本地install gdal包才能使用 -->
		<!--gdal安装可参考 https://blog.csdn.net/qq_41613913/article/details/135743562 -->
		<dependency>
            <groupId>org.gdal</groupId>
            <artifactId>gdal</artifactId>
            <version>3.7.3</version>
        </dependency>

样例代码

public static void main(String[] args) {
        // 注册所有的驱动
        ogr.RegisterAll();
        // 为了支持中文路径,请添加下面这句代码
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");
        // 为了使属性表字段支持中文,请添加下面这句
        gdal.SetConfigOption("SHAPE_ENCODING", "CP936");

        String strVectorFile = "D:\\shp\\test.shp";
        //打第一个文件
        Driver shpDriver = ogr.GetDriverByName("ESRI Shapefile");
        DataSource bpxmDataSource = shpDriver.Open(strVectorFile, 0);
        Layer bpxmLayer = bpxmDataSource.GetLayerByName("test");

        SpatialReference sr = new SpatialReference();
        sr.ImportFromEPSG(3857);
        //打开第二个文件
        DataSource bpxm2DataSource = shpDriver.CreateDataSource("D:\\shp\\test3857.shp");
        Layer bpxm2Layer = bpxm2DataSource.CreateLayer("test2", sr);

        //设置字段
        FeatureDefn bpxmfeatureDefn = bpxmLayer.GetLayerDefn();
        int fieldCount = bpxmfeatureDefn.GetFieldCount();
        for (int i = 0; i < fieldCount; i++) {
            FieldDefn defn = bpxmfeatureDefn.GetFieldDefn(i);
            bpxm2Layer.CreateField(defn);
        }

        Feature inputFeature = null;
        while ((inputFeature = bpxmLayer.GetNextFeature()) != null) {
            Geometry geometry = inputFeature.GetGeometryRef();
            if (Objects.isNull(geometry)) continue;
            geometry.TransformTo(sr);
            Feature outputFeature = new Feature(bpxm2Layer.GetLayerDefn());
            outputFeature.SetGeometry(geometry); // 设置几何对象到输出Feature中
            bpxm2Layer.CreateFeature(outputFeature); // 将Feature添加到输出图层中
        }

        bpxm2DataSource.delete();
        bpxmDataSource.delete();
        shpDriver.delete();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值