了解GDAL的朋友一定知道,GDAL3.5以下(含)默认配置下是只支持gdb文件的读的,是不支持写的。更要命的是,默认的OpenFileGDB在读取时,如果我们在矢量文件中设置了属性表字段的别名,默认驱动是读不出来的。那么如何在GDAL3.5以下(含)如何创建gdb文件,可以读取gdb文件的别名呢?
本文讲解主要面向需要基于GDAL自主去做一些基础数据处理转换的,不是依赖于Arcgis进行二次开发的方向。gdb本身是Esri公司的arcgis系列的产品,如果基于ArcgisEngine进行开发,对数据进行解析和处理完全是没有问题的。本文提出的解决方案是不依赖于Arcgis的轻量级实现。 目前,在Windows平台下介绍如何集成FileGDB驱动的文章比较少,而且很多方式集成起来比较繁琐,而且不易成功。经过多次尝试和探索,整理出来一种简单可用的FileGDB驱动集成方式,帮助您在日常开发中快速集成使用。
OpenFileGDB驱动程序提供对ArcGIS 9及以上版本创建的文件geodatabase(.gdb目录)的矢量层的读取访问。数据集名称必须是目录/文件夹名称,并且必须以.gdb扩展名结尾。它还可以直接读取zipped.gdb目录(扩展名为.gdb.zip),前提是它们在第一级包含一个.gdb目录。也可以直接打开特定的.gdbtable文件(包括“system”表)。几何图形中的曲线由GDAL>=2.2支持。

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

通常在开发环境,我们可以选择使用编译好的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目录如下所示:

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

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

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

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

到这一步,FileGDB驱动的支持基本集成完成。但此时如果您在命令行使用ogrinfo --formats命令查看,FileGDB驱动还是不支持。其实还需要最后一步,设置扩展驱动的环境变量。
在系统中设置一个GDAL_DRIVER_PATH的环境变量其值 %GDAL_HOME%\bin\gdalplugins ,其中(GDAL_HOME)是GDAL的工作目录,也是一个环境变量。

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

在docs窗口中能看到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
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
站在前人的肩膀上,才能站得更高,看得更远。欢迎各位朋友多交流,批评指正。
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解
我已经按照https://github.com/wayneeseguin/rvm#installation上的说明通过RVM安装了Ruby.有关信息,我有所有文件(readline-5.2.tar.gz、readline-6.2.tar.gz、ruby-1.9.3-p327.tar.bz2、rubygems-1.8.24.tgz、wayneeseguin-rvm-stable.tgz和yaml-0.1.4.tar.gz)在~/.rvm/archives目录中,我不想在任何目录中重新下载它们方式。当我这样做时:sudo/usr/bin/apt-getinstallbuild-essent
我的Ruby-on-Rails项目中有以下文件结构,用于规范:/spec/msd/serviceservice_spec.rb/support/my_modulerequests_stubs.rb我的request_stubs.rb有:moduleMyModule::RequestsStubsmodule_functiondeflist_clientsurl="dummysite.com/clients"stub_request(:get,url).to_return(status:200,body:"clientsbody")endend在我的service_spec.rb我有:re
Ruby是否支持(找不到更好的词)非转义(逐字)字符串?就像在C#中一样:@"c:\ProgramFiles\"...或者在Tcl中:{c:\ProgramFiles\} 最佳答案 是的,您需要在字符串前加上%前缀,然后是描述其类型的单个字符。你想要的是%q{c:\programfiles\}。镐书很好地涵盖了这一点here,部分是通用分隔输入。 关于ruby-Ruby是否支持逐字字符串?,我们在StackOverflow上找到一个类似的问题: https:/