前言
之前写了一篇与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新增字段、删除字段类似。