Java使用gdal更改shp要素的字段属性值



前言

昨天实现了gdal对shp文件进行属性字段的重命名,Java使用gdal重命名shp属性字段。对于gdb的话也是类似的思路,只不过gdb有多个图层,以后有涉及到再写。今天试了下gdal修改shp要素字段的属性值,主要用到了SetField和SetFeature两个方法,比较简单。


一、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.修改要素属性值

代码如下(示例):

    /**
     * 修改第index个要素的fieldName字段的值为fieldValue,比如将第2个要素(索引为1)的name字段的值从yu修改为ku
     * @param index,要素的索引
     * @param fieldName,字段名称
     * @param fieldValue,字段值
     * @param shpPath,shp文件路径
     * @author 415411
     * @create 2024/9/5
     **/
 public static void updateFeatureValueByIndex(long index, String fieldName, String fieldValue, String shpPath) {
		// 以可写方式打开shp
        DataSource dataSource = ogr.Open(shpPath, 1);
        // 获取图层
        Layer layer =  dataSource.GetLayer(0);
        System.out.println(fieldName);
        System.out.println(fieldValue);
        // 根据索引获取要素
        Feature feature = layer.GetFeature(index);
        // 更改要素的字段属性值
        feature.SetField(fieldName,fieldValue);
        // 需要图层重绘feature,并关闭数据集才可生效
        layer.SetFeature(feature);
        // 关闭数据集
        dataSource.delete();
    }

3.测试使用

public static void main(String[] args) {
    //将第一个要素(索引为0)的name字段的属性值由原先的newway改为Latway
	updateFeatureValueByIndex(0,"name","Latway","D:\\work\\testdata\\mapshp\\mbstyle_cookbook_line.shp");
}

总结

今天简单写了下改要素属性值,由于时间关系,还有许多细节没讲,比如字段的类型、要素及属性值为Null等一些情况的影响。后续可能会出几期增删改shp和gdb的字段、字段值的文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值