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

embedded/2025/2/19 14:33:43/

文章目录

  • 前言
  • 一、GDAL和Java版本
  • 二、代码实现
    • 1.引入gdal环境
    • 2.读取gdb图层新增、删除字段
    • 3.测试使用
  • 总结


前言

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


http://www.ppmy.cn/embedded/119050.html

相关文章

Docker网络、数据卷及安全优化

目录 一、Docker网络 1、原生bridge网络 2、host网络 3、none网络 4、docker自定义桥接网络 1、Docker自定义网络 2、不同自定义网络通信 3、joined容器网络 5、Docker容器内外网访问 1、容器访问外网 2、外网访问容器 6、macvlan网络实现跨主机通信 二、Docker数据…

使用iTextPDF库实现矩形框和打勾符号(√)

在使用iTextPDF库进行PDF文档处理时,如果你想在文本的右边添加一个矩形框,并在矩形框内添加一个打勾符号(√),你可以通过以下步骤实现: 添加矩形框:使用PdfCanvas或PdfContentByte对象绘制矩形…

SpringCloud Alibaba五大组件之——RocketMQ

SpringCloud Alibaba五大组件之——RocketMQ(文末附有完整项目GitHub链接) 前言一、安装RocketMQ(安装好了的直接跳过本节)(1)用docker安装RocketMQ以及console(2)普通安装RocketMQ以及console 二、Spring …

HashMap如何解决哈希冲突的

HashMap通过以下几种方式来解决哈希冲突: 1. 链地址法(Separate Chaining) 在JDK 7中,HashMap使用链地址法来解决哈希冲突。当两个或多个键通过哈希函数映射到同一个桶(即数组的同一个索引位置)时&#xf…

Vue入门2

Vue入门2 今天我们分4个部分来讲解Vue的使用 1.计算属性 2.用ref获取dom 3.侦听器的普通写法 4.对象格式的侦听器 注意: 在我们写代码的时候, 还是要引入vue.js文件的, 不然程序不能使用Vue框架, 这个很重要, 千万不能忘记。 vue.js文件就是第一篇Vue文章里面写到的vue.js…

【React】组件基础使用

1. react组件 在react中&#xff0c;组件就是首字母大写的函数&#xff0c;内部存放了组件的逻辑、UI&#xff0c;渲染组件只需要把组件当成标签书写。 使用组件有两种方式&#xff1a;自闭和 、成对标签 function App() {// 定义组件function Component() {return <div&…

力扣(leetcode)每日一题 2207 字符串中最多数目的子序列

题干 2207. 字符串中最多数目的子序列 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern &#xff0c;两者都只包含小写英文字母。 你可以在 text 中任意位置插入 一个 字符&#xff0c;这个插入的字符必须是 pattern[0] 或者 pattern…

CentOS 修改服务器登录密码的完整指南

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…