postgresql支持的几何类型如下表:

名字 存储空间 描述 表现形式
point 16字节 平面上的点 (x,y)
line 32字节 直线 {A,B,C}
lseg 32字节 线段 ((x1,y1),(x2,y2))
box 32字节 矩形 ((x1,y1),(x2,y2))
path 16+16n字节 闭合路径 ((x1,y1),...)
path 16+16n字节 开放路径 [(x1,y1),...]
polygon 40+16n字节 多边形 ((x1,y1),...)
circle 24字节 <(x,y),r> 

示例:

test=# select point'(1,1)';
point
-------
(1,1)
(1 row) test=# select line'{1,1,1}';
line
---------
{1,1,1}
(1 row) test=# select lseg'(1,1),(2,2)';
lseg
---------------
[(1,1),(2,2)]
(1 row) test=# select box'(1,1),(2,2)';
box
-------------
(2,2),(1,1)
(1 row) test=# select path'(1,1),(2,2),(2,1)';
path
---------------------
((1,1),(2,2),(2,1))
(1 row) test=# select path'[(1,1),(2,2),(2,1)]';
path
---------------------
[(1,1),(2,2),(2,1)]
(1 row) test=# select polygon'((1,1),(2,2),(2,1))';
polygon
---------------------
((1,1),(2,2),(2,1))
(1 row) test=# select circle'<(0,0),1>';
circle
-----------
<(0,0),1>
(1 row)

操作符

操作符 描述 示例 结果
+ 平移 select box '((0,0),(1,1))' + point '(2.0,0)'; (3,1),(2,0)
- 平移 select box '((0,0),(1,1))' - point '(2.0,0)'; (-1,1),(-2,0)
* 伸缩/旋转 select box '((0,0),(1,1))' * point '(2.0,0)'; (2,2),(0,0)
/ 伸缩/旋转 select box '((0,0),(2,2))' / point '(2.0,0)'; (1,1),(0,0)
# 交点或者交面 select box'((1,-1),(-1,1))' # box'((1,1),(-1,-1))'; (1,1),(-1,-1)
# path或polygon的顶点数 select #path'((1,1),(2,2),(2,1))'; 3
@-@ 长度或周长 select @-@ path'((1,1),(2,2),(2,1))'; 3.41421356237309
@@ 中心 select @@ circle'<(0,0),1>'; (0,0)
## 第一个操作数和第二个操作数的最近点 select point '(0,0)' ## lseg '((2,0),(0,2))'; (1,1)
<-> 间距 select circle '<(0,0),1>' <-> circle '<(5,0),1>'; 3
&& 是否有重叠 select box '((0,0),(1,1))' && box '((0,0),(2,2))'; t
<< 是否严格在左 select circle '((0,0),1)' << circle '((5,0),1)'; t
>> 是否严格在右 select circle '((0,0),1)' >> circle '((5,0),1)'; f
&< 是否没有延伸到右边 select box '((0,0),(1,1))' &< box '((0,0),(2,2))'; t
&> 是否没有延伸到左边 select box '((0,0),(3,3))' &> box '((0,0),(2,2))'; t
<<| 是否严格在下 select box '((0,0),(3,3))' <<| box '((3,4),(5,5))'; t
|>> 是否严格在上 select box '((3,4),(5,5))' |>> box '((0,0),(3,3))'; t
&<| 是否没有延伸到上面 select box '((0,0),(1,1))' &<| box '((0,0),(2,2))'; t
|&> 是否没有延伸到下面 select box '((0,0),(3,3))' |&> box '((0,0),(2,2))'; t
<^ 是否低于(允许接触) select box '((0,0),(3,3))' <^ box '((3,3),(4,4))'; t
>^ 是否高于(允许接触) select box '((0,0),(3,3))' >^ box '((3,3),(4,4))'; f
?# 是否相交 select lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))'; t
?- 是否水平对齐 select ?- lseg '((-1,1),(1,1))'; t
?- 两边图形是否水平对齐 select point '(1,0)' ?- point '(0,0)'; t
?| 是否竖直对齐 select ?| lseg '((-1,0),(1,0))'; f
?| 两边图形是否竖直对齐 select point '(0,1)' ?| point '(0,0)'; t
?-| 是否垂直 select lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))'; t
?|| 是否平行 select lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))'; t
@> 是否包含 select circle '((0,0),2)' @> point '(1,1)'; t
<@ 是否包含于或在图形上 select point '(1,1)' <@ circle '((0,0),2)'; t
~= 是否相同 select polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'; t

函数

