
3.2.2 PostGIS数据库
PostGIS数据库是一个基于PostgreSQL数据库的空间数据引擎,具有相对完整的空间数据库功能,基本可以与Oracle Spatial的功能媲美。本节以PostgreSQL 10.11-3版本和PostGIS 2.5.0版本为例,介绍读写PostGIS数据库中的地理空间数据的方法。
1. 创建PostGIS数据库连接
创建PostGIS数据库连接的操作方法如下。
(1)在“Browser”面板的PostGIS节点上右击,在弹出的快捷菜单中选择“New Connection”命令,或者选择“Layer”—“Add Layer”—“
Add PostGIS Layer…”菜单命令,并在弹出的对话框中单击“New”按钮。
(2)在弹出的“Create a New PostGIS Connection”对话框中,在“Name”文本框中输入连接名称“PostGISConnection”;分别在“Host”、“Port”和“Database”文本框中输入PostgreSQL数据库的主机位置、端口号和数据库模式;在“Authentication”组合框的“Basic”选项卡中,分别在“User name”和“Password”文本框中输入连接的用户名和密码,如图3-26所示。

图3-26 创建PostGIS连接
(3)单击“Test Connection”按钮测试连接。如果提示连接成功,单击“OK”按钮即可创建PostGIS连接。
2. 添加PostGIS数据
选择“Layer”—“Add Layer”—“Add PostGIS Layer…”菜单命令,在弹出的数据库管理器对话框中,通过“Connections”选项选择一个有效的PostGIS连接,并单击“Connect”按钮,如图3-27所示。此时,在该对话框下方的列表中即可出现该数据库中的所有空间数据。如果希望导入不含有几何字段的数据表(非空间数据),只需要选中“Also list tables with no geometry”复选框即可。

图3-27 加载PostGIS图层
选中所有需要导入的数据以后,单击对话框下方的“Add”按钮,即可添加PostGIS数据到QGIS地图画布。另外,通过“Browser”面板也可以浏览这些数据,并且可以通过拖曳的方式将其添加到地图画布中,如图3-28所示。

图3-28 在“Browser”面板中查看PostGIS数据
【小提示】企业级数据库(如MSSQL、Oracle、DB2等)的空间数据访问的读写方式与PostGIS数据库类似,读者可以参考PostGIS数据库连接和数据访问的方式进行操作。
3. PostGIS数据的导入和导出
PostGIS数据的导入和导出可以借助数据库管理器实现,选择“Database”—“DB Manager…”菜单命令,打开如图3-29所示数据库管理器,在此可以对Oracle Spatial、PostGIS等数据库中的模式(Schema)、数据表(Table)等进行管理,也可以通过数据库管理器中的“数据库”—“SQL窗口”命令执行SQL查询语句。

图3-29 数据库管理器
单击数据库管理器工具栏中的“Import Layer/File…”按钮,即可将外部的矢量数据导入数据库中。选择数据库矢量数据后单击“
Export to File…”按钮,可以将数据库中的矢量数据导出,如图3-30所示。

图3-30 PostGIS数据的导入和导出
4. 栅格数据的导入与访问
QGIS没有原生工具可以将栅格数据导入PostGIS数据库中,但是借助PostGIS提供的raster2pgsql命令即可将GDAL支持的栅格类型的数据导入PostGIS数据库中,该工具一般可以在PostgreSQL安装目录下找到,例如:

raster2pgsql命令的基本使用方法如下:

将“<raster_options>”修改为栅格选项(如坐标系等),将“<raster_file>”修改为待导入文件的路径,将“<schemaname>”和“<tablename>”分别修改为导入数据库中的模式名称和表名称。该命令可以将栅格数据的导入转化为SQL语句代码,直接将其重定向到outname.sql中,并执行SQL语句。另外,也可以通过管道符号直接将SQL语句通过psql命令执行,例如:

“-s 4326”表示输出的坐标系,用EPSG代码表示;“-I”表示创建栅格预览“Overview”;“-C”表示应用栅格约束;“-M”表示启用PostgreSQL的真空分析;“-F”表示添加带有文件名的字段;“-t 250x250”表示指定新表的空间大小(注意:250x250中间是英文“x”,不是乘号);“tiger.test_dem”表示在模式tiger中创建表名称为test-dem的数据表。在psql语句中,“-d”后面连接数据库名称;“-U”后面连接用户名称;“-p”后面连接端口号。另外,命令执行时需要根据提示输入用户密码,如图3-31所示。

图3-31 在PostGIS中添加栅格数据
【小提示】raster2pgsql命令的具体参数和使用方法可以通过PostGIS官方网站获取:https://postgis.net/docs/using_raster_dataman.html。
命令执行完毕后,即可在“DB Manager”中找到这个数据,在“test_dem”上右击,在弹出的快捷菜单中选择“Add to Canvas”命令,即可在QGIS中使用该数据,如图3-32所示。

图3-32 添加“test_dem”数据到地图画布