Java使用gdal重命名shp属性字段


前言

最近使用gdal和java进行gis开发,记录下遇到的开发问题


一、GDAL和Java版本

GDAL版本为3.0.1与3.9.1(两个版本都试验过)
Java为JDK 17.0.11

二、代码

1.引入gdal,设置gdal环境

代码如下:

import org.gdal.gdal.gdal;
import org.gdal.ogr.*;
ogr.RegisterAll();
gdal.AllRegister();
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");//支持中文路径
gdal.SetConfigOption("SHAPE_ENCODING","CP936");//属性表字段支持中文

2.打开shp对指定字段进行重命名

代码如下(示例):

    /**
     * 更改字段名称
     * @param oldName,原字段名
     * @param newName,新字段名
     * @param shpPath,shp文件路径
     * @author 415411
     * @create 2024/9/4
     **/
    public static void updateAttributeName(String oldName, String newName, String shpPath) {
        // 打开Shp文件,1代表方式为可写,0代表只读
        DataSource dataSource = ogr.Open(shpPath, 1);
        // 获取图层
        Layer layer = dataSource.GetLayer(0);
        // 获取要修改字段名的字段索引
        FeatureDefn featureDefn = layer.GetLayerDefn();
        int index = featureDefn.GetFieldIndex(oldName);
        // 使用新字段名创建字段
        FieldDefn fieldDefn = new FieldDefn(newName, ogr.OFTString);
        fieldDefn.SetWidth(50);
        // 更新字段
        layer.AlterFieldDefn(index,fieldDefn,1);
    }

3.测试使用

public static void main(String[] args) {
	// 将name1字段重名成type
	updateAttributeName("name1","type",
	"D:\\work\\testdata\\mapshp\\mbstyle_cookbook_line.shp");
}

总结

没想到更新字段的方法在layer里,找了比较久。关于读shp字段的方法网上很多,这里就不介绍了,或者也可以用ArcGIS、QGIS等打开shp数据查看属性表,观察下代码执行前后字段是否重命名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值