您能告诉我如何在不安装Esri应用程序的情况下将地理数据库数据加载到PostGIS中吗?
我在网上找到的解决方案谈到了使用ArcGIS将GDB转换为SHP,然后将SHP导入PostGIS。
您能告诉我如何在不安装Esri应用程序的情况下将地理数据库数据加载到PostGIS中吗?
我在网上找到的解决方案谈到了使用ArcGIS将GDB转换为SHP,然后将SHP导入PostGIS。
Answers:
我一直在为客户做这件事。
将数据转储到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告诉您已安装。
ogr2ogr -f "PostgreSQL" PG:"dbname=mydbname user=postgres" SanDiegoData.gdb -sql "GetLayerDefinition Parcels"
会将ESRI XML元数据转储到该数据库中的字段中
我还没有尝试过,所以无法验证它是否有效,但是File Geodatabase API可能允许您将数据从File Geodatabase导出到SHP(因此从PostGIS)。该文件说:
With the API you can... Read and write data
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”时。
尽管我自己还没有尝试过,但是我确实碰到了本教程(shapefile-> PostGIS),该教程使用了名为“ Spatial Data Integrator ” 的开源geoETL软件。我不确定它是否支持Esri GDB,但是可能值得进一步研究,看看是否可以使用此产品在不使用ESRI产品的情况下从GDB转换为PostGIS。
我听说过的其他ETL软件包包括来自Safe Sofware(非常受欢迎的$)和GeoKettle(开源)的FME,以及Spatial ETL维基百科页面上的更多参考。
编辑:进一步研究发现,SDI似乎不直接支持EsriGDB的读取,但是可以读取可用的OGR文件格式。
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中导出数据的方式。
在这里回答我自己的问题,我刚才在这里发布了...
我在网上找到的另一个选项(除了上面的建议之外)是使用pgdbf(https://github.com/kstrauser/pgdbf),它会转储SQL脚本,然后您可以使用该脚本将其手动提取到postgres中。