4.3. PostGIS¶
这是所有具有空间功能的开源关系数据库中最流行、最有能力的数据库, 其功能也在不断增加。它利用了PostgreSQL, 这是一个众所周知的强大的RDBMS, 它挑战了像Oracle这样的顶级商业产品。 PostGIS 的当前版本是2.5.0,PostgreSQL的当前版本是12.2。
两者在使用方面都享有同样的声誉。 虽然完全理解所有的可能性或处理微调可能很复杂, 但使用 PostGIS 作为数据存储库并不是一门难以控制的科学。 您想知道 PostGIS 在GeoServer 安装中的位置吗? 它不在那里,但我们只是确保您在几个步骤中安装它并加载一些数据以使用GeoServer 。
如果你渴望学习的不仅仅是我们将要执行的简单步骤, 那么这里有两个很好的参考。 PostgreSQL和 PostGIS 的项目站点包含从基本主题到复杂主题的许多页面:
4.4. 行动时间-Windows安装PostgreSQL和 PostGIS¶
我们将把人口普查数据从shapefile转换成 PostGIS 表。 除非您已经安装了 PostGIS ,否则我们首先需要建立它。 您可以通过多种方式安装 PostGIS , 而且有关自定义安装的官方和用户文档也很常见。 为了让您开始,我们将使用从EnterpriseDB免费分发的精美软件包™. 除了选择正确的二进制软件包外,在Linux或Windows上的安装也以同样的方式运行。
1.下载入口位于 http://enterprisedb.com/downloads/postgres-postgresql-downloads . PostgreSQL列包含指向Windows和Linux二进制软件包的链接;选择一个并下载它。

图 4.10 image97¶
2.运行安装程序。
3.您可以使用默认的安装目录:

图 4.11 image98¶
4.也使用默认的数据目录:

图 4.12 image99¶
5.你可以把事情简单地放在你的开发框中;设置 postgres 作为你的 密码 :

图 4.13 image100¶
6.除非知道默认侦听端口已绑定到其他服务,否则不要更改该端口:

图 4.14 image101¶
7.将DB的区域设置保留为默认值:

图 4.15 image102¶
8.最后,我们真正开始了安装过程。点击 Next 等到它完成。
9.我们现在已经完成了PostgreSQL的安装; 保留Stack Builder running选项并单击 完成 , 堆栈生成器是自定义PostgreSQL安装的一个很好的选项。 我们将使用它添加 PostGIS :

图 4.16 image103¶
10.选择PostgreSQL的本地实例并单击 Next :

图 4.17 image104¶
11.选择 ** PostGIS 2.0**, 或更新的从目录树中的可用应用程序:

图 4.18 image105¶
12.堆栈生成器现在将下载 PostGIS 安装程序并启动它。
13.接受许可协议后,系统将提示您选择要安装的组件。 最好让安装程序为您创建一个空间数据库:

图 4.19 image106¶
14. PostGIS 安装程序将找到您的PostgreSQL位置; 由于您只有一个位置,因此无需在此处进行任何更改。
15.插入的密码 postgres 以前选择的用户,并保留默认侦听端口:

图 4.20 image107¶
16.保留空间数据库的默认名称并单击 安装 :

图 4.21 image108¶
17. PostGIS 现在已安装。当提示时 GDAL _DATA 你应该回答的设置 Yes . PostGIS 需要包含在该文件夹中的数据来执行数据重新投影(即,将坐标从SRS转换到另一个SRS)。 如果您已经安装了GDAL ,您可能想说 No 此处,稍后执行手动配置:

图 4.22 image109¶
18.点击 关闭 要关闭 PostGIS 安装程序,然后单击 完成 。
4.5. 行动时间-在Ubuntu和Debian下安装PostgreSQL和 PostGIS¶
直接用命令行安装即可:
1.使用命令更新。
sudo apt update
2.安装PostgreSQL
sudo apt install postgresql

图 4.23 install_psql¶
3.安装 PostGIS
sudo apt insall postgis

图 4.24 install_pgis¶
4.安装 PostGIS 后再我们的软件列表中就已经存在了,导入工具,如果没有,可以再软件中查找后直接下载。

