【Java+GDAL】shp新增属性字段与删除属性字段


前言

例如:之前写了读shp字段相关的文章,包括
【Java+GDAL】读取shp信息(字段、要素属性等)
Java使用gdal更改shp要素的字段属性值
Java使用gdal重命名shp属性字段
今天写的是新增字段和删除字段,可以和上面几篇结合着看,实现思路中有些共同的地方。


一、GDAL和Java版本

GDAL版本为3.0.1
Java为JDK 17.0.11

二、代码实现

1.引入gdal环境

import org.gdal.gdal.gdal;
import org.gdal.ogr.*;
//自定义shp工具类
public class ShpUtil {
    static {
        ogr.RegisterAll();
        gdal.AllRegister();//设置gdal环境
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");//支持中文路径
        gdal.SetConfigOption("SHAPE_ENCODING","CP936");//属性表字段支持中文
    }
	//......新增字段和删除字段方法
}

2.读取shp新增、删除字段

代码如下(示例):

    /**
     * 新增字段
     * @param fieldName,新增的字段名称
     * @param fieldType,该字段的类型
     * @param shpPath,shp文件路径
     * @author 415411
     * @create 2024/9/9
     **/
    public static void createNewField(String fieldName, int fieldType, String shpPath) {
        // 可写方式打开shp
        DataSource dataSource = ogr.Open(shpPath, 1);
        Layer layer =  dataSource.GetLayer(0);
        // 由名称和类型创建一个新字段
        FieldDefn fieldDefn = new FieldDefn(fieldName,fieldType);
        // 加入新字段
        layer.CreateField(fieldDefn);
        dataSource.delete();
    }

    /**
     * 删除字段
     * @param fieldName,要删除的字段名称
     * @param shpPath,shp文件路径
     * @author 415411
     * @create 2024/9/9
     **/
    public static void deleteExistField(String fieldName, String shpPath) {
        DataSource dataSource = ogr.Open(shpPath, 1);
        Layer layer= dataSource.GetLayer(0);
        FeatureDefn featureDefn = layer.GetLayerDefn();
        // 获取要删除的字段所对应的字段ID
        int fieldID = featureDefn.GetFieldIndex(fieldName);
        // 根据字段ID删除字段
        layer.DeleteField(fieldID);
        dataSource.delete();
    }

3.测试使用

    public static void main(String[] args) throws IOException {
    	// 新增oName和yName字段,类型均为String
		createNewField("oName",4,"D:\\work\\testdata\\mapshp\\mbstyle_cookbook_line.shp");
		createNewField("yName",4,"D:\\work\\testdata\\mapshp\\mbstyle_cookbook_line.shp");
		// 获删除oName字段
        deleteExistField("oName","D:\\work\\testdata\\mapshp\\mbstyle_cookbook_line.shp");
    }

总结

今天介绍利用gdal为shp新增字段和删除字段的方法,在新增字段类型中,字段的类型可在ogrConstans这个接口中查看,在之前写的【Java+GDAL】读取shp信息(字段、要素属性等)这篇文章的结尾也有提到,可自行查看需要的类型所对应的值,后续也可能会出一篇介绍该接口的文章。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值