PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.11. 几何函数和操作符

简介: 9.11. 几何函数和操作符 几何类型point、box、 lseg、line、path、 polygon和circle有一大堆本地支持函数和操作符,如表 9.33、表 9.34和表 9.35中所示。

9.11. 几何函数和操作符

几何类型pointbox、 lseglinepath、 polygoncircle有一大堆本地支持函数和操作符,如表 9.33表 9.34表 9.35中所示。

小心

请注意same as操作符(~=),表示pointboxpolygoncircle类型的一般相等概念。这些类型中的某些还有一个=操作符,但是=只比较相同的面积。其它的标量比较操作符 (<=等等)也是为这些类型比较面积。

表 9.33. 几何操作符

操作符 描述 例子
+ 平移 box '((0,0),(1,1))' + point '(2.0,0)'
- 平移 box '((0,0),(1,1))' - point '(2.0,0)'
* 缩放/旋转 box '((0,0),(1,1))' * point '(2.0,0)'
/ 缩放/旋转 box '((0,0),(2,2))' / point '(2.0,0)'
# 相交的点或方框 box '((1,-1),(-1,1))' # box '((1,1),(-2,-2))'
# 路径或多边形中的点数 # path '((1,0),(0,1),(-1,0))'
@-@ 长度或周长 @-@ path '((0,0),(1,0))'
@@ 中心 @@ circle '((0,0),10)'
## 第二个操作数上最接近第一个操作数的点 point '(0,0)' ## lseg '((2,0),(0,2))'
<-> 距离 circle '((0,0),1)' <-> circle '((5,0),1)'
&& 是否重叠?(只要有一个公共点这就为真) box '((0,0),(1,1))' && box '((0,0),(2,2))'
<< 是否严格地在左侧? circle '((0,0),1)' << circle '((5,0),1)'
>> 是否严格地在右侧? circle '((5,0),1)' >> circle '((0,0),1)'
&< 没有延展到右边? box '((0,0),(1,1))' &< box '((0,0),(2,2))'
&> 没有延展到左边? box '((0,0),(3,3))' &> box '((0,0),(2,2))'
<<| 严格在下? box '((0,0),(3,3))' <<| box '((3,4),(5,5))'
|>> 严格在上? box '((3,4),(5,5))' |>> box '((0,0),(3,3))'
&<| 没有延展到上面? box '((0,0),(1,1))' &<| box '((0,0),(2,2))'
|&> 没有延展到下面? box '((0,0),(3,3))' |&> box '((0,0),(2,2))'
<^ 在下面(允许相切)? circle '((0,0),1)' <^ circle '((0,5),1)'
>^ 在上面(允许相切)? circle '((0,5),1)' >^ circle '((0,0),1)'
?# 相交? lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))'
?- 水平? ?- lseg '((-1,0),(1,0))'
?- 水平对齐? point '(1,0)' ?- point '(0,0)'
?| 垂直? ?| lseg '((-1,0),(1,0))'
?| 垂直对齐? point '(0,1)' ?| point '(0,0)'
?-| 相互垂直? lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))'
?|| 平行? lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))'
@> 包含? circle '((0,0),2)' @> point '(1,1)'
<@ 包含在内或在上? point '(1,1)' <@ circle '((0,0),2)'
~= 相同? polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'

注意

PostgreSQL之前,包含操作符@><@被分别称为~@。 这些名字仍然可以使用,但是已被废除并且最终将被移除。

表 9.34. 几何函数

函数 返回类型 描述 例子
area(object) double precision 面积 area(box '((0,0),(1,1))')
center(object) point 中心 center(box '((0,0),(1,2))')
diameter(circle) double precision 圆的直径 diameter(circle '((0,0),2.0)')
height(box) double precision 方框的垂直尺寸 height(box '((0,0),(1,1))')
isclosed(path) boolean 一个封闭路径? isclosed(path '((0,0),(1,1),(2,0))')
isopen(path) boolean 一个开放路径? isopen(path '[(0,0),(1,1),(2,0)]')
length(object) double precision 长度 length(path '((-1,0),(1,0))')
npoints(path) int 点数 npoints(path '[(0,0),(1,1),(2,0)]')
npoints(polygon) int 点数 npoints(polygon '((1,1),(0,0))')
pclose(path) path 将路径转换成封闭的 pclose(path '[(0,0),(1,1),(2,0)]')
popen(path) path 将路径转换成开放 popen(path '((0,0),(1,1),(2,0))')
radius(circle) double precision 圆的半径 radius(circle '((0,0),2.0)')
width(box) double precision 方框的水平尺寸 width(box '((0,0),(1,1))')

