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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

前言

       了解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系统

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: windows