暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

PostgreSQL征途:数据类型之几何类型

0004.png

数据类型 别名 说明
point 平面上的几何点
line 平面上的无限线
lseg 平面上的线段
box 平面上的长方形盒子
path 平面上的几何路径
polygon 平面上的闭合几何路径
circle 在平面上画圈

0000.gif

  • point, 二维平面上的点,用(x, y)表示,x、y分别表示x轴、y轴的坐标值;
create table demo_point (name text, pt point); INSERT INTO demo_point (name, pt) VALUES ('p1', '(1.1,22.0)'); INSERT INTO demo_point (name, pt) VALUES ('p2', '(10.1,22.0)'); INSERT INTO demo_point (name, pt) VALUES ('p3', '(1.1,2.0)'); SELECT * FROM demo_point; SELECT * FROM demo_point WHERE pt ?- '(0,22)'; SELECT * FROM demo_point WHERE pt ?| '(1.1,0)'; # 操作符 # ?-:是否横向齐平(y坐标是否相同) # ?|:是否纵向齐平(x坐标是否相同)

pg0135.png

select '1,1'::point; select '(1,1)'::point;

pg0138.png

  • circle, 圆,用圆心和半径表示,如 x, y, r,其中(x,y)为圆心,r为半径。
CREATE table demo_circle (name text, cc circle); INSERT INTO demo_circle (name, cc) VALUES ('c1', '1,2,2'); INSERT INTO demo_circle (name, cc) VALUES ('c1', '10.2,-15,10'); SELECT * FROM demo_circle WHERE point '(1,2)' <@ cc; SELECT * FROM demo_circle WHERE cc @> point '(1,2)'; SELECT * FROM demo_circle WHERE cc << circle '10,6,3'; SELECT * FROM demo_circle WHERE cc >> circle '0,0,0.1'; SELECT circle '((0,0),1)' <-> circle '((5,0),1)'; # 操作符 # <@ 点是否位于圆内 # @> 圆是否包含点 # << 圆是否严格在圆的左侧 # >> 圆是否严格在圆的右侧 # <-> 两个圆之间的距离

pg0136.png

select '1,1,5'::circle; select '((1,1),5)'::circle; select '<(1,1),5>'::circle; select circle'1,1,5'; select circle'((1,1),5)'; select circle'<(1,1),5>';

pg0136.png

  • line, 线,在坐标系上用Ax + By + C = 0表示,也就是一个二元一次方程,A、B表示斜率,C表示偏移量。
CREATE TABLE demo_line (name text, info line); INSERT INTO demo_line VALUES ('c1', '(0,1), (2,3)'); INSERT INTO demo_line VALUES ('c2', '(-5,6), (3,7)'); SELECT * FROM demo_line; SELECT * FROM demo_line WHERE info ?|| '{1,-1,10}'; SELECT * FROM demo_line WHERE info ?-| '{1,1,10}'; # 操作符 # ?|| 两条线是否平行 # ?-| 两条线是否垂直

pg0137.png

select '1,1,2,2'::line; select '(1,1),(2,2)'::line; select '((1,1),(2,2))'::line; select '[(1,1),(2,2)]'::line; select line'1,1,2,2'; select line'(1,1),(2,2)'; select line'((1,1),(2,2))'; select line'[(1,1),(2,2)]';

pg0140.png

  • lseg, 线段,用一对线段的端点来表示。
select '1,1,2,2'::lseg; select '(1,1),(2,2)'::lseg; select '((1,1),(2,2))'::lseg; select '[(1,1),(2,2)]'::lseg; select lseg'1,1,2,2'; select lseg'(1,1),(2,2)'; select lseg'((1,1),(2,2))'; select lseg'[(1,1),(2,2)]';

pg0141.png

  • box, 矩形,用其对角的点对表示。
    • 矩形类型不能使用中括号[]。
select '1,1,2,2'::box; select '(1,1),(2,2)'::box; select '((1,1),(2,2))'::box; select box'1,1,2,2'; select box'(1,1),(2,2)'; select box'((1,1),(2,2))';

pg0142.png

  • path, 路径,路径由一系列连接的点组成。路径可能是开放的,也就是认为列表中第一个点和最后一个点没有被连接起来;也可能是封闭的,这时认为第一个和最后一个点被连接起来。
    • 在路径中,使用方括号[]表示开放路径,而圆括号()表示闭合路径。闭合路径指最后一点与第一个点是连接在一起的。
select '1,1,2,2,3,3,4,4'::path; select '(1,1),(2,2),(3,3),(4,4)'::path; select '((1,1),(2,2),(3,3),(4,4))'::path; select path'1,1,2,2,3,3,4,4'; select path'(1,1),(2,2),(3,3),(4,4)'; select path'((1,1),(2,2),(3,3),(4,4))'; select '[(1,1),(2,2),(3,3),(4,4)]'::path; select path'[(1,1),(2,2),(3,3),(4,4)]';

pg0143.png

  • polygon, 多边形,由一系列点代表(多边形的顶点)。
    • 多边形类型不能使用中括号[]。
select '1,1,2,2,3,3,4,4'::polygon; select '(1,1),(2,2),(3,3),(4,4)'::polygon; select '((1,1),(2,2),(3,3),(4,4))'::polygon; select polygon'1,1,2,2,3,3,4,4'; select polygon'(1,1),(2,2),(3,3),(4,4)'; select polygon'((1,1),(2,2),(3,3),(4,4))';

pg0144.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论