postgresql----几何类型和函数
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(point, point) | 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(box, box) | 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(point, double 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(point, point) | 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(point, point) | 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 precision, double 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 |
| polygon(npts, circle) | 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 |
| 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----几何类型和函数的更多相关文章
- PostgreSQL+PostGIS的使用 函数清单
一. PostgreSQL与PostGIS的关系 PostgreSQL 是世界上技术最先进的开源数据库,其前身是1977年一个源于Berkeley名为Ingres的非关系型数据库,其项目领导人为Mic ...
- PostgreSQL的时间/日期函数使用
PostgreSQL的常用时间函数使用整理如下: 一.获取系统时间函数 1.1 获取当前完整时间 select now(); david=# select now(); now ----------- ...
- [转] PostgreSQL的时间/日期函数使用
PS:http://blog.csdn.net/love_rongrong/article/details/6712883 字符串模糊比较 日期类型的模糊查询是不能直接进行的,要先转换成字符串然后再查 ...
- PostgreSQL学习手册(五) 函数和操作符
PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符: 常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符: 下面是Post ...
- [转帖]PostgreSQL的时间/日期函数使用
PostgreSQL的时间/日期函数使用 https://www.cnblogs.com/mchina/archive/2013/04/15/3010418.html 这个博客的 文章目录比上一个好十 ...
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...
- YUI的类型判断函数
1.首先定义一个关于类型的对象,及相关变量 类型判断对象 ar L = Y.Lang || (Y.Lang = {}), STRING_PROTO = String.prototype, TOSTRI ...
- 函数的类型:函数也是类型 (*)->*
函数的类型:函数也是类型 (*)->* 函数类型作为类型可以定义变量,使得函数变量具有可替代性,这个是高阶函数的编程基础. 使用函数的类型可以定义函数的变量,并用函数给这个变量赋值: 每一个函数 ...
- C++数组类型与函数类型
之所以将C++的数组类型与函数类型拿到一块说,是因为两者在很多地方都一样. 首先,声明形式上类似: 数组类型: type [num] ...
随机推荐
- Java JDBC的基础知识(一)
一.为什么引入JDBC 在学习JDBC之前,抛开它的概念,我先按照我的理解解释一下,为什么要引入JDBC.在我看来,引入JDBC跟我之前学过的引入JVM(Java虚拟机)有些相似之处.当然,关于JVM ...
- 最新版本Bootstrap样式很奇怪(4.1版本)
下载最新版4.1版的Bootstrap编译好的CSS,引入的样式及其怪异. 这种情况重新下载3.3.7低版本就可以了.
- POJ3616(KB12-R dp)
Milking Time Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9459 Accepted: 3935 De ...
- Flask中request参数
首先要明确一件事,Request这是个对象,不管使用PHP还是python还是什么java语言,虽然request这个对象可能叫的名字不一样,(在其他语言中可能叫什么HttpRequest),但是原理 ...
- 排序算法(8)--Merge Sorting--归并排序--Merge sort--归并排序
1.基本思想 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个子序 ...
- redis 单节点安装
wget http://download.redis.io/releases/redis-5.0.3.tar.gz 1.下载解压 2.make编译 3.提示没有安装安装gcc,安装gcc yum in ...
- oop(Object Oriented Programming)
嗯,昨天忙了一天没来及发,过年啊,打扫啊,什么搽窗户啊,拖地啊,整理柜子啊,什么乱七八糟的都有,就是一个字,忙. 好了,废话也不多说,把自己学到的放上来吧.嗯,说什么好呢,就说原型链啊 原型对象 每个 ...
- HTML5之美
如今大热的HTML5到底美在哪里?HTML5到底能为实际的移动开发带来哪些改变?来自阿里云云手机服务运营部的前端开发工程师正邪 (廖健)分享了他眼中的HTML5之美,主要讲诉HTML5的常见原理并从C ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 8
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 7------------------- --触发器str_trigge ...
- maven一模块字段调用另一个模块数据生成下拉框
店铺运营数据录入表实现的下拉框实现 从片区管理中提取分区数据,在招商管理(MIS)模块中获取并以下拉框的形式展现 ctrl类: 1.首先在ctrl类注入需提取另一模块字段的serviceclient接 ...