拓扑类型¶
本节列出了 oscargis Topology 安装的数据类型和域。域可以像对象类型一样用作函数或表列的返回对象。 域和类型之间的区别在于,域是绑定了检查约束的现有类型。
| 类型名 | 表示 |
|---|---|
| getfaceedges_returntype | 由序号和边号组成的复合类型。 |
| TopoGeometry | 表示拓扑定义的几何图形的复合类型。 |
| validatetopology_returntype | 复合类型,由错误消息以及表示错误位置的 id1 和 id2 组成。 |
| TopoElement | 一个由 2 个整数组成的数组,用于表示简单或分层拓扑几何的一个组件 |
| TopoElementArray | TopoElement 对象的数组 |
getfaceedges_returntype¶
由序列号和边号组成的复合类型。
CREATE TYPE TOPOLOGY.GETFACEEDGES_RETURNTYPE AS(
SEQUENCE INTEGER,
EDGE INTEGER
);
- sequence是一个整数:指的是在topology.topology表中定义的拓扑,该表定义了拓扑架构和srid。
- edge是一个整数:边的标识号。
TopoGeometry¶
一个复合类型,它引用了特定拓扑层中的拓扑几何图形,具有特定的类型和特定的标识符。TopoGeometry 的元素包括属性:topology_id、layer_id、id 整数和 type 整数。
CREATE TYPE TOPOLOGY.TOPOGEOMETRY AS(
TOPOLOGY_ID INTEGER,
LAYER_ID INTEGER,
ID INTEGER,
TYPEID INTEGER -- 1: [MULTI]POINT, 2: [MULTI]LINE,
-- 3: [MULTI]POLYGON, 4: COLLECTION
);
- topology_id 是一个整数:指的是在topology.topology 表中定义的拓扑,该表定义了拓扑架构和srid。
- layer_id (整数):拓扑几何所属的图层表中的layer_id。 topology_id 和 layer_id 的组合唯一地引用了拓扑图层表。
- id 是一个整数:id 是自动生成的序列号,唯一定义相应拓扑层中的主题几何图形。
- type输入 1 - 4 之间的整数,定义几何类型:1:[多]点、2:[多]线、3:[多]多边形、4:集合
validatetopology_returntype¶
由错误消息和两个整数组成的复合类型。ValidateTopology函数返回一组值来表示验证错误,并返回 id1 和 id2 来表示错误中涉及的拓扑对象的 id。
CREATE TYPE TOPOLOGY.VALIDATETOPOLOGY_RETURNTYPE AS(
ERROR varchar,
id1 integer,
id2 integer
);
- error 为 varchar:表示错误类型。当前的错误描述符有:重合节点、边交叉节点、边不简单、边结束节点几何形状不匹配、边起始节点几何形状不匹配、面重叠面、面内面,
- id1 是一个整数:表示错误的边/面/节点的标识符。
- id2 是一个整数:对于涉及 2 个对象的错误,表示次要边缘/或节点
TopoElement¶
- 一个由 2 个整数组成的数组,用于表示简单或分层TopoGeometry的一个组件。
- 对于简单的 TopoGeometry,数组的第一个元素表示拓扑基元的标识符,第二个元素表示其类型(1:节点、2:边、3:面)。 在分层 TopoGeometry 的情况下,数组的第一个元素表示子 TopoGeometry 的标识符,第二个元素表示其层标识符。
CREATE DOMAIN TOPOELEMENT AS integer[]
CONSTRAINT DIMENSIONS CHECK (
array_upper(VALUE, 2) IS NULL
AND array_upper(VALUE, 1) = 2
)CONSTRAINT lower_dimension CHECK (
array_lower(VALUE, 1) = 1
)CONSTRAINT type_range CHECK (
VALUE[2] > 0
);
TopoElementArray¶
- 1 个或多个 TopoElement 对象的数组,通常用于传递 TopoGeometry 对象的组件。
CREATE DOMAIN TOPOELEMENTARRAY AS integer[][]
CONSTRAINT DIMENSIONS CHECK (
array_upper(VALUE, 2) IS NOT NULL
AND array_upper(VALUE, 2) = 2
AND array_upper(VALUE, 3) IS NULL
);