PostGIS拓扑类型和函数用于管理拓扑对象,例如面、边和节点。
Sandro Santilli在2011年PostGIS Day Paris会议上的演示提供了关于PostGIS拓扑和未来发展方向的很好概述。您可以查看他的幻灯片演示,链接如下:Topology with PostGIS 2.0 slide deck。
Vincent Picavet 在 PostGIS 拓扑 PGConf EU 2012 中对拓扑是什么、如何使用以及支持它的各种 FOSS4G 工具提供了很好的概要和概述。
基于拓扑的 GIS 数据库的一个示例是美国人口普查拓扑集成地理编码和参考系统 (TIGER) 数据库。 如果您想尝试 PostGIS 拓扑并需要一些数据,请查看 Topology_Load_Tiger。
PostGIS 拓扑模块已存在于 PostGIS 的早期版本中,但从未成为官方 PostGIS 文档的一部分。 在 PostGIS 2.0.0 中,正在进行重大清理,以删除其中所有已弃用函数的使用,修复已知的可用性问题,更好地记录特性和函数,添加新函数,并进行增强以更符合 SQL-MM 标准。
该项目的详细信息可以在 PostGIS Topology Wiki 中找到
与该模块关联的所有函数和表都安装在称为拓扑
架构中。
SQL/MM 标准中定义的函数以 ST_ 为前缀,而 PostGIS 特定的函数没有前缀。
从 PostGIS 2.0 开始默认构建拓扑支持,并且可以在构建时指定 --without-topology 配置选项来禁用拓扑支持,如第 2 章 Chapter 2, PostGIS 安装中所述
本节列出了 PostGIS Topology 安装的 PostgreSQL 数据类型。 请注意,我们描述了这些的强制转换行为,这非常重要,尤其是在设计您自己的函数时。
ValidateTopology
的返回类型。
本节列出了 PostGIS Topology 安装的 PostgreSQL 域。 域可以像对象类型一样用作函数或表列的返回对象。 域和类型之间的区别在于,域是绑定了检查约束的现有类型。
本节列出了用于构建新拓扑模式、验证拓扑和管理 TopoGeometry 列的拓扑函数
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
开关请求跳过图层并单独处理这些图层。
调用 pgtopo_export
时使用 --help
(或缩写的 -h
)指令将始终打印简短的用法说明字符串。
转储文件格式是 pgtopo_export
目录的压缩 tar 存档,其中至少包含一个带有格式版本信息的 pgtopo_dump_version
文件。 从版本 1
开始,该目录包含制表符分隔的 CSV 文件,其中包含拓扑基元表的数据(节点、边、面、关系)、与其关联的拓扑和层记录以及(除非给出 --skip-layers
)自定义 -format PostgreSQL 转储表报告为给定拓扑的层。
pgtopo_import
脚本采用 pgtopo_export
格式的拓扑转储和要创建的拓扑的名称,并输出重建拓扑和关联层的 SQL 脚本。
生成的 SQL 文件将包含以下语句:创建具有给定名称的拓扑、在其中加载原始数据、通过将所有 TopoGeometry 值正确链接到其正确的拓扑来恢复和注册所有拓扑层。
默认情况下,pgtopo_import
从标准输入读取转储,以便它可以与管道中的 pgtopo_export
结合使用。 您可以选择使用 -f
命令行开关指定输入文件名。
默认情况下,pgtopo_import
在输出 SQL 文件中包含用于恢复转储中找到的所有层的代码。
如果您的目标数据库已经具有与转储中的表同名的表,这可能是不需要的或不起作用的。 在这种情况下,您可以使用 --skip-layers
命令请求跳过层并单独(或稍后)处理这些层。
可以使用 --only-layers
命令生成仅加载层并将层链接到命名拓扑的 SQL。 这对于在解决命名冲突后加载图层或将图层链接到不同的拓扑(例如起始拓扑的空间简化版本)非常有用。