玩转GDAL一文带你深入Windows下FileGDB驱动支持

news2024/9/21 17:55:14

前言

       了解GDAL的朋友一定知道,GDAL3.5以下(含)默认配置下是只支持gdb文件的读的,是不支持写的。更要命的是,默认的OpenFileGDB在读取时,如果我们在矢量文件中设置了属性表字段的别名,默认驱动是读不出来的。那么如何在GDAL3.5以下(含)如何创建gdb文件,可以读取gdb文件的别名呢?

       本文讲解主要面向需要基于GDAL自主去做一些基础数据处理转换的,不是依赖于Arcgis进行二次开发的方向。gdb本身是Esri公司的arcgis系列的产品,如果基于ArcgisEngine进行开发,对数据进行解析和处理完全是没有问题的。本文提出的解决方案是不依赖于Arcgis的轻量级实现。 目前,在Windows平台下介绍如何集成FileGDB驱动的文章比较少,而且很多方式集成起来比较繁琐,而且不易成功。经过多次尝试和探索,整理出来一种简单可用的FileGDB驱动集成方式,帮助您在日常开发中快速集成使用。

一、 GDB文件处理

1、OpenFileGDB

       OpenFileGDB驱动程序提供对ArcGIS 9及以上版本创建的文件geodatabase(.gdb目录)的矢量层的读取访问。数据集名称必须是目录/文件夹名称,并且必须以.gdb扩展名结尾。它还可以直接读取zipped.gdb目录(扩展名为.gdb.zip),前提是它们在第一级包含一个.gdb目录。也可以直接打开特定的.gdbtable文件(包括“system”表)。几何图形中的曲线由GDAL>=2.2支持。

2、FileGDB 

        File gdb驱动程序提供对ArcGIS 10及以上版本创建的文件geodatabase(.gdb目录)的矢量层的读写访问。数据集名称必须是目录/文件夹名称,并且必须以.gdb扩展名结尾。注意 : the OpenFileGDB driver驱动程序作为可选的内置驱动程序存在,即不依赖于第三方库)只读驱动程序。

 二、配置FileGDB驱动支持

1、下载编译后的版本和FileGDB驱动

       通常在开发环境,我们可以选择使用编译好的gdal版本来进行配置开发环境即可。在gis驱动包下载网站,地址为:gisinternals支持,在该网站上下载相应的编译好的包。

        为了演示方便,我原来下载的是release-1930-x64-gdal-3-4-3-mapserver-7-6-4这个版本,可以在历史正式版本中查询。

       点击这个超链接进入到具体的下载页面,根据需要可以直接下载编译好的gdal和mapserver,如果只想要安装gdal,也可以直接下载gdal-304-1930-x64-core.msi。gdal-304-1930-x64-filegdb.msi是必须要下载的。在Windows下面用于安装相关使用。

下载下来之后得到的gdal目录如下所示:

 2、安装FileGDB驱动

       安装FileGDB驱动的步骤非常关键(FileGDB安装成功与否取决这一步,重点注意),不过先执行msi文件还是先解压压缩包,这个先后顺序不影响系统功能。这里我们先将压缩包解压到本地目录中,解压后的目录如下图所示:

       将下载下来的gdal-304-1930-x64-filegdb.msi双击进行安装,选择系统默认安装即可。

       后续的安装步骤非常简单,都是下一步下一步就可以。filegdb.msi文件安装成功一般在C盘下面的GDAL文件夹中,如下图所示:

          这里就是对应版本的FileGDBAPI和ogr_FileGDB驱动文件,将这两个文件拷贝到上一步中GDAL的解压目录下的bin目录下即可。完成后的gdal工作目录如下所示:

       到这一步,FileGDB驱动的支持基本集成完成。但此时如果您在命令行使用ogrinfo --formats命令查看,FileGDB驱动还是不支持。其实还需要最后一步,设置扩展驱动的环境变量。

3、设置GDAL_DRIVER_PATH环境变量

      在系统中设置一个GDAL_DRIVER_PATH的环境变量其值 %GDAL_HOME%\bin\gdalplugins  ,其中(GDAL_HOME)是GDAL的工作目录,也是一个环境变量。

       通过配置这个环境变量后,再次在DOCS中输入ogrinfo --formats命令,输出结果如下:

在docs窗口中能看到FileGDB驱动说明集成成功。

三、Java集成测试

1、Java获取FileGDB驱动

package com.yelang.gdal_demo1;

import org.gdal.gdal.gdal;
import org.gdal.ogr.ogr;
import org.junit.Test;

public class TestGdal {

	@Test
	public void testDriver() {
		gdal.AllRegister();
		int count = ogr.GetDriverCount();
		for (int i = 0; i < count; i++) {
			String driverName = ogr.GetDriver(i).getName();
			System.out.print(driverName + "\t");
		}
		gdal.GDALDestroyDriverManager();
	}
}

      控制台中输出的结果中第一个就是包含FileGDB