函数 返回值类型 描述 示例 结果
area(object) double precision 面积 select area(circle'((0,0),1)'); 3.14159265358979
center(object) point 中心 select center(box'(0,0),(1,1)'); (0.5,0.5)
diameter(circle) double precision 圆周长 select diameter(circle '((0,0),2.0)'); 4
height(box) double precision 矩形竖直高度 select height(box '((0,0),(1,1))'); 1
isclosed(path) boolean 是否为闭合路径 select isclosed(path '((0,0),(1,1),(2,0))'); t
isopen(path) boolean 是否为开放路径 select isopen(path '[(0,0),(1,1),(2,0)]'); t
length(object) double precision 长度 select length(path '((-1,0),(1,0))'); 4
npoints(path) int path中的顶点数 select npoints(path '[(0,0),(1,1),(2,0)]'); 3
npoints(polygon) int 多边形的顶点数 select npoints(polygon '((1,1),(0,0))'); 2
pclose(path) path 将开放path转换为闭合path select pclose(path '[(0,0),(1,1),(2,0)]');  ((0,0),(1,1),(2,0))
popen(path) path 将闭合path转换为开放path select popen(path '((0,0),(1,1),(2,0))'); [(0,0),(1,1),(2,0)]
radius(circle) double precision 圆半径 select radius(circle '((0,0),2.0)'); 2
width(box) double precision 矩形的水平长度 select width(box '((0,0),(1,1))'); 1

类型转换函数

函数 返回类型 描述 示例 结果
box(circle) box 圆形转矩形 select box(circle '((0,0),2.0)'); (1.41421356237309,1.41421356237309),(-1.41421356237309,-1.41421356237309)
box(point) box 点转空矩形 select box(point '(0,0)'); (0,0),(0,0)
box(pointpoint) box 点转矩形 select box(point '(0,0)', point '(1,1)'); (1,1),(0,0)
box(polygon) box 多边形转矩形 select box(polygon '((0,0),(1,1),(2,0))'); (2,1),(0,0)
bound_box(boxbox) box 将两个矩形转换成一个边界矩形 select bound_box(box '((0,0),(1,1))', box '((3,3),(4,4))'); (4,4),(0,0)
circle(box) circle 矩形转圆形 select circle(box '((0,0),(1,1))'); <(0.5,0.5),0.707106781186548>
circle(pointdouble precision) circle 圆心与半径转圆形 select circle(point '(0,0)', 2.0); <(0,0),2>
circle(polygon) circle 多边形转圆形 select circle(polygon '((0,0),(1,1),(2,0))'); <(1,0.333333333333333),0.924950591148529>
line(pointpoint) line 点转直线 select line(point '(-1,0)', point '(1,0)'); {0,-1,0}
lseg(box) lseg 矩形转线段 select lseg(box '((-1,0),(1,0))'); [(1,0),(-1,0)]
lseg(pointpoint) lseg 点转线段 select lseg(point '(-1,0)', point '(1,0)'); [(-1,0),(1,0)]
path(polygon) path 多边形转path select path(polygon '((0,0),(1,1),(2,0))'); ((0,0),(1,1),(2,0))
point(double precisiondouble precision) point select point(23.4, -44.5); (23.4,-44.5)
point(box) point 矩形转点 select point(box '((-1,0),(1,0))'); (0,0)
point(circle) point 圆心 select point(circle '((0,0),2.0)'); (0,0)
point(lseg) point 线段中心 select point(lseg '((-1,0),(1,0))'); (0,0)
point(polygon) point 多边形的中心 select point(polygon '((0,0),(1,1),(2,0))'); (1,0.333333333333333)
polygon(box) polygon 矩形转4点多边形 select polygon(box '((0,0),(1,1))'); ((0,0),(0,1),(1,1),(1,0))
polygon(circle) polygon 圆形转12点多边形 select polygon(circle '((0,0),2.0)');

((-2,0),(-1.73205080756888,1),(-1,1.73205080756888),(-1.22460635382238e-16,2),(1,1.73205080756888),(1.73205080756888,1),(2,2.4492127
0764475e-16),(1.73205080756888,-0.999999999999999),(1,-1.73205080756888),(3.67381906146713e-16,-2),(-0.999999999999999,-1.73205080756
888),(-1.73205080756888,-1))

polygon(nptscircle) polygon 圆形转npts点多边形 select polygon(12, circle '((0,0),2.0)');

((-2,0),(-1.73205080756888,1),(-1,1.73205080756888),(-1.22460635382238e-16,2),(1,1.73205080756888),(1.73205080756888,1),(2,2.4492127
0764475e-16),(1.73205080756888,-0.999999999999999),(1,-1.73205080756888),(3.67381906146713e-16,-2),(-0.999999999999999,-1.73205080756
888),(-1.73205080756888,-1))

