您能告诉我如何在不安装Esri应用程序的情况下将地理数据库数据加载到PostGIS中吗?

我在网上找到的解决方案谈到了使用ArcGIS将GDB转换为SHP,然后将SHP导入PostGIS。

评论

非常感谢您的回答。 FME可能是有效的解决方案,但我们认为它是非常昂贵的解决方案。我们认为14天的试用期不足以进行迁移。是否有人对其他工具有经验,例如GDAL脚本或GeoKettle?问候。

FME Desktop是迁移数据的最佳解决方案

#1 楼

我一直在为客户做这件事。

将数据转储到FileGDB或Shapefile,然后执行以下命令:

对于ESRI Shapefile: >
ogr2ogr -f“ PostgreSQL” PG:“ dbname = mydbname用户= postgres” myshapefile.shp


对于FileGDB:


ogr2ogr -f“ PostgreSQL” PG:“ dbname = mydbname用户= postgres” myFileGDB.gdb


对于FileGDB,您需要确保已安装FileGDB驱动程序。您可以使用以下方法执行此操作:


ogrinfo --formats


,它应该在某处显示FileGDB告诉您已安装它。

评论


您可以提供有关安装OGR FileGDB驱动程序的更多详细信息吗?

– RyanKDalton
2012年6月19日在16:52

Windows的最简单方法是trac.osgeo.org/osgeo4w查找filegdb软件包(下周我将通过错误修复对其进行更新)。如果您使用的是Linux或Mac,则可以修改以下脚本(该脚本用于动态构建)(请参阅install_filegdb)gist.github.com/2955440

–拉吉·亚瑟(Ragi Yaser Burhum)
2012年6月19日在17:32

@RyanDalton,让我知道怎么了:)

–拉吉·亚瑟(Ragi Yaser Burhum)
2012年6月20日23:37

在此过程中,元数据会如何处理?例如FGDC元数据不仅仅包含坐标系等。

–奥利弗·伯德金(Oliver Burdekin)
16年5月28日在7:09

ogr2ogr默认情况下不会编写它,但是通过查看代码,我看到有一个特殊的“ GetLayerDefinition”命令,您可以在SQL提示符下执行该命令以读取此信息。 ogr2ogr -f“ PostgreSQL” PG:“ dbname = mydbname用户= postgres” SanDiegoData.gdb -sql“ GetLayerDefinition Parcels”会将ESRI XML元数据转储到该db中的字段

–拉吉·亚瑟(Ragi Yaser Burhum)
16年5月31日在17:25

#2 楼

我没有尝试过,因此无法验证它是否有效,但是File Geodatabase API可能允许您将数据从文件Geodatabase导出到SHP(因此从PostGIS)。该文档说:

With the API you can... Read and write data


评论


感谢Stephen,对知道有一个API很有用,但是我们可能会尝试,如果那里确实没有人们编写的任何工具可以自动执行此操作。

– Gerson Galang
2011年9月8日下午6:14

如果您具有File GEodatabase API,则也可以直接使用GDAL进行转换:trac.osgeo.org/gdal/wiki/FileGDB

– johanvdw
2011年9月8日在7:27

注意:ESRI开发的API和基于该API的工具仅适用于创建或转换为在ArcGIS 10或更高版本中使用的File GDB(.gdb)。对早期个人GDB(.mdb)版本的支持来自早期的编程工作,并且可能会根据数据和工具而起作用。

– V Stuart Foote
2011年9月8日下午13:12

@johanvdw我在几天前尝试了trac.osgeo.org/gdal/wiki/FileGDB,然后在上面发布了我的问题,因为该链接上的说明也对我不起作用。我在Ubuntu 10.04上尝试了最新的gdal 1.8.1,但似乎没有将File GeoDB插件安装到gdal中。我尝试了“ --with-fgdb = / usr / local / FileGDB_API”和“ --with-fgdb = / usr / local”,因为在指定我应该在“ with-fgdb”参数中使用的内容时文档不清楚但没有任何效果。

– Gerson Galang
2011年9月9日,1:14

GCG:形成同一页面:(将/ usr / local / FileGDB_API替换为提取FileGDB_API_ .tar.gz的位置)

– johanvdw
2011年9月9日在11:19

#3 楼

Esri文件地理数据库API仅适用于使用10.x创建的文件地理数据库-较早的版本不适用于GDAL,QGIS或任何其他依赖于打开文件地理数据库API的文件。旧的个人地理数据库依赖于MS Access,并且有阅读器和可用的代码。

如果您有10.x文件地理数据库,则可以通过单个ogr2ogr命令(请参阅文档)从FileGDB中读取图层并加载到PostGIS中:


为了做到这一点,我还必须下载VS2010 Express Edition并构建自己的GDAL,ogr插件和1.3的开放文件地理数据库API。在不使用esri软件的情况下迁移较旧的9.x文件地理数据库(我对atm不可用)-我无法通过...


HRESULT = -2147220965,errorText =“此版本
无效或已过期。”


...当尝试使用仅支持10个的开放API打开9.x“ gdb”时.x“ gdb”。

评论


带有OpenFileGDB的ogr2ogr的最新版本(2014年中)至少可以读取ESRI文件地理数据库的旧版本。

–c.gutierrez
2014年7月22日在17:33

#4 楼

虽然我自己还没有尝试过,但我确实遇到了本教程(它是shapefile-> PostGIS),该教程使用了名为“ Spatial Data Integrator”的开源geoETL软件。我不确定它是否支持Esri GDB,但是可能值得进一步研究,看看是否可以使用此产品在不使用ESRI产品的情况下从GDB转换为PostGIS。

我听说过的其他ETL软件包是来自Safe Sofware(非常受欢迎的$)和GeoKettle(开源)的FME,以及Spatial ETL维基百科页面上的更多参考。

编辑:进一步研究后,SDI似乎不直接支持EsriGDB的读取,但是可以读取可用的OGR文件格式。

#5 楼

FWIW的工作正在进行中,以为Postgis loader创建一个GDB。这取决于具有GDB绑定的最新GDAL干线。还没有机会进行编译和尝试,但是希望在PostGIS 2.0发行之前就可以使用。

您可能可以让Paul在PostGIS新闻组上嗡嗡作响,以了解他的位置。
http://www.postgis.org/mailman/listinfo/postgis-users

对于Personal GeoDatabase格式,GDAL可以很好地读取,这就是我通常用来从个人geodb中导出数据的方式。

#6 楼

在这里回答我刚才在这里发布的问题...

我在网上找到的另一个选项(除了上述建议)是使用pgdbf(https://github.com/ kstrauser / pgdbf)转储SQL脚本,然后您可以使用该脚本将其手动提取到postgres中。