FileGDB	ESRIC	PCIDSK	PDS4	VICAR	JP2OpenJPEG	PDF	MBTiles	EEDA	OGCAPI	DB2ODBC	ESRI Shapefile	MapInfo File	UK .NTF	LVBAG	OGR_SDTS	S57	DGN	OGR_VRT	REC	Memory	CSV	NAS	GML	GPX	LIBKML	KML	GeoJSON	GeoJSONSeq	ESRIJSON	TopoJSON	Interlis 1	Interlis 2	OGR_GMT	GPKG	SQLite	ODBC	WAsP	PGeo	MSSQLSpatial	OGR_OGDI	PostgreSQL	MySQL	OpenFileGDB	DXF	CAD	FlatGeobuf	Geoconcept	GeoRSS	GPSTrackMaker	VFK	PGDUMP	OSM	GPSBabel	OGR_PDS	WFS	OAPIF	Geomedia	EDIGEO	SVG	CouchDB	Cloudant	Idrisi	ARCGEN	ODS	XLSX	Elasticsearch	Walk	Carto	SXF	Selafin	JML	PLSCENES	CSW	VDV	GMLAS	MVT	NGW	MapML	TIGER	AVCBin	AVCE00	HTTP	

2、创建gdb文件

package com.yelang.gdal_demo1;

import org.gdal.gdal.gdal;
import org.gdal.ogr.Driver;
import org.gdal.ogr.ogr;
import org.junit.Test;

public class TestFileGDB {
	
	@Test
	public void testWriterGDB() {
		//注册所有的驱动
		ogr.RegisterAll();
		//为了支持中文路径,请添加下面这句代码
		gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");
		//为了使属性表字段支持中文,请添加下面这句
		gdal.SetConfigOption("SHAPE_ENCODING","");

		Driver driver = ogr.GetDriverByName("FileGDB");
		System.out.println(driver);driver.CreateDataSource("D:/test1203/test001.gdb");
		gdal.GDALDestroyDriverManager();
	}

}

 四、总结

        以上就是本文的主要内容,本文讲解主要面向需要基于GDAL自主去做一些基础数据处理转换的,不是依赖于Arcgis进行二次开发的方向。gdb本身是Esri公司的arcgis系列的产品,如果基于ArcgisEngine进行开发,对数据进行解析和处理完全是没有问题的。本文提出的解决方案是不依赖于Arcgis的轻量级实现。

       友情提示:根据gdal管网最新提示,在最新的Gdal3.6的版本中,OpenFileGDB已经默认了写GDB的支持,不过完整编译版估计还需要等一下。如果是之前的项目,想要支持GDB的写,本文应该有所帮助。

       本文在许多网友的解决方案中成功做了实践,感谢他们的解决思路本文的指导,以下两篇:

1、溪水边小屋 java 使用gdal_JAVA GDAL使用 FileGDB 

2、晟誉小宝贝 Gdal环境配置(Windows系统)。

      站在前人的肩膀上,才能站得更高,看得更远。欢迎各位朋友多交流,批评指正。

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

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

相关文章

Git项目演练

Git项目演练 首先&#xff0c;进入到项目路径 然后&#xff0c;初始化&#xff0c;产生.git库 创建gitignore文件 将不需要的文件放入到,gitignore 将所有的文件添加到追踪的状态 对文件进行一次提交 使用git log查看变动 使用编译器修改代码中的内容 对修改进…

基于javaweb的学籍管理系统计算机毕业论文java毕业设计选题源代码

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 计算机毕业设计java毕设之基于javaweb的学籍管理系统-IT实战营_哔哩哔哩_bilibili项目资料网址: http://itzygogogo.com软件下载地址:http://itzy…

【能效管理】安科瑞新能源充电桩收费运维管理云平台应用分析

概述 AcrelCloud-9000安科瑞充电桩收费运营云平台系统通过物联网技术对接入系统的汽车充电站、电动自行车充电站以及各个充电桩进行不间断地数据采集和监控&#xff0c;实时监控充电桩运行状态&#xff0c;进行充电服务、支付管理&#xff0c;交易结算&#xff0c;资源管理、电…

ADSP-21569/ADSP-21593的开发入门(上)

作者的话 ADI的SHARC系列DSP&#xff0c;目前已经出到5系列了&#xff0c;最新的一颗叫2159x&#xff0c;按照ADI的说法&#xff0c;这颗DSP的性能是21569的两倍&#xff0c;但又能和21569做P2P的替换&#xff0c;所以下面我们就以21593为例&#xff0c;写一点资料&#xff0c…

头歌计算机组成原理MIPS RAM设计

完整答案点击底部 <?xml version"1.0" encoding"UTF-8" standalone"no"?> <project source"2.15.0.2.exe" version"1.0"> This file is intended to be loaded by Logisim http://logisim.altervista.org &l…

数字化门店| 旧衣回收店系统 | 智慧门店小程序开发教程

随着人们生活质量的提升&#xff0c;无论男女&#xff0c;衣柜鞋柜里摆满了各种衣物&#xff0c;覆盖了多个场景下的衣物非常多&#xff0c;同时如今大多数人已经不再穿补丁衣服&#xff0c;旧或破就会扔掉买新的。为了节省资源及合理二次利用&#xff0c;旧衣回收行业逐渐出现…

