背景描述
项目上存在一些矢量空间数据是GDB格式的,需要将其入库,而数据库是postgresql。
前提条件
postgresql上已安装postgis,且启用了相关插件;你的电脑安装了ogr2ogr程序(一般安装了GDAL、QGIS等软件程序都有这玩意,后续以QGIS为例)。
步骤
1、打开OSGeo4W Shell,安装了QGIS就有这个。(装了GDAL的可直接打开cmd)
2、导入命令如下:
ogr2ogr -f "PostgreSQL" PG:"host=localhost port=5432 user=postgres password=1234 dbname=gis active_schema=sde" E:/dachu/s0425.gdb -lco GEOMETRY_NAME=geom -overwrite -progress -nlt POLYGON --config PG_USE_COPY YES --config SHAPE_ENCODING "UTF-8"
//说明
//ogr2ogr 导入GDB所用到的程序名,如果是在CMD中调用GDAL的ogr2ogr
需要带路径,如D:/GDAL/ogr2ogr.exe
//-f 导入目标的数据格式,这里固定是"PostgreSQL"
//PG 标识连接参数信息,分别为从左到右分别为,数据库服务器ip,数据库端口
用户名和密码,目标数据库,目标schema名称。
//后续的E:/daochu/......为本地gdb文件
//-lco 这个忘了是啥意思,建议上网查查
//GEOMETRY_NAME 表示指定存放空间信息的字段的名称,比如这里geom就表示,入库后数据的空间字段名是geom,如果后续的应用对空间字段名有要求,则可在此指定。
//-overwrite 表示覆盖同名表,提醒一下,入库后数据库表名跟GDB文件名是保持一致的。
//-progress 表示让程序输出数据导入的进度
//-nlt 为入库矢量空间数据的图形类型,是点、线、面中的哪种。
//--config 设定一些入库的其他设置,比如SHAPE_ENCODING 设定入库数据使用什么字符集。
3、最后等待入库完毕,检查数据有无问题即可。
4、补充:
按照上述命令导入有可能会报一下错误:
具体解决方法可以把参数中的dbname移到user前面,即
ogr2ogr.exe -f “PostgreSQL” PG:"host=localhost port=5432 dbname=mydb user=postgres…后面省略若干代码,参考。具体什么原理暂时不清楚,个人猜测有可能是gdal版本或者postgresql版本更新引起的。
5.当gdb中存在多个图层,但仅需要导入其中的某几个时,上述代码只需要在gbd文件后面指定你选中导入的图层名称即可。
D:\gdxzq\test1.gdb shengjie shijie
//shengjie shijie 是我在test1.gdb里放的图层