其他函数¶
ST_Accum¶
ST_Accum — 聚合函数,返回输入几何对象形成的数组。
返回值¶
返回值为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类型。
示例¶
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类型。
示例¶
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 — 返回从输入几何体的边界框向所有方向展开的边界框。输出对象的坐标精度使用双精度
参数¶
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的聚集函数。
返回值¶
返回值为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的聚集函数。
返回值¶
返回值为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 表得到的。
示例¶
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字节为单位)。
返回值¶
返回值为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定义语法是中心点的坐标和半径。
示例¶
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