图 4.25 shpsql_gui¶
4.6. 刚刚发生了什么?¶
我们安装了PostgreSQL和 PostGIS 。使用这些工具, 您可以为空间数据构建完整的存储库。我们将在下一节中为您的地理数据库铺设第一块砖。 让我们使用 PostGIS !
4.7. 操作时间-在 PostGIS 中加载数据并在GeoServer 中发布数据¶
1.现在您已经有了一个 PostGIS 的运行实例,是时候加载一些数据了。 我们将保留用于shapefile的相同人口普查数据, 并将其转换为 PostGIS 空间表。
启动 PostGIS Shapefile导入/导出管理器, 与 PostGIS 一起安装的简便工具。以下的步骤在Windows和Linux中都是相同的。 点击 View Connection details 按钮 并插入连接到 PostGIS 所需的参数:

图 4.26 image110¶
2.现在,点击 Add File 按钮并浏览到包含Tiger 2011人口普查数据的shapefile。 该工具无法识别 prj 文件中包含的SRS。将字段的值设置为 4269 :

图 4.27 image111¶
3.点击 Import 按钮 并将编码设置为 LATIN1 作为 DBF 文件字符编码:
4.等待加载程序转换数据并将其插入新的 PostGIS 表。 最后,您应该会在日志文本框中看到一条成功消息。 点击 cancel 要解除加载程序实用程序,请执行以下操作:

图 4.28 image113¶
5.现在打开管理界面,转到 Data | Stores
部分, 选择 Add new store | PostGIS
.
6.选择 tiger 作为 Workspace 。 将“数据源名称”和“描述”设置为 my PostGIS ** 。对于 **Connection Parameters,您需要插入与加载程序相同的值。 对于您的简单数据库,您不需要使用其他设置。 使用默认值,然后单击“保存”:

图 4.29 image114¶
7.GeoServer 将连接到 PostGIS 并列出所有包含空间要素的表格。 点击tl_2001_us_county表右侧的 Publish 。您想知道是谁创建了两个名为 raster_columns 和 raster_overviews ? 它们是系统表, PostGIS 用来存储数据库中加载的raster的元数据。 除了非常复杂的配置之外,您不会在GeoServer 中发布它们。

图 4.30 image115¶
8.您现在具有与shapefile相同的发布形式。请注意,这次,GeoServer 可以识别数据的本地SRID。单击“边界框”部分中的“根据数据计算”和“根据本机边界计算”。

图 4.31 image116¶
9.单击“保存”,数据将被发布。现在,您可以在“层预览”上看到预览。 使用 tiger:tl_2011_us_county_PG 旁边的 ** OpenLayers ** 打开,就能看到刚刚发布出去的图层。
4.8. 刚刚发生了什么?¶
我们安装了PostgreSQL/ PostGIS ,然后加载县数据集并将其发布到GeoServer 中。 你注意到图层的发布运行几乎相同吗,不管数据的格式是什么? GeoServer 体系结构使您不必再去关注不同数据源的细节; 只要您有一个特定RDBMS或二进制格式的驱动程序, 就可以在GeoServer 中添加数据,而只需忽略实际的格式。
GUI加载程序是一个很好的工具,但是您可能需要在远程服务器上加载shapefile, 可能只有一个远程shell会话。别害怕! shp2pgsql 可以帮你。 它是一个命令行工具,可以在 PostGIS 的Windows和Linux版本上使用。 事实上,shapefile并不是真正由shp2pgsql加载的, 但它们的转换形式是 psql 可以为你保存和装载。 所以您只需将输出管道传输到psql:
$ shp2pgsql -s 4269 -g geom -I ~/data/tl_2011_us_ county.shp public.tl_2011_us_county | psql -h localhost -p 5432 -d postgisDB -U gisuser
所需的基本参数集是 -s 要设置空间参考系, -g 命名几何列(在附加数据时很有用), 以及 -I 创建空间索引。有很多其他的参数使它成为一个灵活的工具; 和往常一样, -? 是你的朋友,如果你需要执行一个不那么琐碎的数据加载。 除了创建一个新的表默认选项外,您还可以将数据追加到现有表中,删除它, 然后重新创建或只是创建一个空表,根据shapefile数据对其结构进行建模。
4.9. 试一试-过滤数据¶
PostGIS 为您提供了更大的数据使用灵活性。可以处理和重用数据以生成新的数据集。 一个简单的处理是过滤数据以显示子集。假设你想出版一份新的县地图, 但仅限于加利福尼亚州。你可以在 PostGIS 中用一个视图来实现这一点。 正常打开 PgAdmin ,连接到 PostGIS ,创建视图并发布它。