暑期接了一个实习的活,主要是关于QGIS这个软件的一些功能开发(说是开发其实是批处理)。不过得先会走才能跑,这个软件本身还没搞明白就想着开发是不行的。同事发来了一些gdb格式的样例数据直接就给我整蒙了,google了一番之后有了这篇博客,我将叙述如何将gdb格式的数据导入PostGIS数据库,然后在QGIS中连接。
PostGIS是PostgreSQL的一个插件,因此我们需要首先配置PostgreSQL环境。进入下载地址,查找对应自己系统的版本进行安装即可,注意要设置管理员用户密码。
安装完PostgreSQL后,会提示运行Stack Builder。这个工具可以安装PostGIS,但是它使用的下载源速度很慢,挂梯子可以解决这个问题,但更好的选择是去官网直接下载。
手动安装的过程中,首先要注意安装路径,必须是PostgreSQL的根目录。其次在设置安装组件时,最好选择“Create spatial database”,建立一个模板,以便之后我们据此创建数据库,当然这不是必须的。
pgAdmin是PostgreSQl的图形化管理工具,win+s搜索后即会开启服务,并在浏览器中打开可视化界面。
开启服务会要求输入管理员密码,第一次打开数据库(Servers)也会要求输入密码。初次使用时可能是英文界面,我们可以在:File-Preference-Miscellaneous-Language中修改为Chinese。
点击Servers-数据库,可以看到一个默认的postgres数据库,架构(schema)中就是常见的关系数据库中的一些属性。一般情况下我们对默认数据库不感兴趣,所以右键点击数据库,可以新建一个:
成功创建数据库之后,我们点击架构-public,然后点击查询工具:
CREATE EXTENSION postgis; # 启用postgis插件
SELECT postgis_full_version(); # 用来检查是否安装了postgis
如果输出了PostGIS的版本,那么我们就成功的为这个数据库开启了postGIS扩展,至此PostGIS的安装就完成了。
gdb是arcGIS的专有空间数据库格式,postGIS本身是不支持的,这里我们使用一个辅助软件,OSGeo4W中的GDAL来完成一键导入的功能。OSGeo4w是一系列GIS工具的集合。实际上,我强烈推荐用OSGeo4W来完成QGIS的全套安装,否则后续配置环境变量是一个非常痛苦的过程,如果你已经用QGIS独立安装包安装了,那么看我之后的博客有解决环境变量的办法。
OSGeo4W的官网只提供了在线安装器的下载,这个安装器中提供了4个默认的下载源,但是速度都非常慢,因此必须要挂代理进行下载,这里我给出挂梯子的流程:
我们首次安装需要选择第一个,Express Desktop Install,但是由于我们需要先挂代理,所以选择Advanced Install进行设置。点击下一步后,选择Install from Internet,然后是选择安装路径和安装用户,再下一步是选择下载的临时存储地址,再下一步就是我们设置代理的地方了,启用HTTP代理后,不断上一步直到回到上图界面,选择Express Desktop Install,下一步。
我们这里只需要安装GDAL,跟着流程安装完成,然后我们再次打开安装器,因为GDAL默认是不安装gdb的驱动的。这次我们选择Advanced Install,一直到下图位置:
搜索GDAL,并在Libs中勾选标红的gdb driver,安装即可。
win+s打开OSGeo4w Shell,然后输入:ogrinfo --formats
确保在pgAdmin中建立了新的数据库,并且启用了postgis插件后,在OSGeo4W Shell中输入以下语句:
ogr2ogr -f "PostgreSQL" PG:"host=localhost port=5432 user=postgres password=xxx dbname=yyy" D:/data/geodata.gdb -overwrite -progress --config PG_USE_COPY YES
其中xxx为管理员密码,yyy为数据库名称,gdb文件夹的路径需根据实际情况修改。后面加入的三个参数意义如下:
-overwrite 表示会覆盖已经存在的记录
-progress 表示显示进度
–config PG_USE_COPY YES 将极大改善导入速度
打开QGIS后,在Browser中找到PostGIS,右键新建连接。在弹出的对话框中输入数据库的相应配置即可:
即使挂了梯子,在线安装过程的速度也可能比较慢,软件自身提供的4个源中,推荐使用第二个:http://download.osgeo.org,或者使用国内的镜像源,但如果误选了其他源而对其速度不满意,那么我们只需要在进行到Agreement协议打勾这一步时,按上一步,即可重新选择源。
如果执行一键导入的代码之后,有如下提示:
function addgeometrycolumn does not exist
则说明目标数据库没有启用PostGIS,或者PostGIS的安装不完整。请在建立数据库时务必启用postGIS插件。