用译码器来设计组合逻辑电路

三线到八线&#xff1a;输入端只有三个所以只能是三变量 我们先来看书上的一个例子 设计的过程第一步 将函数表达式整理成最小项和的形式 我们用来举例&#xff0c;不是最小项的形式 三变量函数可以用三变量的最小项来表示 为了看的更清楚&#xff0c;我们写成最小项的编号&…

四、Git本地仓库基本操作——查看提交历史和版本回退前进

1. 查看提交历史 查看git提交历史一般常用两个命令&#xff1a; # 查看历史提交记录 git log # 以列表形式查看指定文件的历史记录 git blame <文件名>git log 该命令会按照我们提交的时间线&#xff0c;然后列出所有的历史提交。 示例&#xff1a; git log 显示的…

[附源码]计算机毕业设计JAVA医疗预约系统

[附源码]计算机毕业设计JAVA医疗预约系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

【Pytorch】广播机制

【参考&#xff1a;The size of tensor a must match the size of tensor b (y) at non-singleton dimension z_点PY的博客-CSDN博客】 报错&#xff1a;The size of tensor a (x) must match the size of tensor b (y) at non-singleton dimension z 其广播机制遵循以下规则…

[附源码]计算机毕业设计基于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…

mediasoup学习与实践

一、mediasoup基本概念&#xff1a; 基础架构 1、worker 2、router 3、producer 4、consumer 5、transport 整体结构 特性 1、支持IPv6 2、ICE/DRLS/RTP/RTCP over UDP and TCP 3、支持simulcast和svc 4、支持拥塞控制 5、带宽控制 6、支持&#xff1a;STCP 7、多流使用同一…

安全可靠的SRT实时传输协议

Secure Reliable Transport(SRT)是安全、可靠、低延时的多媒体实时传输协议。SRT协议使用AES进行数据加密&#xff0c;运用FEC进行前向纠错&#xff0c;并且有流量控制、拥塞控制。类似于QUIC协议&#xff0c;SRT采用UDP代替TCP&#xff0c;在应用层提供发送确认机制、ARQ自动重…

ArcGIS基础:点要素分割线要素和提取线要素的交点

第一个实验&#xff1a;【点要素分割线要素】 看下原始数据&#xff1a;下图所示&#xff0c;&#xff12;个红点和一条绿线&#xff0c;用&#xff12;个点去分割这条线。 找到【数据管理工具】&#xff0c;在找到【要素】&#xff0c;再找到【在点处分割线】&#xff0c;如…

【云原生 | Kubernetes 实战】07、Pod 高级实战:Pod 生命周期、启动钩子、停止钩子

目录 一、Pod 生命周期 1.1 pod 生命周期的重要行为 二、初始化容器最佳实战 2.1 Init 容器 2.2 初始化容器使用案例 2.3 初始化容器生产应用 三、主容器 3.1 容器钩子 3.2 演示 postStart 和 preStop 用法 总结 一、Pod 生命周期 pod从开始创建到终止退出的时间…

51单片机自学报告--实验部分

微机接口技术-自主学习笔记 PPT链接&#xff1a;微机接口自学--51单片机自学汇报PPT_猫猫爱吃小鱼的博客-CSDN博客 效果演示gif: 四、Proteus仿真 仿真环境&#xff1a;电路仿真软件: Proteus HEX可执行文件编写软件: keil uVision4 keil uVision4新…

设计模式——模板方法

GOF-23 模式分类 从目的来看&#xff1a; • 创建型&#xff08;Creational&#xff09;模式&#xff1a;将对象的部分创建工作延迟到子类或者其他对象&#xff0c;从而应对需求变化为对象创建时具体类型实 现引来的冲击。 • 结构型&#xff08;Structural&#xff09;模式&a…

OpenCV 透视变换

OpenCV 透视变换1. 简介2. 仿射变换2.1. 平移2.2. 旋转2.3. 放缩2.4. 错切2.5. 仿射变换3. 透视变换1. 简介 汽车的360度全景影像&#xff0c;从拍照视角变成鸟瞰图 这种变换常常用到透视变换 在了解透视变换前&#xff0c;需要了解一下其他的变换&#xff0c;包括 平移&#…

小白必知必会的几个IP协议知识

小白必知必会的几个IP协议知识1.IP地址属于网络层协议2.路由控制3.数据链路的抽象化4.IP属于面向无连接型1.IP地址属于网络层协议 在计算机通信中&#xff0c;为了识别通信对端&#xff0c;必须要有一个类似于地址的识别码进行标识。 MAC地址是用来标识同一个链路中不同计算机…

【C++泛型学习笔记】函数模板

提到C的程序设计方法&#xff0c;最先想到的便是两种&#xff1a;面向过程和面向对象编程。但是当我们去阅读一些优秀的C库源码时&#xff08;比如CGAL&#xff09;&#xff0c;就会直接被其的泛型编程劝退。泛型编程也是C程序设计方法中的一种&#xff0c;不同于上述两种设计方…