基于GDAL的JAVA生成GDB文件实战

news2024/11/19 18:10:25

前言

        在之前博客中,陆续的介绍了关于gdb文件的读取,gis利器之Gdal(三)gdb数据读取,玩转GDAL一文带你深入Windows下FileGDB驱动支持,这些文章主要都是介绍gdal的读取gdb以及简单的gdb文件读写。在实际工作中gdb是一种丰富类型的数据库,可以记录许多的数据,一个gdb文件可以包含多个图层以及多个属性列表。本文将深度讲解如何使用Java语言,基于GDAL进行图层的写入,设置属性表的字段中文别名,通过实例的方式进行讲解,最后使用ArcMap进行空间信息和属性信息的验证。

 一、JAVA具体开发

1、Pom.xml定义

      示例工程采用Maven进行jar管理,因此需要在Pom.xml定义相关依赖。参考代码如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.yelang</groupId>
	<artifactId>gdal_demo1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>gdal_demo1</name>
	<description>gdal的第一次试验</description>
 
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
	</properties>
 
	<dependencies>
		<dependency>
			<groupId>org.gdal</groupId>
			<artifactId>gdal</artifactId>
			<version>3.4.3</version>
			<scope>system</scope>
			<systemPath>${project.basedir}/lib/gdal.jar</systemPath>
		</dependency>
		
		<dependency>
		    <groupId>net.sf.ucanaccess</groupId>
		    <artifactId>ucanaccess</artifactId>
		    <version>4.0.4</version>
		</dependency>
 
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
		
	</dependencies>
</project>

2、gdb驱动支持定义

// 注册所有的驱动
gdal.AllRegister();
// 为了支持中文路径,请添加下面这句代码
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
// 为了使属性表字段支持中文,请添加下面这句
gdal.SetConfigOption("SHAPE_ENCODING", "CP936");
/*******************定义坐标系********************/
SpatialReference sr = new SpatialReference();
sr.ImportFromEPSG(4326);
/*******************输出gdb图层、表********************/
String saveGdbPath = "D:/creategdb/测试生成gdb1210.gdb";
	    
org.gdal.ogr.Driver oDriver = ogr.GetDriverByName("FileGDB");

if (oDriver == null) {
	System.out.println("FileGDB" + " 驱动不可用!\n");
	return;
}
	    
DataSource dataSourceGDB = oDriver.CreateDataSource(saveGdbPath);

3、创建gdb图层layer

 DataSource dataSourceGDB = oDriver.CreateDataSource(saveGdbPath);
//gdb图层
Layer gdbLayer = dataSourceGDB.CreateLayer("ZDXX", sr, ogr.wkbPolygon, null);

4、创建属性列,同时设置别名

// 创建一个叫FeatureName的字符型属性,字符长度为50
FieldDefn oFieldName = new FieldDefn("FieldName", ogr.OFTString);
oFieldName.SetAlternativeName("要素类型");
oFieldName.SetWidth(100);
gdbLayer.CreateField(oFieldName, 1);

5、创建空间元素

FeatureDefn oDefn =gdbLayer.GetLayerDefn();
// 创建三角形要素
Feature oFeatureTriangle = new Feature(oDefn);
oFeatureTriangle.SetField(0, 0);
oFeatureTriangle.SetField(1, "三角形");
Geometry geomTriangle =Geometry.CreateFromWkt("POLYGON ((0 0,20 0,10 15,0 0))");
oFeatureTriangle.SetGeometry(geomTriangle);

gdbLayer.CreateFeature(oFeatureTriangle);

二、gdb文件生成

       经过以上的一系列步骤,基本上完成gdb文件的生成测试,需要完整测试代码可以点击基于JAVA的GDAL生成gdb实例代码,下载后本地后,在确保环境配置无误的情况下,正常运行。

1、gdb文件目录

在生成目录,打开以gdb后缀结尾的文件夹,可以看到如下的文件(比较多,打开滚动条看更多)

