5. 拓扑编辑器
5.1. ST_AddIsoNode
ST_AddIsoNode — 将一个隔离节点添加到拓扑中的一个面,并返回新节点的节点id。 如果face为空,则仍然创建节点。
5.1.1. 概要
integer ST_AddIsoNode(varchar atopology, integer aface, geometry apoint);
5.1.2. 描述
将一个点位置为point的隔离节点添加到一个现有的面,并将faceid为face的面添加到一个拓扑拓扑结构中,并返回新节点的节点id。
如果点几何的空间参考系统(srid)与拓扑不相同,该点不是点几何,该点为空,或该点与现有边相交(甚至在边界处),则抛出异常。 如果该点已经作为节点存在,则抛出异常。
如果face不为null且点不在face内,则抛出异常。
5.2. ST_AddIsoEdge
ST_AddIsoEdge -将一个由几何alinestring定义的隔离边缘添加到连接两个现有隔离节点阳极和另一个节点的拓扑中,并返回新边缘的边缘id。
5.2.1. 概要
integer ST_AddIsoEdge(varchar atopology, integer anode, integer anothernode, geometry alinestring);
5.2.2. 描述
将由几何alinestring定义的隔离边添加到连接两个现有隔离节点阳极和另一个节点的拓扑中,并返回新边的边缘id。
如果空间引用系统(srid) alinestring几何拓扑是不一样的,任何输入参数是null,或节点中包含一个以上的脸,或节点开始或结束节点的现有优势,那么就会抛出一个异常。
如果alinestring不在阳极和另一个节点所属的面内,则抛出异常。
如果阳极和另一个节点不是alinestring的起始点和结束点,则抛出异常。
5.3. ST_AddEdgeNewFaces
ST_AddEdgeNewFaces — 添加一条新边,如果这样做,它将分割一个面,删除原面,并用两个新面替换它。
5.3.1. 概要
integer ST_AddEdgeNewFaces(varchar atopology, integer anode, integer anothernode, geometry acurve);
5.3.2. 描述
添加一条新边,如果这样做,它分裂一个面,删除原来的面,并替换为两个新面。 返回新添加的边的id。
相应地更新所有现有的连接边和关系。
如果任何参数为空,则给定的节点是未知的(必须已经存在于拓扑模式的节点表中),曲线不是LINESTRING,阳极和另一个节点不是曲线的起点和终点,则抛出一个错误。
如果曲线几何的空间参考系统(srid)与拓扑不相同,则抛出异常。
5.4. ST_AddEdgeModFace
ST_AddEdgeModFace — 添加一个新边,如果这样做,它将分裂一个面,修改原面并添加一个新面。
5.4.1. 概要
integer ST_AddEdgeModFace(varchar atopology, integer anode, integer anothernode, geometry acurve);
5.4.2. 描述
添加一条新边,如果这样做分裂面,修改原面并添加一个新面。
返回新添加的边的id。
相应地更新所有现有的连接边和关系。
如果任何参数为空,则给定的节点是未知的(必须已经存在于拓扑模式的节点表中),曲线不是LINESTRING,阳极和另一个节点不是曲线的起点和终点,则抛出一个错误。
如果曲线几何的空间参考系统(srid)与拓扑不相同,则抛出异常。
5.5. ST_RemEdgeNewFace
ST_RemEdgeNewFace -删除一个边,如果被删除的边分隔两个面,删除原来的面,并用一个新的面替换它们。
5.5.1. 概要
integer ST_RemEdgeNewFace(varchar atopology, integer anedge);
5.5.2. 描述
删除一条边,如果被删除的边分隔两个面,则删除原来的面,并用一个新面替换它们。
返回新创建的人脸的id,如果没有新创建的人脸,返回NULL。 当被移除的边缘悬挂或与宇宙面隔离或限制在一起时,不会产生新的面孔(可能会使宇宙涌向另一边的面孔)。
相应地更新所有现有的连接边和关系。
拒绝删除参与现有TopoGeometry定义的边。 拒绝治疗两个面,如果任何TopoGeometry是由其中一个定义(而不是另一个)。
如果任何参数为空,则给定的边是未知的(必须已经存在于拓扑模式的边表中),则拓扑名称无效,然后抛出一个错误。
5.6. ST_RemEdgeModFace
ST_RemEdgeModFace — 删除一条边,如果删除的边分隔两个面,删除其中一个并修改另一个以占用两个面的空间。
5.6.1. 概要
integer ST_RemEdgeModFace(varchar atopology, integer anedge);
5.6.2. 描述
删除一条边,如果被删除的边分隔两个面,删除其中一个并修改另一个以占用两个面的空间。 优先保持面在右边,以保持对称与ST_AddEdgeModFace也保持它。 返回在被移除的边缘处保留的面的id。
相应地更新所有现有的连接边和关系。
拒绝删除参与现有拓扑几何体定义的边。 拒绝治疗两个面,如果任何TopoGeometry是由其中一个定义(而不是另一个)。
如果任何参数为空,则给定的边是未知的(必须已经存在于拓扑模式的边表中),则拓扑名称无效,然后抛出一个错误。
5.7. ST_ChangeEdgeGeom
ST_ChangeEdgeGeom -改变边缘的形状而不影响拓扑结构。
5.7.1. 概要
integer ST_ChangeEdgeGeom(varchar atopology, integer anedge, geometry acurve);
5.7.2. 描述
更改边的形状而不影响拓扑结构。
如果任何参数为空,则表示给定的边在拓扑模式的边表中不存在,曲线不是LINESTRING,阳极和另一个节点不是曲线的起始点和端点,否则修改将改变底层拓扑,然后抛出一个错误。
如果曲线几何的空间参考系统(srid)与拓扑不相同,则抛出异常。
如果新的曲线不简单,则抛出一个错误。
如果将边缘从旧位置移动到新位置会碰到障碍物,那么就会抛出一个错误。
5.8. ST_ModEdgeSplit
ST_ModEdgeSplit -通过在现有的边上创建一个新节点来分割边,修改原始边并添加一个新边。
5.8.1. 概要
integer ST_ModEdgeSplit(varchar atopology, integer anedge, geometry apoint);
5.8.2. 描述
通过在现有边上创建新节点、修改原始边并添加新边来拆分边。 相应地更新所有现有的连接边和关系。 返回新添加节点的标识符。
5.8.3. 样例
-- 添加一条边
SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227592 893910, 227600 893910)', 26986) ) As edgeid;
-- edgeid--
3
-- 分割边缘
SELECT topology.ST_ModEdgeSplit('ma_topo', 3, ST_SetSRID(ST_Point(227594,893910),26986) ) As node_id;
| node_id |
|---|
| 7 |
5.9. ST_ModEdgeHeal
ST_ModEdgeHeal - 通过删除连接它们的节点来修复两条边,修改第一条边并删除第二条边。 返回被删除节点的id。
5.9.1. 概要
int ST_ModEdgeHeal(varchar atopology, integer anedge, integer anotheredge);
5.9.2. 描述
通过删除连接它们的节点来修复两条边,修改第一条边并删除第二条边。 返回被删除节点的id。 相应地更新所有现有的连接边和关系。
5.10. ST_NewEdgeHeal
ST_NewEdgeHeal - 通过删除连接它们的节点来修复两条边,删除两条边,然后用一条方向与第一条边相同的边替换它们。
5.10.1. 概要
int ST_NewEdgeHeal(varchar atopology, integer anedge, integer anotheredge);
5.10.2. 描述
通过删除连接两条边的节点来修复两条边,删除两条边,然后用一条方向与第一条边相同的边替换它们。 返回新边的id,替换已愈合的边。 相应地更新所有现有的连接边和关系。
5.11. ST_MoveIsoNode
ST_MoveIsoNode — 将拓扑中的隔离节点从一点移动到另一点。 如果新点几何作为节点存在,则抛出错误。 返回移动的描述。
5.11.1. 概要
text ST_MoveIsoNode(varchar atopology, integer anedge, geometry apoint);
5.11.2. 描述
将拓扑中的隔离节点从一点移动到另一点。 如果新点几何作为节点存在,则抛出错误。
如果任何参数为空,这个点不是一个点,现有的节点不是孤立的(是现有边的起始点或结束点),新的节点位置与现有边相交(即使在结束点),然后抛出一个异常。
如果点几何的空间参考系统(srid)与拓扑不相同,则抛出异常。
5.11.3. 样例
-- 添加一个孤立的无面节点
SELECT topology.ST_AddIsoNode('ma_topo', NULL, ST_GeomFromText('POINT(227579 893916)', 26986) ) As nodeid;
-- 移动新节点
SELECT topology.ST_MoveIsoNode('ma_topo', 7, ST_GeomFromText('POINT(227579.5 893916.5)', 26986) ) As descrip;
| nodeid |
|---|
| 7 |
| descrip |
|---|
| Isolated Node 7 moved to location 227579.5,893916.5 |
5.12. ST_NewEdgesSplit
ST_NewEdgesSplit - 通过在现有边上创建一个新节点来分割一条边,删除原始边,并用两条新边替换它。 返回创建用于连接新边的新节点的id。
5.12.1. 概要
integer ST_NewEdgesSplit(varchar atopology, integer anedge, geometry apoint);
5.12.2. 描述
将边缘id为anedge的边拆分,方法是沿着当前边创建一个新的节点,节点位置为point point,删除原边,并用两条新边替换它。 返回创建用于连接新边的新节点的id。 相应地更新所有现有的连接边和关系。
如果空间引用系统(srid)的点几何值不一样的拓扑,a点不是点几何,关键是null,关键节点已经存在,不符合现有的边缘或边缘点不是在边缘然后抛出异常。
5.12.3. 样例
-- 添加一个边缘
SELECT topology.AddEdge('ma_topo', ST_GeomFromText('LINESTRING(227575 893917,227592 893900)', 26986) ) As edgeid;
-- result
edgeid
---
2
-- 分割边缘
SELECT topology.ST_NewEdgesSplit('ma_topo', 2, ST_GeomFromText('POINT(227578.5 893913.5)', 26986) ) As newnodeid;
newnodeid
---
6
5.13. ST_RemoveIsoNode
ST_RemoveIsoNode — 删除一个隔离节点并返回操作描述。 如果节点没有被隔离(是边缘的开始或结束),则抛出异常。
5.13.1. 概要
text ST_RemoveIsoNode(varchar atopology, integer anode);
5.13.2. 描述
移除孤立节点并返回操作说明。 如果节点没有被隔离(是边缘的开始或结束),则抛出异常。
5.13.3. 样例
-- 移除一个孤立的无面节点
SELECT topology.ST_RemoveIsoNode('ma_topo', 7 ) As result;
| result |
|---|
| Isolated node 7 removed |
5.14. ST_RemoveIsoEdge
ST_RemoveIsoEdge — 删除孤立的边缘并返回操作的描述。 如果边缘没有被隔离,则抛出异常。
5.14.1. 概要
text ST_RemoveIsoEdge(varchar atopology, integer anedge);
5.14.2. 描述
删除孤立的边缘并返回操作的描述。 如果边缘没有被隔离,则抛出异常。
5.14.3. 样例
-- 移除一个孤立的无面节点
SELECT topology.ST_RemoveIsoNode('ma_topo', 7 ) As result;
| result |
|---|
| Isolated node 7 removed |
