PostGIS 拓扑类型和函数用于管理拓扑对象,如面、边和节点。
Sandro Santilli 在 2011 年巴黎 PostGIS 日会议上的演讲很好地概述了 PostGIS 拓扑及其发展方向 PostGIS 2.0 幻灯片中的拓扑。
Vincent Picavet 在 PostGIS 拓扑 PGConf EU 2012 中对拓扑是什么、如何使用它以及支持它的各种 FOSS4G 工具进行了很好的概述和总结。
基于拓扑的 GIS 数据库的一个例子是 美国人口普查拓扑集成地理编码和参考系统 (TIGER) 数据库。如果您想尝试使用 PostGIS 拓扑并需要一些数据,请查看 Topology_Load_Tiger。
PostGIS 拓扑模块在以前版本的 PostGIS 中就已存在,但从未成为 PostGIS 官方文档的一部分。在 PostGIS 2.0.0 中,正在进行大规模清理,以删除其中所有已弃用的函数的使用,修复已知的可用性问题,更好地记录功能和函数,添加新函数,并增强以更符合 SQL-MM 标准。
该项目的详细信息可以在 PostGIS 拓扑 Wiki 中找到。
与此模块关联的所有函数和表都安装在名为 topology
的模式中。
在 SQL/MM 标准中定义的函数以 ST_ 为前缀,而 PostGIS 特有的函数没有前缀。
从 PostGIS 2.0 开始,默认情况下构建拓扑支持,并且可以在构建时指定 --without-topology 配置选项来禁用它,如 第 2 章,PostGIS 安装 中所述
本节列出了 PostGIS 拓扑安装的 PostgreSQL 数据类型。请注意,我们描述了它们的转换行为,这在设计您自己的函数时非常重要。
ValidateTopology
的返回类型。本节列出了 PostGIS 拓扑安装的 PostgreSQL 域。域可以像对象类型一样用作函数或表列的返回对象。域和类型之间的区别在于,域是具有绑定到它的检查约束的现有类型。
本节列出了用于构建新的拓扑模式、验证拓扑和管理拓扑几何列的拓扑函数
schema_name
中名为 table_name
的表中删除拓扑几何列,并从 topology.layer 表中取消注册这些列。本节讨论拓扑构建期间的数据库统计信息管理。
向拓扑添加元素会触发许多数据库查询,以查找将被分割的现有边,添加节点和更新将与新线段连接的边。因此,拓扑表中的数据统计信息保持最新非常有用。
PostGIS 拓扑填充和编辑功能不会自动更新统计信息,因为在拓扑中的每次更改后都更新统计信息会过于繁琐,因此调用者有责任处理该问题。
autovacuum 更新的统计信息对于在 autovacuum 进程完成之前启动的事务将不可见,因此长时间运行的事务将需要自己运行 ANALYZE,才能使用更新后的统计信息。 |
本节介绍用于创建新拓扑的拓扑函数。
本节介绍用于添加、移动、删除和分割边、面和节点的拓扑函数。所有这些函数均由 ISO SQL/MM 定义。
alinestring
定义的隔离边添加到拓扑,连接两个现有的隔离节点 anode
和 anothernode
,并返回新边的边 id。apoint
几何图形作为节点存在,则会抛出错误。返回移动的描述。aface
的一组有序边。本节介绍以非标准方式处理拓扑的函数。
本节介绍用于创建新拓扑几何图形的拓扑函数。
topoelementarray
。本节介绍用于编辑现有拓扑几何图形的拓扑函数。
topoelementarray
(拓扑元素数组),其中包含给定 TopoGeometry 的拓扑元素和类型(原始元素)。topoelement
对象,其中包含给定 TopoGeometry 的拓扑 element_id、element_type(原始元素)。本节列出了用于检查拓扑几何图形和拓扑基元之间关系的拓扑函数
创建拓扑,并可能关联拓扑图层后,您可能希望将其导出为基于文件的格式,以便备份或传输到另一个数据库。
使用 PostgreSQL 的标准转储/恢复工具存在问题,因为拓扑由一组表(4 个用于基元,任意数量用于图层)和元数据表(topology.topology 和 topology.layer)中的记录组成。此外,拓扑标识符在数据库之间不是唯一的,因此您的拓扑的参数在恢复时需要更改。
为了简化拓扑的导出/恢复,提供了一对可执行文件:pgtopo_export
和 pgtopo_import
。用法示例
pgtopo_export dev_db topo1 | pgtopo_import topo1 | psql staging_db
pgtopo_export
脚本接受数据库和拓扑的名称,并输出一个转储文件,该文件可用于将拓扑(和关联的图层)导入到新数据库中。
默认情况下,pgtopo_export
将转储文件写入标准输出,以便可以将其管道传输到 pgtopo_import
或重定向到文件(拒绝写入终端)。您可以选择使用 -f
命令行开关指定输出文件名。
默认情况下,pgtopo_export
包括针对给定拓扑定义的所有图层的转储。这可能比您需要的更多数据,或者可能是无法工作的(如果您的图层表具有复杂的依赖关系),在这种情况下,您可以使用 --skip-layers
开关请求跳过图层并单独处理这些图层。
使用 --help
(或简称 -h
)开关调用 pgtopo_export
将始终打印简短的用法字符串。
转储文件格式是一个压缩的 tar 存档,其中包含一个 pgtopo_export
目录,该目录至少包含一个带有格式版本信息的 pgtopo_dump_version
文件。截至版本 1
,该目录包含制表符分隔的 CSV 文件,其中包含拓扑基元表(节点、边数据、面、关系)的数据、与之关联的拓扑和图层记录,以及(除非给出 --skip-layers
)以自定义格式转储的报告为给定拓扑图层的表。PostgreSQL 转储。
pgtopo_import
脚本接受 pgtopo_export
格式的拓扑转储,以及要创建的拓扑的名称,并输出一个 SQL 脚本,该脚本重建拓扑和关联的图层。
生成的 SQL 文件将包含创建具有给定名称的拓扑的语句,在其中加载原始数据,恢复和注册所有拓扑图层,从而将所有 TopoGeometry 值正确链接到其正确的拓扑。
默认情况下,pgtopo_import
从标准输入读取转储,以便可以与管道中的 pgtopo_export
一起使用。您可以选择使用 -f
命令行开关指定输入文件名。
默认情况下,pgtopo_import
在输出 SQL 文件中包含恢复转储中找到的所有图层的代码。
如果您的目标数据库中已经有与转储中名称相同的表,则这可能是不需要的或无法工作的。在这种情况下,您可以使用 --skip-layers
开关请求跳过图层并单独处理这些图层(或稍后处理)。
可以使用 --only-layers
开关生成仅加载图层并将图层链接到命名拓扑的 SQL。这对于在解决命名冲突后加载图层,或将图层链接到不同的拓扑(例如,起始拓扑的空间简化版本)可能很有用。