几何类型¶
神通数据库提供的几何类型如下表所示:
| 类型名 | 表示 | 描述 | 存储空间 |
|---|---|---|---|
| point | 平面上的点 | (x,y) | 16字节 |
| line | 无限长的线 | {A,B,C} | 32字节 |
| lseg | 有限线段 | ((x1,y1),(x2,y2)) | 32字节 |
| box | 矩形框 | ((x1,y1),(x2,y2)) | 32字节 |
| path | 封闭路径(类似于多边形) | ((x1,y1),...) | 16+16n字节 |
| path | 开放路径 | [(x1,y1),...] | 16+16n字节 |
| polygon | 多边形(类似于封闭路径) | ((x1,y1),...) | 40+16n字节 |
| circle | 圆 | <(x,y),r> (center point and radius) | 24字节 |
线¶
线由线性方程Ax + By + C = 0 表示,其中A和B都不为零。类型line 的值采用以下形式输入和输出:
| { A, B, C } |
另外,还可以用下列任一形式输入:
[ ( x1 , y1 ) , ( x2 , y2 ) ] ( ( x1 , y1 ) , ( x2 , y2 ) ) ( x1 , y1 ) , ( x2 , y2 )
|
其中 (x1,y1) 和 (x2,y2) 是线上不同的两点。
线段使用第一种语法输出。
方框¶
方框用其对角的点对表示。box类型的值使用下面的语法指定:
( ( x1 , y1 ) , ( x2 , y2 ) ) ( x1 , y1 ) , ( x2 , y2 ) x1 , y1 , x2 , y2 |
其中(x1,y1) 和 (x2,y2) 是方框的对角点。
方框使用第二种语法输出。
在输入时可以提供任意两个对角,但是值将根据需要被按顺序记录为右上角和左下角。
路径¶
路径由一系列连接的点组成。路径可能是开放的,也就是认为列表中第一个点和最后一个点没有被连接起来;也可能是封闭的,这时认为第一个和最后一个点被连接起来。
path类型的值用下面的语法声明:
[ ( x1 , y1 ) , ... , ( x2 , y2 ) ] ( ( x1 , y1 ) , ... , ( x2 , y2 ) ) ( x1 , y1 ) , ... , ( x2 , y2 ) ( x1 , y1 , ... , x2 , y2 ) x1 , y1 , ... , x2 , y2 |
其中的点是组成路径的线段的端点。方括弧([])表示一个开放的路径,圆括弧(())表示一个封闭的路径。如第三种到第五种语法所示,当最外面的圆括号被忽略时,路径将被假定为封闭。
路径的输出使用第一种或第二种语法。
多边形¶
多边形由一系列点代表(多边形的顶点)。多边形和封闭路径很像,但是存储方式不一样而且有自己的一套支持例程。
polygon类型的值用下列语法声明:
( ( x1 , y1 ) , ... , ( x2 , y2 ) ) ( x1 , y1 ) , ... , ( x2 , y2 ) ( x1 , y1 , ... , x2 , y2 ) x1 , y1 , ... , x2 , y2 |
其中的点是组成多边形边界的线段的端点。
多边形的输出使用第一种语法。
圆¶
圆由一个圆心和一个半径代表。circle类型的值用下面的语法指定:
< ( x1 , y1 ) , r > ( ( x1 , y1 ) , r ) ( x1 , y1 ) , r x1 , y1 , r |
其中(x,y)是圆心,而r是圆的半径。
圆的输出用第一种语法。
示例1: 使用几何类型
-- 清理环境
DROP TABLE tabGeometry CASCADE;
create table tabGeometry(point point, line line, lseg lseg, box box, path path, polygon polygon, circle circle);
-- insert语句插入几何类型数据
insert into tabGeometry values(point(1,1), line '((1,1),(2,2))', lseg '((1,1),(2,2))', box '((1,1),(2,2))', path'[(1,1),(1,2),(2,3)]', polygon'((1,1),(2,2))', circle '<(1,1),2>');
insert into tabGeometry values(point '1,1', line '[(1,1),(2,2)]', lseg '1,1,2,2', box '(1,1),(2,2)', path'(1,1,1,2,2,3)', polygon'(1,1),(2,2)', circle '((1,1),2)');
-- PL中使用几何类型
create or replace type typeGeometry as object(point point, line line, lseg lseg, box box, path path, polygon polygon, circle circle);
create or replace procedure procGeometry as
obj1 typeGeometry;
obj2 typeGeometry;
begin
obj1.point := '(1,1)';
obj1.line := '[(1,1),(2,2)]';
obj1.lseg := '[(1,1),(2,2)]';
obj1.box := '((1,1),(2,2))';
obj1.path := '[(1,1),(1,2),(2,3)]';
obj1.polygon := '((1,1),(2,2))';
obj1.circle := '<(1,1),2>';
obj2.point := point(1,1);
obj2.line := line (point(1,1), point(2,2));
obj2.lseg := lseg (point(1,1), point(2,2));
obj2.box := box (point (1,1), point(2,2));
obj2.path := path ('(1,1), (1,2), (2,3)');
obj2.polygon := '(1,1), (2,2)';
obj2.circle := '(1,1), 2';
insert into tabGeometry values(obj1.point, obj1.line, obj1.lseg, obj1.box, obj1.path, obj1.polygon, obj1.circle);
insert into tabGeometry values(obj2.point, obj2.line, obj2.lseg, obj2.box, obj2.path, obj2.polygon, obj2.circle);
end;
/
exec procGeometry;
select * from tabGeometry;
POINT(point) |LINE(line) |LSEG(lseg) |BOX(box) |PATH(path) |POLYGON(polygon) |CIRCLE(circle) |
--------------------------------------------------------------------------------------------------------------------------
(1,1) |{1,-1,0} |[(1,1),(2,2)] |(2,2),(1,1) |[(1,1),(1,2),(2,|((1,1),(2,2)) |<(1,1),2> |
| | | |3)] | | |
--------------------------------------------------------------------------------------------------------------------------
(1,1) |{1,-1,0} |[(1,1),(2,2)] |(2,2),(1,1) |((1,1),(1,2),(2,|((1,1),(2,2)) |<(1,1),2> |
| | | |3)) | | |
--------------------------------------------------------------------------------------------------------------------------
(1,1) |{1,-1,0} |[(1,1),(2,2)] |(2,2),(1,1) |[(1,1),(1,2),(2,|((1,1),(2,2)) |<(1,1),2> |
| | | |3)] | | |
--------------------------------------------------------------------------------------------------------------------------
(1,1) |{1,-1,0} |[(1,1),(2,2)] |(2,2),(1,1) |((1,1),(1,2),(2,|((1,1),(2,2)) |<(1,1),2> |
| | | |3)) | | |
总数目:4
drop table tabGeometry;