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 拓扑维基
与该模块相关的所有函数和表都安装在名为 topology
的模式中。
在 SQL/MM 标准中定义的函数以 ST_ 为前缀,而特定于 PostGIS 的函数没有前缀。
从 PostGIS 2.0 开始,默认情况下构建拓扑支持,并且可以通过在构建时指定 --without-topology 配置选项来禁用,如 第 2 章,PostGIS 安装 中所述。
ValidateTopology
的返回类型。schema_name
中名为 table_name
的表中删除拓扑几何列,并从 topology.layer 表中注销这些列。向拓扑添加元素会触发许多数据库查询,以查找将要分割的现有边、添加节点以及更新将与新线状要素连接的边。因此,拓扑表中数据的统计信息是最新的非常有用。
PostGIS 拓扑填充和编辑功能不会自动更新统计信息,因为在拓扑的每次更改后更新统计信息将是过度的,因此由调用者负责处理此问题。
自动清理更新的统计信息对在自动清理过程完成之前开始的事务不可见,因此长时间运行的事务需要自己运行 ANALYZE,以使用更新的统计信息。 |
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
将始终打印简短的用法字符串。
转储文件格式是 pgtopo_export
目录的压缩 tar 存档,该目录至少包含一个 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。这对于在解决命名冲突后加载图层或将图层链接到不同的拓扑(例如,起始拓扑的空间简化版本)很有用。