将地理数据库数据迁移到没有Esri应用程序的PostGIS中?


39

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

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


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

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

Answers:


37

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

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

对于ESRI Shapefile:

ogr2ogr -f“ PostgreSQL” PG:“ dbname = mydbname用户= postgres” myshapefile.shp

对于FileGDB:

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

对于FileGDB,您需要确保已安装FileGDB驱动程序。您可以这样做:

ogrinfo-格式

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


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

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

@RyanDalton,让我知道这是怎么回事:)
Ragi Yaser Burhum 2012年

1
在此过程中,元数据会如何处理?为保持多只的坐标系统等例如FGDC元数据
奥利弗伯德

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

7

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

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

感谢Stephen,非常有用的是知道有一个API,但是我们可能会尝试,如果实际上没有人们编写的任何工具可以自动执行此操作。
Gerson Galang

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

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

@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

GCG:形成同一页面:(用您提取FileGDB_API_ <version> .tar.gz的位置替换/ usr / local / FileGDB_API)
johanvdw 2011年

5

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

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

ogr2ogr -overwrite -skipfailures -f "PostgreSQL" PG:"host=myhost user=myuser dbname=mydb password=mypass" "C:\somefolder\BigFileGDB.gdb" "MyFeatureClass"

为此,我还必须下载VS2010 Express Edition,并构建自己的GDAL,ogr插件和1.3的开放文件地理数据库API。

我一直无法做的是在不使用esri软件的情况下迁移较旧的9.x文件地理数据库(我对atm不可用)-我无法通过...

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

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


带有OpenFileGDB的ogr2ogr的最新版本(2014年中)至少可以读取旧版本的ESRI File Geodatabase。
c.gutierrez 2014年

2

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

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

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


2

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

检出-http: //trac.osgeo.org/postgis/browser/spike/pramsey/postgis2fgdb

您可能可以让Paul在PostGIS新闻组上讨论一下他的位置。 http://www.postgis.org/mailman/listinfo/postgis-users

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.