2、 ArcMap验证

       使用ArcMap打开上述的gdb文件,验证文件是否可以正常打开,空间参考设置、属性设置、空间信息、属性别名是否已经正常写入等等。

 三、总结

        以上就是本文的主要内容,本文将深度讲解如何使用Java语言,基于GDAL进行图层的写入,设置属性表的字段中文别名,通过实例的方式进行讲解,最后使用ArcMap进行空间信息和属性信息的验证。实验表明,gdb文件空间参考设置正确,属性信息和空间信息设置完成,通过ArcMap可以正常打开。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VJ个人周赛

A:模拟 题意&#xff1a;给定了N个任务&#xff0c;每个任务都有一个优先级&#xff08;1~9&#xff09;&#xff0c;数字越大&#xff0c;优先级越高。将这些任务放入队列中&#xff0c;如果出队的元素&#xff08;x&#xff09;&#xff0c;x的优先级不是最高的&#xff0c;那…

从高级测试到测试开发有什么感悟

最近加入了新的团队&#xff0c;角色发生较大的转变&#xff0c;在这里分享一下自己的感受。 测试的划分 如果我们把产品的生产看成一个流水线的话&#xff0c;那么测试就是流水线上的一个重要岗位&#xff0c;把控着产品的质量。 当然&#xff0c;产品类型的不同&#xff0…

信息系统安全管理

信息系统安全是一个绕不开的话题。从事IT行业&#xff0c;不论何种角色&#xff0c;哪个工种&#xff0c;都需要有所了解。 一、信息系统安全策略 1、概述 信息系统安全策略是指对&#xff08;本单位&#xff09;信息系统的安全风险&#xff08;安全威胁&#xff09;进行有效…

小白学编程(js):通过按钮变换背景颜色

《JavaScript从入门到精通》【例9.1】 代码演示&#xff1a; <body><form class"form1" action"" name"form1" method"psot"><p><input type"button" name"Submit" value"变换背景&qu…

[附源码]计算机毕业设计基于Java的图书购物商城Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux常用环境配置及软件安装(持续更新)

1、jdk 1、下载jdk Linux安装包 把安装包放到自己定义的目录下 安装包网盘 提取码&#xff1a;n5hj 2、解压 解压安装包&#xff0c;输入命令&#xff1a; tar -xvf jdk-8u221-linux-x64.tar.gz 解压完成后会生成一个新文件 3、配置环境变量 编辑profile文件 vim /etc/p…

基于java+springboot+mybatis+vue+mysql的高校党务系统

项目介绍 本党务管理系统主要包括五大功能模块&#xff0c;即管理员模块、学生模块、积极分子模块、党员、党建组织。 &#xff08;1&#xff09;管理员模块&#xff1a;主要功能有&#xff1a;首页、个人中心、学生管理、学院管理、专业管理、班级管理、积极分子管理、党员管…

LeetCode HOT 100 —— 208. 实现 Trie (前缀树)

题目 Trie&#xff08;发音类似 “try”&#xff09;或者说 前缀树 是一种树形数据结构&#xff0c;用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&#xff0c;例如自动补完和拼写检查。 请你实现 Trie类&#xff1a; Trie() 初始化前缀树对象。 vo…

postgresql_internals学习笔记(二)常规vacuum

一、 作用与原理 page pruning执行速度很快&#xff0c;但它们的作用范围毕竟只有单页、且不包含索引&#xff0c;因此&#xff0c;我们还需要更有效的清理机制。 常规vacuum是最常用的一种&#xff0c;作用范围可以是整张表&#xff0c;清理过期元组及索引项&#xff0c;并且不…

PS图层+移动工具(1)图层概念-拖动操作-移动工具基础

