其他函数

ST_Accum

ST_Accum — 聚合函数,返回输入几何对象形成的数组。

语法

st_accum ::=

参数

geomfield

geometry set类型。

返回值

返回值为geometry[]类型。

示例

drop  TABLE cluster_inputs;
CREATE TABLE cluster_inputs (id int, geom geometry);
INSERT INTO cluster_inputs VALUES
(1, 'LINESTRING (0 0, 1 1)'),
(2, 'LINESTRING (5 5, 4 4)'),
(3, NULL),
(4, 'LINESTRING (0 0, -1 -1)'),
(5, 'LINESTRING (6 6, 7 7)'),
(6, 'POLYGON EMPTY'),
(7, 'POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0))');


SELECT 't1', ST_Accum(geom) FROM cluster_inputs;
?COLUMN?(varchar)      |ST_ACCUM(_GEOMETRY)      |
------------------------------------------------
t1                     |{010200000002000000000000|
                       |000000000000000000000000|
                       |00000000000000F03F000000|
                       |000000F03F:0102000000020|
                       |000000000000000001440000|
                       |000000000144000000000000|
                       |010400000000000001040:NU|
                       |LL:010200000002000000000|
                       |000000000000000000000000|
                       |00000000000000000F0BF000|
                       |000000000F0BF:0102000000|
                       |020000000000000000001840|
                       |000000000000184000000000|
                       |00001C400000000000001C40|
                       |:010300000000000000:0103|
                       |000000010000000500000000|
                       |000000000000000000000000|
                       |000000000000000000104000|
                       |000000000000000000000000|
                       |001040000000000000104000|
                       |000000000000000000000000|
                       |001040000000000000000000|
                       |00000000000000}          |
总数目:1
drop TABLE cluster_inputs;

Box2D

Box2D — 返回一个几何对象的最大扩展BOX2D对象。

语法

box2d ::=

参数

geomA

geometry类型。

返回值

返回值为box2d类型。

示例

SELECT Box2D(ST_GeomFromText('LINESTRING(1 2, 3 4, 5 6)'));
BOX2D(BOX2D)      |
------------------
BOX(1 2,5 6)      |
总数目:1

SELECT Box2D(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));
BOX2D(BOX2D)      |
------------------
BOX(220186.9951218|
92 150406,220288.|
248780547 150506.|
126829327)        |
总数目:1

Box3D

Box3D — 返回一个几何对象的最大扩展BOX3D对象。

语法

box3d ::=

参数

geomA

geometry类型。

返回值

返回值为box3d类型。

示例

SELECT Box3D(ST_GeomFromEWKT('LINESTRING(1 2 3, 3 4 5, 5 6 5)'));
BOX3D(BOX3D)      |
------------------
BOX3D(1 2 3,5 6 5)|
总数目:1

SELECT Box3D(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 1,220227 150406 1)'));
BOX3D(BOX3D)      |
------------------
BOX3D(220186.99512|
1892 150406 1,220|
288.248780547 150|
506.126829327 1)  |
总数目:1

ST_Expand

ST_Expand — 返回从输入几何体的边界框向所有方向展开的边界框。输出对象的坐标精度使用双精度

语法

st_expand ::=

st_expand ::=

st_expand ::=

参数

geom

geometry类型。

dx dy dz dm

float类型。dz,dm 默认值为0。

units_to_expand

float类型。

box2

box2d类型。

box3

box3d类型。

返回值

形式一返回值为geometry;形式一返回值为box2d;形式一返回值为box3d类型。

根据输入几何对象的bounding box返回一个向各个方向扩展的bounding box,输出对象的坐标精度使用双精精度。对于距离查询或者bounding box 查询很有用的,因为它可以添加一个索引来对进行查询过滤。

该函数有3种形式。输入对象是geometry类型的,会返回一个表示bounding box的POLYGON类型对象,是最常用的一种形式。

函数ST_Expand 在概念上和函数ST_Buffer 很类似,但区别是对几何对象进行各个方向扩展时候,函数ST_Expand 是扩展bounding box所对应的x,y,z坐标一个指定的单位。单位按照SRID所对应空间参考系所规定的单位。

示例

SELECT CAST(ST_Expand(ST_GeomFromText('LINESTRING(2312980 110676,2312923 110701,2312892 110714)', 2163),10) As box2d);
ST_EXPAND(BOX2D)      |
----------------------
BOX(2312882 110666,231|
2990 110724)          |
总数目:1

ST_Extent

ST_Extent — 一个返回包含多个geometry对象的bounding box的聚集函数。

语法

st_extent ::=

参数

geomfield

geometry set类型。

返回值

返回值为box2d类型。