表 9.35. 几何类型转换函数

函数 返回类型 描述 例子
box(circle) box 圆到方框 box(circle '((0,0),2.0)')
box(point) box 点到空方框 box(point '(0,0)')
box(pointpoint) box 点到方框 box(point '(0,0)', point '(1,1)')
box(polygon) box 多边形到方框 box(polygon '((0,0),(1,1),(2,0))')
bound_box(boxbox) box 盒到边界框 bound_box(box '((0,0),(1,1))', box '((3,3),(4,4))')
circle(box) circle 方框到圆 circle(box '((0,0),(1,1))')
circle(pointdouble precision) circle 中心和半径到圆 circle(point '(0,0)', 2.0)
circle(polygon) circle 多边形到圆 circle(polygon '((0,0),(1,1),(2,0))')
line(pointpoint) line 点到线 line(point '(-1,0)', point '(1,0)')
lseg(box) lseg 方框对角线到线段 lseg(box '((-1,0),(1,0))')
lseg(pointpoint) lseg 点到线段 lseg(point '(-1,0)', point '(1,0)')
path(polygon) path 多边形到路径 path(polygon '((0,0),(1,1),(2,0))')
point(double precisiondouble precision) point 构造点 point(23.4, -44.5)
point(box) point 方框的中心 point(box '((-1,0),(1,0))')
point(circle) point 圆的中心 point(circle '((0,0),2.0)')
point(lseg) point 线段的中心 point(lseg '((-1,0),(1,0))')
point(polygon) point 多边形的中心 point(polygon '((0,0),(1,1),(2,0))')
polygon(box) polygon 方框到4点多边形 polygon(box '((0,0),(1,1))')
polygon(circle) polygon 圆到12点多边形 polygon(circle '((0,0),2.0)')
polygon(nptscircle) polygon 点到npts点多边形 polygon(12, circle '((0,0),2.0)')
polygon(path) polygon 路径到多边形 polygon(path '((0,0),(1,1),(2,0))')

我们可以把一个point的两个组成数字当作具有索引 0 和 1 的数组访问。例如,如果t.p是一个point列,那么SELECT p[0] FROM t检索 X 座标而 UPDATE t SET p[1] = ...改变 Y 座标。同样,box或者lseg类型的值可以当作两个point值的数组值看待。

函数area可以用于类型boxcirclepatharea函数操作path数据类型的时候, 只有在path的点没有交叉的情况下才可用。例如,path '((0,0),(0,1),(2,1),(2,2),(1,2),(1,0),(0,0))'::PATH是不行的, 而下面的视觉上相同的 path '((0,0),(0,1),(1,1),(1,2),(2,2),(2,1),(1,1),(1,0),(0,0))'::PATH就可以。 如果交叉和不交叉的path概念让你疑惑,那么把上面两个path都画在一张图纸上,你就明白了。

本文转自PostgreSQL中文社区,原文链接:9.11. 几何函数和操作符

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1041 152
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
817 156
|
8月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
936 213
|
5月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
6月前
|
SQL 人工智能 数据挖掘
如何在`score`表中正确使用`COUNT`和`AVG`函数?SQL聚合函数COUNT与AVG使用指南
本文三桥君通过score表实例解析SQL聚合函数COUNT和AVG的常见用法。详解COUNT(studentNo)、COUNT(score)、COUNT()的区别,以及AVG函数对数值/字符型字段的不同处理,特别指出AVG()是无效语法。实战部分提供6个典型查询案例及结果,包含创建表、插入数据的完整SQL代码。产品专家三桥君强调正确理解函数特性(如空值处理、字段类型限制)对数据分析的重要性,帮助开发者避免常见误区,提升查询效率。
380 0
|
8月前
|
SQL 关系型数据库 PostgreSQL
CTE vs 子查询:深入拆解PostgreSQL复杂SQL的隐藏性能差异
本文深入探讨了PostgreSQL中CTE(公共表表达式)与子查询的选择对SQL性能的影响。通过分析两者底层机制,揭示CTE的物化特性及子查询的优化融合优势,并结合多场景案例对比执行效率。最终给出决策指南,帮助开发者根据数据量、引用次数和复杂度选择最优方案,同时提供高级优化技巧和版本演进建议,助力SQL性能调优。
872 1
|
SQL 自然语言处理 Java
PostgreSQL SQL语法(一):词法结构
本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权。 SQL输入由一个命令序列组成。一个命令由一个记号的序列构成,并由一个分号(";")终结。输入流的末端也会标志一个命令的结束。
2261 0
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
616 13
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
447 9

推荐镜像

更多