Bootstrap

【Java+GDAL】读取gdb新增、删除字段


前言

之前写了一篇与gdb相关的文章。
【JAVA+GDAL】读取gdb数据图层的字段信息
今天来看看怎么新增和删除字段,思路与之前写过的shp新增、删除字段是相似的,可以参考这篇 【Java+GDAL】shp新增属性字段与删除属性字段。gdb文件主要是存在多个图层的情况,因此需要先指定一个图层读取,然后进行增删字段。


一、GDAL和Java版本

GDAL版本为3.9.1
Java为JDK 17.0.11

二、代码实现

1.引入gdal环境

代码如下(示例):

import org.gdal.gdal.gdal;
import org.gdal.ogr.*;
//自定义gdb工具类
public class GdbUtil {
    static {
        gdal.AllRegister();//设置gdal环境
    }
	//......新增、删除字段方法
}

2.读取gdb图层新增、删除字段

代码如下(示例):


    /**
     * 指定图层新增字段
     * @param layerName,图层名
     * @param fieldName,字段名
     * @param fieldType,字段类型
     * @param gdbPath,路径
     * @author 415411
     * @create 2024/9/24
     **/
    public static void createNewFieldForGdbLayer(String layerName, String fieldName, int fieldType, String gdbPath) {
        Driver driver = ogr.GetDriverByName("OpenFileGDB"); //设置驱动
        DataSource gdbSource = driver.Open(gdbPath, 1);
        Layer layer = gdbSource.GetLayerByName(layerName);
        FieldDefn fieldDefn = new FieldDefn(fieldName, fieldType);
        layer.CreateField(fieldDefn,1);
        gdbSource.delete();
    }
    /**
     * 对gdb中指定图层删除字段
     * @param layerName,图层
     * @param fieldName,字段
     * @param gdbPath,路径
     * @author 415411
     * @create 2024/9/24
     **/
    public static void removeFieldForGdbLayer(String layerName, String fieldName, String gdbPath) {
        Driver driver = ogr.GetDriverByName("OpenFileGDB"); //设置驱动
        DataSource gdbSource = driver.Open(gdbPath, 1);
        Layer layer = gdbSource.GetLayerByName(layerName);
        FeatureDefn featureDefn = layer.GetLayerDefn();
        int index = featureDefn.GetFieldIndex(fieldName);
        layer.DeleteField(index);
        gdbSource.delete();
    }

3.测试使用

代码如下(示例):

    public static void main(String[] args) {
		createNewFieldForGdbLayer("mbstyle_cookbook_line", "name_1", 4,"D:\\testdata\\test.gdb");
        createNewFieldForGdbLayer("mbstyle_cookbook_line", "name_2", 4,"D:\\testdata\\test.gdb");
        removeFieldForGdbLayer("mbstyle_cookbook_line", "name_2", "D:\\testdata\\test.gdb");
    }

总结

提示:今天简单介绍了gdb新增字段和删除字段的方法,其实现与shp新增字段、删除字段类似。

;