先打开ps软件 然后点击进入工作区 选择右上角文件 点击打开 随便选一个要操作的图片 然后看一下自己工作区右侧的 这个图层工具开了没有 如果没开 点击上方 窗口 将图层选项勾选上 这里可以看到 我们打开一个完整图片 他就只有一个图层 触发你打开的是PSD格式的图片 psd是ps…

【云计算与大数据技术】云交付模型、云部署模型、云计算优势与挑战、应用的讲解(超详细必看)

一、云交付模型 云计算主要分为三种交付模型&#xff0c;而且这三种交付模型主要是从用户体验的角度出发的&#xff0c;分别是软件即服务&#xff08;SaaS&#xff09;&#xff0c;平台即服务&#xff08;PaaS&#xff09;&#xff0c;基础设施即服务&#xff08;IaaS&#xf…

数据库建表的 15 个最佳实践方式

前言 对于后端开发同学来说&#xff0c;访问数据库&#xff0c;是代码中必不可少的一个环节。 系统中收集到用户的核心数据&#xff0c;为了安全性&#xff0c;我们一般会存储到数据库&#xff0c;比如&#xff1a;mysql&#xff0c;oracle等。 后端开发的日常工作&#xff…

string的模拟实现

目录 ​一、模拟实现中类的组织 二、默认成员函数 1.默认构造函数 2.拷贝构造函数 &#xff08;1&#xff09;传统写法——循规蹈矩 &#xff08;2&#xff09;现代写法——偷天换日 3.析构函数 4.赋值运算符重载 二、元素访问 三、容量操作 1.容量与有效数据 2.改…

SpringBootStarter技术:生产就绪与环境配置、实现自定义Starter

● Spring 官 方 Starter &#xff1a; 命 名 应 遵 循 spring-boot-starter-{name} 的 格 式 &#xff0c; 如 spring-boot-starter-web 作 为 SpringBoot Web模块的官方artifactId。 ● Spring 非 官 方 Starter &#xff1a; 命 名 应 遵 循 {name}-spring-bootstarter的格…

ModBus_RTU-上位机经RS485接口与PLC通信

目录&#xff1a; 一、预备知识 二、上位机经RS485接口与PLC通信 ---------------------------------------------------------------------------------------------------------------------- 一、预备知识 电力-ModBus_RTU通讯规约1 电力-ModBus_RTU通讯规约2 通信-R…

Java基于springboot+vue足球联赛管理系统

本足球联赛管理系统是针对目前足球联赛管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的足球联赛管理系统存在的问题进行分析&#xff0c;完善用户的使用体会。采用计算机系统来管理信息&#xff0c;取代人工管理模式&#xff0c;查询便利&#xff0c;信息准确率…

字符串处理【后缀数组】 - 原理2 后缀数组

字符串处理【后缀数组】 - 原理2 后缀数组 在字符串处理中&#xff0c;后缀树和后缀数组&#xff08;Suffix Array&#xff09;都是非常有力的工具。 后缀数组是后缀树的一个非常精巧的替代品&#xff0c;比后缀树容易实现&#xff0c;可以实现后缀树的很多功能&#xff0c;时…

Jenkins

目录 一、什么是Jenkins 二、为什么需要使用持续集成工具 三、如何搭建jenkins服务 四、jenkins集成服务器上的JDK 五、jenkins集成git 5.1 jenkins所在的服务安装git 5.2 jenkins集成git 5.3 jenkins创建一个任务项 5.4 创建远程仓库 5.5 执行任务 六、jenkins集成maven…

[附源码]Python计算机毕业设计SSM基于的校园商城(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

人工智能写代码 !ChatGPT VScode 插件 真正打败AI人工智能的只能是AI人工智能自己。

前言&#xff1a; 真正打败你的只能是你自己。 真正打败程序员的只能是程序员自己。 真正打败AI人工智能的只能是AI人工智能自己。 人工智能写代码 &#xff01;上线3天&#xff0c;下载4万&#xff0c;ChatGPT中文版VSCode插件来了,程序员要失业了吗&#xff1f; 还没开始就遇…