一个返回包含多个geometry对象的bounding box的聚集函数。该函数是聚合函数意味着,对于多行的数据,该函数的作用方式会像SQL里面的聚合函数SUM() and AVG() 一样。

由于该函数返回bounding box,空间单位以SRID对应的参考系所规定的单位。ST_Extent 函数对应Oracle Oracle Spatial/Locator 中的函数SDO_AGGR_MBR。

注解

ST_Extent 函数返回的bounding box值包含x和y坐标,即便输入对象是(x,y,z)形式的坐标。如果想返回x,y,z形式的3维坐标,使用函数ST_3DExtent。

示例

CREATE TABLE myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(5 6 , 3 4)',4326) );
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))',4326));

SELECT ST_Extent(geom) as bextent FROM myspatial_table;
BEXTENT(BOX2D)      |
--------------------
BOX(0 0,5 6)        |
总数目:1
drop table myspatial_table;

ST_3DExtent

ST_3DExtent — 一个返回包含多个geometry对象的3D bounding box的聚集函数。

语法

st_3dextent ::=

参数

geomfield

geometry set类型。

返回值

返回值为box3d类型。

一个返回包含多个geometry对象的3D bounding box(包含Z坐标)的聚集函数。该函数是聚合函数意味着,对于多行的数据,该函数的作用方式会像SQL里面的聚合函数SUM() and AVG() 一样。

由于该函数返回bounding box,空间单位以SRID对应的参考系所规定的单位。

注解

因为函数ST_3Dextent返回一个bounding box,但SRID值会被丢掉,使用函数ST_SetSRID函数重新把SRID值写进该几何对象中去。空间单位以SRID对应的参考系所规定的单位。

示例

SELECT ST_3DExtent(the_geom) FROM (SELECT ST_Translate(ST_Force_3DZ(ST_LineToCurve(ST_Buffer(ST_MakePoint(1,3),1))),0,0,4) As the_geom);
ST_3DEXTENT(BOX3D)      |
------------------------
BOX3D(0 2 4,2 4 4)      |
总数目:1

Find_SRID

Find_SRID — 该函数的用法是find_srid(a_db_schema, a_table, a_column),函数的返回值一个指定列的整型SRID值,该函数实际上是通过查询GEOMETRY_COLUMNS 表得到的。

语法

find_srid ::=

参数

a_schema_name

varchar类型。

a_table_name

varchar类型。

a_geomfield_name

varchar类型。

返回值

返回值为integer类型。

如果geometry类型列没有通过函数AddGeometryColumns()来正确地添加,该函数无法对该列使用。

示例

CREATE TABLE sysdba.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );

SELECT Populate_Geometry_Columns('SYSDBA.myspatial_table');
POPULATE_GEOMETRY_COLUMNS(int)      |
------------------------------------
1                                   |
总数目:1

SELECT Find_SRID('SYSDBA','MYSPATIAL_TABLE','GEOM');
FIND_SRID(int)      |
--------------------
4326                |
总数目:1
drop TABLE sysdba.myspatial_table;

ST_MemSize

ST_MemSize — 返回一个几何对象占用的空间(以byte字节为单位)。

语法

st_memsize ::=

参数

geomA

geometry类型。

返回值

返回值为integer类型。

示例

SELECT ST_Mem_Size(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));
ST_MEM_SIZE(int)      |
----------------------
80                    |
总数目:1
WARNING, ST_Mem_Size signature was deprecated in 2.2.0. Please use ST_MemSize

SELECT ST_MemSize(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));
ST_MEMSIZE(int)      |
---------------------
80                   |
总数目:1

ST_Point_Inside_Circle

ST_Point_Inside_Circle — 返回一个点是否在一个Circle对象内,Circle定义语法是中心点的坐标和半径。

语法

st_point_inside_circle ::=

参数

a_point

geometry类型。

center_x center_y

float类型。中心点。

radius

float类型。半径。

返回值

返回值为 boolean 类型。如果geometry对象是一个点,并且在一个圆内,返回TRUE,否则返回false。

注解

该函数就像函数名所体现的那样,只支持Point类型对象。

示例

SELECT ST_Point_Inside_Circle(ST_Point(1,2), 0.5, 2, 3);
ST_POINT_INSIDE_CIRCLE(boolean)      |
-------------------------------------
true                                 |
总数目:1

SELECT ST_Point_Inside_Circle(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'), 0.5, 2, 3);
ST_POINT_INSIDE_CIRCLE(boolean)      |
-------------------------------------
null                                 |
总数目:1
WARNING, ST_Point_Inside_Circle signature was deprecated in 2.2.0. Please use ST_PointInsideCircle