polygon(path) polygon 将path转多边形 select polygon(path '((0,0),(1,1),(2,0))'); ((0,0),(1,1),(2,0))

原文链接:

https://www.postgresql.org/docs/9.6/static/functions-geometry.html

如果有兴趣学习地图相关的,大家可以去看一下postgis。

postgresql----几何类型和函数的更多相关文章

  1. PostgreSQL+PostGIS的使用 函数清单

    一. PostgreSQL与PostGIS的关系 PostgreSQL 是世界上技术最先进的开源数据库,其前身是1977年一个源于Berkeley名为Ingres的非关系型数据库,其项目领导人为Mic ...

  2. PostgreSQL的时间/日期函数使用

    PostgreSQL的常用时间函数使用整理如下: 一.获取系统时间函数 1.1 获取当前完整时间 select now(); david=# select now(); now ----------- ...

  3. [转] PostgreSQL的时间/日期函数使用

    PS:http://blog.csdn.net/love_rongrong/article/details/6712883 字符串模糊比较 日期类型的模糊查询是不能直接进行的,要先转换成字符串然后再查 ...

  4. PostgreSQL学习手册(五) 函数和操作符

    PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符:    常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符:    下面是Post ...

  5. [转帖]PostgreSQL的时间/日期函数使用

    PostgreSQL的时间/日期函数使用 https://www.cnblogs.com/mchina/archive/2013/04/15/3010418.html 这个博客的 文章目录比上一个好十 ...

  6. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  7. YUI的类型判断函数

    1.首先定义一个关于类型的对象,及相关变量 类型判断对象 ar L = Y.Lang || (Y.Lang = {}), STRING_PROTO = String.prototype, TOSTRI ...

  8. 函数的类型:函数也是类型 (*)->*

    函数的类型:函数也是类型 (*)->* 函数类型作为类型可以定义变量,使得函数变量具有可替代性,这个是高阶函数的编程基础. 使用函数的类型可以定义函数的变量,并用函数给这个变量赋值: 每一个函数 ...

  9. C++数组类型与函数类型

    之所以将C++的数组类型与函数类型拿到一块说,是因为两者在很多地方都一样. 首先,声明形式上类似: 数组类型:  type [num]                                 ...

随机推荐

  1. gulpjs

    http://www.cnblogs.com/2050/p/4198792.html   这篇文章很全面的讲解了gulpjs的使用 https://www.jianshu.com/p/9723ca2a ...

  2. Linux中用HttpWebRequest或WebClient访问远程https路径

    要想在Linux中用HttpWebRequest或WebClient访问远程https路径,需要作如下处理: 1,更新linux根证书(只需一次,在安装mono或安装jexus独立版后执行) sudo ...

  3. Linux下安装SQL Server 2016(连接篇SQL Server on linux)

    连接数据库 (1)设置防火墙 要连接数据库,首先要打开防火墙上1433端口,也就是,增加tcp端口1433到公共区域,并且永久生效. [root@localhost Desktop]# firewal ...

  4. web开发中的两把锁之数据库锁:(高并发--乐观锁、悲观锁)

    这篇文章讲了 1.同步异步概念(消去很多疑惑),同步就是一件事一件事的做:sychronized就是保证线程一个一个的执行. 2.我们需要明白,锁机制有两个层面,一种是代码层次上的,如Java中的同步 ...

  5. 【公众号转载】MyBatis拦截器原理探究

    MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis 允 ...

  6. 9102年了,你还在用for循环操作集合?

    本文首发于cdream的个人博客,点击获得更好的阅读体验! 欢迎转载,转载请注明出处. 前段时间公司书架多了一本<Java8 实战>,毕竟久闻lambda的大名,于是借来一阅.这一看,简直 ...

  7. Linux创建用户等操作

    转自: https://www.linuxidc.com/Linux/2017-06/144916.htm 与大家分享下Linux系统中创建用户.设置密码.修改用户.删除用户的命令,希望对你有所帮助. ...

  8. 0 or 1(hdu2608)数学题

    0 or 1 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. hadoop_批量命令脚本&同步文件脚本

    1.xcall.sh 批量命令脚本,例:xcall.sh jps ,查看hadoop101~ hadoop104的jps进程 注意:在执行命令的时候,若是提示没有这个命令,但是在本机又可以执行,记得在 ...

  10. [转]sqlserver转换为Mysql工具使用

    https://files.cnblogs.com/files/miantiaoandrew/mss2sql_v5-3.zip 1.首先下载工具,链接如上 2.解压出来,运行mss2sql.exe 3 ...