几何对象存取函数

GeometryType

GeometryType — 该函数以字符串方式返回几何对象的几何类型,例如’LINESTRING’, ’POLYGON’, ’MULTIPOINT’等等。

语法

geometrytype ::=

参数

geomA

geometry类型。

返回值

返回值为text类型。

注解

如果输入的geometry几何对象是可度量的类型(即x,y,m格式),该函数会返回类型字符串为’POINTM’.

示例

SELECT GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
GEOMETRYTYPE(text)      |
------------------------
LINESTRING              |
总数目:1

ST_Boundary

ST_Boundary — 返回这个几何类型对象的边界组成的闭包。

语法

st_boundary ::=

参数

geomA

geometry类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_Boundary(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)')));
ST_ASTEXT(text)      |
---------------------
MULTIPOINT(1 1,-1 1) |
总数目:1

SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))')));
ST_ASTEXT(text)      |
---------------------
LINESTRING(1 1,0 0,-1|
 1,1 1)              |
总数目:1

ST_CoordDim

ST_CoordDim — 返回ST_Geometry 值对应的几何类型的坐标维度值。等价于 ST_Ndims函数。

语法

st_coorddim ::=

参数

geomA

geometry类型。

返回值

返回值为integer类型。

示例

SELECT ST_CoordDim('CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 13)');
ST_COORDDIM(smallint)      |
---------------------------
3                          |
总数目:1

SELECT ST_CoordDim(ST_Point(1,2));
ST_COORDDIM(smallint)      |
---------------------------
2                          |
总数目:1

ST_Dimension

ST_Dimension — 返回输入的几何对象固有的维度值,这个维度值必须小于或等于坐标系的维度值。

语法

st_dimension ::=

参数

geomA

geometry类型。

返回值

返回值为integer类型。

注解

Point的固有维度值是0,LINESTRING固有维度值是1,POLYGON固有维度值为2,GEOMETRYCOLLECTION 的维度值最大,如果是空几何类型,就返回NULL值。

示例

SELECT ST_Dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))');
ST_DIMENSION(int)      |
-----------------------
1                      |
总数目:1

SELECT ST_Dimension('GEOMETRYCOLLECTION(POLYHEDRALSURFACE(((0 0,0 0,0 1,0 0))))'::geometry);
ST_DIMENSION(int)      |
-----------------------
2                      |
总数目:1

ST_EndPoint

ST_EndPoint — 返回一个LINESTRING的最后一个point对象。

语法

st_endpoint ::=

参数

geomA

geometry类型。如果输入参数不是LINESTRING类型,则返回为NULL值。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_EndPoint('LINESTRING(1 1, 2 2, 3 3)'::geometry));
ST_ASTEXT(text)      |
---------------------
POINT(3 3)           |
总数目:1

SELECT ST_EndPoint('POINT(1 1)'::geometry) IS NULL AS is_null;
IS_NULL(boolean)      |
----------------------
true                  |
总数目:1

ST_Envelope

ST_Envelope — 从提供的geometry类型中返回一个box的边界值精度为float8的geometry类型。

语法

st_envelope ::=

参数

geomA

geometry类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_Envelope('POINT(1 3)'::geometry));
ST_ASTEXT(text)      |
---------------------
POINT(1 3)           |
总数目:1

SELECT ST_AsText(ST_Envelope('LINESTRING(0 0, 1 3)'::geometry));
ST_ASTEXT(text)      |
---------------------
POLYGON((0 0,0 3,1 3,|
1 0,0 0))            |
总数目:1

SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000001 1, 1.0000001 0, 0 0))'::geometry ));
ST_ASTEXT(text)      |
---------------------
POLYGON((0 0,0 1,1.00|
00001 1,1.0000001 0,|
0 0))                |
总数目:1

SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000000001 1, 1.0000000001 0, 0 0))'::geometry));
ST_ASTEXT(text)      |
---------------------
POLYGON((0 0,0 1,1.00|
00000001 1,1.0000000|
001 0,0 0))          |
总数目:1

ST_BoundingDiagonal

ST_BoundingDiagonal — 返回所提供几何体边界框的对角线。

语法

st_boundingdiagonal ::=

参数

geomA

geometry类型。如果输入几何图形为空,则对角线也为空,否则它是一个两点线串,每个点的最小值在其起点,最大值在其终点。

default

boolean类型。该参数指定是否需要最佳拟合,默认值为false。如果为false,则可以接受较大边界框的对角线(对于顶点较多的几何体,获得对角线的速度更快)。在任何情况下,返回对角线的边界框始终覆盖输入几何体。

返回值

返回值为geometry类型。返回的线串几何图形始终保留输入几何图形的SRID和维度(Z和M存在)。

注解

在退化情况下(输入中只有一个顶点),返回的linestring在逻辑上无效(无内部)。这不会使返回在语义上无效。

示例

SELECT ST_X(ST_StartPoint(ST_BoundingDiagonal(ST_Buffer(ST_MakePoint(0,0),10))));
ST_X(double precision)      |
----------------------------
-10                         |
总数目:1

SELECT ST_AsText(ST_BoundingDiagonal(ST_Buffer(ST_MakePoint(0,0),10)));
ST_ASTEXT(text)      |
---------------------
LINESTRING(-10 -10,10|
 10)                 |
总数目:1

SELECT ST_AsText(ST_BoundingDiagonal('LINESTRINGZ(1 1 1,8 9 10,1 10 5,10 1 3)'::geometry,true));
ST_ASTEXT(text)      |
---------------------
LINESTRING Z (1 1 1,1|
0 10 10)             |
总数目:1

ST_ExteriorRing

ST_ExteriorRing — 返回一个POLYGON 几何类型的外环,如果输入类型不是POLYGON类型,返回NULL值,该函数不支持MULTIPOLYGON。

语法

st_exteriorring ::=

参数

a_polygon

geometry类型。如果输入类型不是POLYGON类型,返回NULL值。

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_ExteriorRing(ST_GeomFromEWKT('POLYGON((0 0 1, 1 1 1, 1 2 1, 1 1 1, 0 0 1))')));
ST_ASEWKT(text)      |
---------------------
LINESTRING(0 0 1,1 1 |
1,1 2 1,1 1 1,0 0 1) |
总数目:1

SELECT ST_AsEWKT(ST_ExteriorRing(ST_GeomFromEWKT('LINESTRING(0 0, 1 3)')));
ST_ASEWKT(text)      |
---------------------
null                 |
总数目:1

ST_GeometryN

ST_GeometryN — 该函数的输入参数是一个collection对象和一个整数N值,返回这个collection里面的第N个对象,这些collection类型可以是GEOMETRYCOLLECTION,(MULTI)POINT,(MULTI)LINES,MULTICURVE or (MULTI)POLYGON,POLYHEDRALSURFACE,其他值返回为NULL。

语法

st_geometryn ::=

参数

geomA

geometry类型。如果输入类型不是POLYGON类型,返回NULL值。

n_value

integer类型。

返回值

返回值为geometry类型。

注解

对于输入的单几何类型,ST_Dump函数更高效。

示例

SELECT ST_AsEWKT(ST_GeometryN(p_geom,3)) As geom_ewkt
FROM (SELECT 
ST_GeomFromEWKT('POLYHEDRALSURFACE(((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)))') As p_geom 
) As a;
GEOM_EWKT(text)      |
---------------------
POLYGON((0 0 0,1 0 0,|
1 0 1,0 0 1,0 0 0))  |
总数目:1


SELECT ST_AsEWKT(ST_GeometryN(geom,2)) As wkt
FROM (SELECT
ST_GeomFromEWKT('TIN (((0 0 0,0 0 1,0 1 0,0 0 0)), ((0 0 0,0 1 0,1 1 0,0 0 0)))') As geom
) As g;
WKT(text)      |
---------------
TRIANGLE((0 0 0|
,0 1 0,1 1 0,0|
 0 0))         |
总数目:1

ST_GeometryType

ST_GeometryType — 返回ST_Geometry值对应的几何对象的几何类型。

语法

st_geometrytype ::=

参数

geomA

geometry类型。

返回值

返回值为text类型。返回的geometry类型是一个字符串,比如’ST_Linestring’, ’ST_Polygon’,’ST_MultiPolygon’ 等待。

该函数与函数GeometryType(geometry) 在string类型结果不同,该函数返回的字符串有前缀ST,同样对geometry类型是否有m值也是一样的处理。

示例

SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
ST_GEOMETRYTYPE(text)      |
---------------------------
ST_LineString              |
总数目:1

ST_InteriorRingN

ST_InteriorRingN — 返回一个POLYGON几何类型的第N个内环,如果输入的geometry类型不是POLYGON类型或者N超出了范围,返回NULL值。

语法

st_interiorringn ::=

参数

a_polygon

geometry类型。

num

integer类型。下标从1开始。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_InteriorRingN(the_geom, 1)) As the_geom
FROM (SELECT 
ST_BuildArea(ST_Collect(ST_Buffer(ST_Point(1,2), 20,3),ST_Buffer(ST_Point(1, 2), 10,3))) As the_geom
) As foo;
THE_GEOM(text)      |
--------------------
LINESTRING(11 2,9.66|
025403784436 7.0000|
0000000005,5.999999|
99999995 10.6602540|
378444,0.9999999999|
99954 12,-4.0000000|
0000003 10.66025403|
78444,-7.6602540378|
4441 6.999999999999|
97,-9 1.99999999999|
997,-7.660254037844|
37 -3.0000000000000|
2,-3.99999999999998|
 -6.6602540378444,1|
.00000000000001 -8,|
6.00000000000001 -6|
.66025403784438,9.6|
6025403784439 -3,11|
 2)                 |
总数目:1


SELECT ST_AsText(ST_InteriorRingN(the_geom, 0)) As the_geom
FROM (SELECT 
ST_BuildArea(ST_Collect(ST_Buffer(ST_Point(1,2), 20,3),ST_Buffer(ST_Point(1, 2), 10,3))) As the_geom
) As foo;
THE_GEOM(text)      |
--------------------
null                |
总数目:1

ST_IsPolygonCCW

ST_IsPolygonCCW — 如果所有外环均为逆时针方向,所有内环均为时钟方向,则返回true。

语法

st_ispolygonccw ::=

参数

geom

geometry类型。

返回值

返回值为boolean类型。如果几何体没有多边形组件,则返回true。闭合linestrings不被视为多边形组件,因此通过传递单个闭合linestrings(无论其方向如何),仍然可以返回true。

示例

SELECT ST_IsPolygonCCW(ST_GeomFromText('POINT(1 2)'));
ST_ISPOLYGONCCW(boolean)      |
------------------------------
true                          |
总数目:1

SELECT ST_IsPolygonCCW(ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5, 75.15 29.53)')));
ST_ISPOLYGONCCW(boolean)      |
------------------------------
true                          |
总数目:1

ST_IsPolygonCW

ST_IsPolygonCW — 如果所有外环都是顺时针方向,而所有内环都是逆时针方向,则返回true。

语法

st_ispolygoncw ::=

参数

geom

geometry类型。如果几何体没有多边形组件,则返回true。

返回值

返回值为boolean类型。闭合linestrings不被视为多边形组件,因此通过传递单个闭合linestrings(无论其方向如何),仍然可以返回true。

示例

SELECT ST_IsPolygonCW(ST_GeomFromText('POINT(1 2)'));
ST_ISPOLYGONCW(boolean)      |
-----------------------------
true                         |
总数目:1

SELECT ST_IsPolygonCW(ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5, 75.15 29.53)')));
ST_ISPOLYGONCW(boolean)      |
-----------------------------
false                        |
总数目:1

ST_IsClosed

ST_IsClosed — 如果LINESTRING是闭合的,即起点和终点重合,那么该函数返回值为TRUE,对于Polyhedral surface类型来说,它可能是闭合的。

语法

st_isclosed ::=

参数

geom

geometry类型。

返回值

返回值为boolean类型。

示例

SELECT ST_IsClosed('LINESTRING(0 0, 1 1)'::geometry);
ST_ISCLOSED(boolean)      |
--------------------------
false                     |
总数目:1

SELECT ST_IsClosed('LINESTRING(0 0, 0 1, 1 1, 0 0)'::geometry);
ST_ISCLOSED(boolean)      |
--------------------------
true                      |
总数目:1

SELECT ST_IsClosed('MULTILINESTRING((0 0, 0 1, 1 1, 0 0),(0 0, 1 1))'::geometry);
ST_ISCLOSED(boolean)      |
--------------------------
false                     |
总数目:1

SELECT ST_IsClosed('POINT(0 0)'::geometry);
ST_ISCLOSED(boolean)      |
--------------------------
true                      |
总数目:1

SELECT ST_IsClosed('MULTIPOINT((0 0), (1 1))'::geometry);
ST_ISCLOSED(boolean)      |
--------------------------
true                      |
总数目:1

ST_IsCollection

ST_IsCollection — 如果参数是一个collection类型的几何对象如 (MULTI*, GEOMETRYCOLLECTION, ...),则返回值为TRUE。

语法

st_iscollection ::=

参数

geom

geometry类型。

返回值

返回值为boolean类型。

如果参数是一个collection类型的几何对象是下面的之一,则返回值为TRUE:

  • GEOMETRYCOLLECTION
  • MULTI{POINT,POLYGON,LINESTRING,CURVE,SURFACE}
  • COMPOUNDCURVE

注解

该函数是通过分析geometry类型来判断的,这意味着如果一个collection是空的或者包含单个元素,它也会返回TRUE。

示例

SELECT ST_IsCollection('LINESTRING(0 0, 1 1)'::geometry);
ST_ISCOLLECTION(boolean)      |
------------------------------
false                         |
总数目:1

SELECT ST_IsCollection('MULTIPOINT EMPTY'::geometry);
ST_ISCOLLECTION(boolean)      |
------------------------------
true                          |
总数目:1

SELECT ST_IsCollection('MULTIPOINT((0 0))'::geometry);
ST_ISCOLLECTION(boolean)      |
------------------------------
true                          |
总数目:1

SELECT ST_IsCollection('MULTIPOINT((0 0), (42 42))'::geometry);
ST_ISCOLLECTION(boolean)      |
------------------------------
true                          |
总数目:1

SELECT ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0))'::geometry);
ST_ISCOLLECTION(boolean)      |
------------------------------
true                          |
总数目:1

ST_IsEmpty

ST_IsEmpty — 如果输入的geometry参数是空的geometry collection或者空的polygon或者空的point类型等等,那么返回值将会是TRUE。

语法

st_isempty ::=

参数

geom

geometry类型。

返回值

返回值为boolean类型。

示例

SELECT ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'));
ST_ISEMPTY(boolean)      |
-------------------------
true                     |
总数目:1

SELECT ST_IsEmpty(ST_GeomFromText('POLYGON EMPTY'));
ST_ISEMPTY(boolean)      |
-------------------------
true                     |
总数目:1

SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));
ST_ISEMPTY(boolean)      |
-------------------------
false                    |
总数目:1

ST_IsRing

ST_IsRing — 如果LINESTRING是简单、闭合的,则返回TRUE。

语法

st_isring ::=

参数

geom

geometry类型。

返回值

返回值为boolean类型。

示例

SELECT ST_IsRing(the_geom), ST_IsClosed(the_geom), ST_IsSimple(the_geom)
FROM (SELECT 'LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)'::geometry As the_geom) As foo;
ST_ISRING(boolean)      |ST_ISCLOSED(boolean)      |ST_ISSIMPLE(boolean)      |
----------------------------------------------------------------------------
true                    |true                      |true                      |
总数目:1


SELECT ST_IsRing(the_geom), ST_IsClosed(the_geom), ST_IsSimple(the_geom)
FROM (SELECT 'LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)'::geometry As the_geom) As foo;
ST_ISRING(boolean)      |ST_ISCLOSED(boolean)      |ST_ISSIMPLE(boolean)      |
----------------------------------------------------------------------------
false                   |true                      |false                     |
总数目:1

ST_IsSimple

ST_IsSimple — 如果输入的geometry类型没有不规则的几何点,比如自我相交或者自我相切,则返回值为TRUE。

语法

st_issimple ::=

参数

geom

geometry类型。

返回值

返回值为boolean类型。

示例

SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));
ST_ISSIMPLE(boolean)      |
--------------------------
true                      |
总数目:1

SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)'));
ST_ISSIMPLE(boolean)      |
--------------------------
false                     |
总数目:1

ST_IsValid

ST_IsValid — 测试ST_Geometry 的值是否是符合规范的格式。如果ST_Geometry返回的值是满足WKT或EWKT或WKB或EWKB描述的,那么这个函数返回值是TRUE。

语法

st_isvalid ::=

参数

geom

geometry类型。

flags

integer类型。

返回值

返回值为boolean类型。

示例

SELECT ST_IsValid(ST_GeomFromText('LINESTRING(0 0, 1 1)')) As good_line, 
ST_IsValid(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) As bad_poly;
GOOD_LINE(boolean)      |BAD_POLY(boolean)      |
-----------------------------------------------
true                    |false                  |
总数目:1


SELECT ST_IsValid(ST_GeomFromText('LINESTRING(0 0, 1 1)',1)) As good_line,
ST_IsValid(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))'),1) As bad_poly;
GOOD_LINE(boolean)      |BAD_POLY(boolean)      |
-----------------------------------------------
true                    |false                  |
总数目:1

ST_IsValidReason

ST_IsValidReason — 返回一个geometry是否是有效的,以及无效的原因。

语法

st_isvalidreason ::=

参数

geom

geometry类型。

flags

integer类型。(该参数的用法见ST_IsValidDetail)

返回值

返回值为boolean类型。

注解

与函数ST_IsValid一起使用非常有用,可以用来查找生成无效的几何对象和无效原因的明细报告。

示例

SELECT ST_IsValid('LINESTRING(220227 150406,2220227 150407,222020 150410)'), ST_IsValidReason('LINESTRING(220227 150406,2220227 150407,222020 150410)');
ST_ISVALID(boolean)      |ST_ISVALIDREASON(text)      |
-----------------------------------------------------
true                     |Valid Geometry              |
总数目:1

SELECT ST_IsValidReason(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))'), 1);
ST_ISVALIDREASON(text)      |
----------------------------
Self-intersection           |
总数目:1

ST_IsValidDetail

ST_IsValidDetail — 返回几何类型是否有效以及无效原因和无效的几何对象是哪些。

语法

st_isvaliddetail ::=

参数

geom

geometry类型。

flags

integer类型。(该参数的用法暂不明确)

返回值

返回值为boolean类型。

注解

通常用来替代ST_IsValid 与 ST_IsValidReason,用来生成无效geometry对象的明细报告。

参数flags是一个bit参数,它有如下的值:

1: 把自我相交的环形成的控当做是有效的,这也被称作 "the ESRI flag".

示例

SELECT ST_IsValidDetail('LINESTRING(220227 150406,2220227 150407,222020 150410)',1);
ST_ISVALIDDETAIL(VALID_DETAIL)      |
------------------------------------
(t,,)                               |
总数目:1

SELECT reason(ST_IsValidDetail(the_geom)), ST_AsText(location(ST_IsValidDetail(the_geom))) as location 
FROM
(SELECT ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))') as the_geom);
REASON(varchar)      |LOCATION(text)      |
-----------------------------------------
Self-intersection    |POINT(0 0)          |
总数目:1

ST_M

ST_M — 返回一个点的M坐标,如果输入不是point类型,返回NULL。输入值必须是point类型。

语法

st_m ::=

参数

geom

geometry类型。

返回值

返回值为float类型。

示例

SELECT ST_M(ST_GeomFromEWKT('POINT(1 2 3 4)'));
ST_M(double precision)      |
----------------------------
4                           |
总数目:1

ST_NDims

ST_NDims — 返回一个geometry类型的坐标维度,类型是small int类型,值为2,3或4。

语法

st_ndims ::=

参数

geom

geometry类型。

返回值

返回值为integer类型。

示例

SELECT 
ST_NDims(ST_GeomFromText('POINT(1 1)')) As d2point,
ST_NDims(ST_GeomFromEWKT('POINT(1 1 2)')) As d3point,
ST_NDims(ST_GeomFromEWKT('POINTM(1 1 0.5)')) As d2pointm;
D2POINT(smallint)      |D3POINT(smallint)      |D2POINTM(smallint)      |
----------------------------------------------------------------------
2                      |3                      |3                       |
总数目:1

ST_NPoints

ST_NPoints — 返回geometry的顶点个数。

语法

st_npoints ::=

参数

geom

geometry类型。

返回值

返回值为integer类型。

示例

SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
ST_NPOINTS(int)      |
---------------------
4                    |
总数目:1

ST_NRings

ST_NRings — 如果输入的几何类型对象是polygon或者multi-polygon,返回环的个数。

语法

st_nrings ::=

参数

geom

geometry类型。

返回值

返回值为integer类型。不像函数NumInteriorRings,ST_NRings函数会把外环也统计进去。

示例

SELECT ST_NRings(the_geom) As Nrings, ST_NumInteriorRings(the_geom) As ninterrings
FROM (SELECT 
ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))') As the_geom) 
As foo;
NRINGS(int)      |NINTERRINGS(int)      |
---------------------------------------
1                |0                     |
总数目:1

select ST_NRings(ST_GeomFromText('MULTIPOLYGON(((0 0 1,20 0 1,20 20 1,0 20 1,0 0 1),(5 5 3,5 7 3,7 7 3,7 5 3,5 5 3)))', 4326));
ST_NRINGS(int)      |
--------------------
2                   |
总数目:1

select ST_NRings(ST_GeomFromText('point(0 3)', 4326));
ST_NRINGS(int)      |
--------------------
0                   |
总数目:1

ST_NumGeometries

ST_NumGeometries — 返回geometry类型是 GEOMETRYCOLLECTION (或 MULTI*类型)里面包含的几何对象个数,对于单个几何对象,返回1,其他情况返回NULL。

语法

st_numgeometries ::=

参数

geom

geometry类型。

返回值

返回值为integer类型。

示例

SELECT ST_NumGeometries(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
ST_NUMGEOMETRIES(int)      |
---------------------------
1                          |
总数目:1

SELECT ST_NumGeometries(ST_GeomFromEWKT('GEOMETRYCOLLECTION(MULTIPOINT(-2 3 , -2 2),LINESTRING(5 5 ,10 10),POLYGON((-7 4.2,-7.1 5,-7.1 4.3,-7 4.2)))'));
ST_NUMGEOMETRIES(int)      |
---------------------------
3                          |
总数目:1

ST_NumInteriorRings

ST_NumInteriorRings — 返回输入几何对象里面第一个polygon对象里面的内环数,该函数支持POLYGON 和 MULTIPOLYGON,如果geometry中没有polygon对象,则返回NULL。

语法

st_numinteriorrings ::=

参数

geom

geometry类型。

返回值

返回值为integer类型。

示例

SELECT ST_NumInteriorRings(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
ST_NUMINTERIORRINGS(int)      |
------------------------------
null                          |
总数目:1

SELECT ST_NumInteriorRings(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));
ST_NUMINTERIORRINGS(int)      |
------------------------------
0                             |
总数目:1

ST_NumInteriorRing

ST_NumInteriorRing — 返回geometry对象里面第一个polygon里面包含的内环数。该函数与ST_NumInteriorRings等价。

语法

st_numinteriorring ::=

参数

geom

geometry类型。

返回值

返回值为integer类型。

如果这个geometry对象里面包含多个polygon,最大的polygon在外面,该函数就是计算最大的polygon里面含有多少个子polygon。

示例

SELECT ST_NumInteriorRing(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
ST_NUMINTERIORRING(int)      |
-----------------------------
null                         |
总数目:1

SELECT ST_NumInteriorRing(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));
ST_NUMINTERIORRING(int)      |
-----------------------------
0                            |
总数目:1

ST_NumPatches

ST_NumPatches — 返回 Polyhedral Surface的面数. 对于非polyhedral 几何类型对象返回NULL值。

语法

st_numpatches ::=

参数

geom

geometry类型。

返回值

返回值为integer类型。

该函数是MM规范里面函数ST_NumGeometries的别名。如果不在意MM规范的约束,建议使用更快的ST_NumGeometries。

示例

SELECT ST_NumPatches('POLYHEDRALSURFACE(((0 0,0 0,0 1,0 0)))'::geometry);
ST_NUMPATCHES(int)      |
------------------------
1                       |
总数目:1

SELECT ST_NumPatches(
ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
ST_NUMPATCHES(int)      |
------------------------
6                       |
总数目:1

ST_NumPoints

ST_NumPoints — 返回ST_LineString 或 ST_CircularString 值对应的几何对象里面包含的point对象个数。该函数是ST_Npoints的别名函数。

语法

st_numpoints ::=

参数

geom

geometry类型。

返回值

返回值为integer类型。

示例

SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
ST_NUMPOINTS(int)      |
-----------------------
4                      |
总数目:1

ST_PatchN

ST_PatchN — 返回至少包含一个面的geometry对象的第N个面,支持的输入类型是POLYHEDRALSURFACE,POLYHEDRALSURFACEM。否则返回NULL值。

语法

st_patchn ::=

参数

geom

geometry类型。

num

integer类型。

返回值

返回值为geometry类型。

对于Polyhedral Surface几何类型对象来说,该函数的返回值和ST_GeometryN 返回值一样,使用ST_GeometryN 更快。

示例

SELECT ST_AsEWKT(ST_PatchN(geom, 2)) As geomewkt
FROM (
SELECT (ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), 
((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'))
As geom );
GEOMEWKT(text)      |
--------------------
POLYGON((0 0 0,0 1 0|
,1 1 0,1 0 0,0 0 0)|
)                   |
总数目:1

ST_PointN

ST_PointN — 返回单个linestring 或 circular linestring的第N个point对象。如果几何对象里面不包括LINESTRING对象,则返回NULL。

语法

st_pointn ::=

参数

geom

geometry类型。

num

integer类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_PointN(ST_GeomFromText('CIRCULARSTRING(1 2, 3 2, 1 2)'),2));
ST_ASTEXT(text)      |
---------------------
POINT(3 2)           |
总数目:1

SELECT ST_AsText(ST_PointN(ST_GeomFromText('point(1 2)'),1));
ST_ASTEXT(text)      |
---------------------
null                 |
总数目:1

ST_Points

ST_Points — 返回几何的所有坐标点集MultiPoint。

语法

st_points ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。

注解

返回包含几何体所有坐标的多点。不删除输入几何图形中重复的点,包括环形几何图形的起点和终点。(如果不希望出现这种行为,可以使用ST_RemovePeatedPoints删除重复项)。如果存在,M和Z坐标将被保留。

示例

SELECT ST_AsText(ST_Points(ST_GeomFromText('LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)', 4326)));
ST_ASTEXT(text)      |
---------------------
MULTIPOINT Z (75.15 2|
9.53 1,77 29 1,77.6 |
29.5 1,75.15 29.53 1|
)                    |
总数目:1

ST_SRID

ST_SRID — 返回ST_Geometry值对应对象的SRID值,该值必须存在spatial_ref_sys表中。

语法

st_srid ::=

参数

geom

geometry类型。

返回值

返回值为integer类型。

注解

spatial_ref_sys table是一个记录对OscarGIS所有已知的空间坐标系统的表,该表可以用来将一个对象的空间坐标系转换到另一种,因此如果对几何对象进行坐标系转换时候,请确认SRID。

示例

SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)',4326));
ST_SRID(int)      |
------------------
4326              |
总数目:1

ST_StartPoint

ST_StartPoint — 返回LINESTRING几何对象的起点。

语法

st_startpoint ::=

参数

geom

geometry类型。如果输入类型不是LINESTRING返回NULL。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_StartPoint('LINESTRING(0 1, 0 2)'::geometry));
ST_ASTEXT(text)      |
---------------------
POINT(0 1)           |
总数目:1

SELECT ST_StartPoint('POINT(0 1)'::geometry) IS NULL AS is_null;
IS_NULL(boolean)      |
----------------------
true                  |
总数目:1

ST_Summary

ST_Summary — 返回geometry对象的文本概要。

语法

st_summary ::=

参数

geom

geometry类型或geography类型。

返回值

返回值为geometry类型。

该函数返回的文本描述中,含有中括号的标识意义如下:

  • M: 有一个 M 坐标
  • Z: 有一个 Z 坐标
  • B: 有一个缓冲区
  • G: 是一个地理坐标

示例

SELECT ST_Summary(ST_GeomFromText('LINESTRING(0 0, 1 1)')) as geom,
ST_Summary(ST_GeogFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) geog;
GEOM(text)      |GEOG(text)      |
--------------------------------
LineString[] wit|Polygon[BGS] wit|
h 2 points      |h 1 rings
   ri|
                |ng 0 has 5 poin|
                |ts              |
总数目:1


SELECT ST_Summary(ST_GeogFromText('LINESTRING(0 0 1, 1 1 1)')) As geog_line,
ST_Summary(ST_GeomFromText('SRID=4326;POLYGON((0 0 1, 1 1 2, 1 2 3, 1 1 1, 0 0 1))')) As geom_poly;
GEOG_LINE(text)      |GEOM_POLY(text)      |
------------------------------------------
LineString[ZGS] with |Polygon[ZBS] with 1 r|
2 points             |ings
   ring 0 has 5|
                     | points              |
总数目:1

ST_X

ST_X — 返回点的X坐标,如果输入参数不是一个点,返回NULL,输入必须是一个点类型。

语法

st_x ::=

参数

a_point

geometry类型。

返回值

返回值为float类型。

注解

如果想得到任意几何对象的x坐标的最大和最小值,参考ST_XMin, ST_XMax 函数。

示例

SELECT ST_X(ST_GeomFromEWKT('POINT(1 2 3 4)'));
ST_X(double precision)      |
----------------------------
1                           |
总数目:1

ST_XMax

ST_XMax — 返回2d或3d的bounding box 或一个几何对象的X最大值。

语法

st_xmax ::=

参数

aGeomorBox2DorBox3D

Box3D类型。虽然该函数是为box3d而定义的,但也支持box2d和geometry类型对象,因为这两种对象可以自动转换成box3d类型。但不能用WKT表述的geometry或box2d对象传递进去,因为这种情况下不能做自动转换成box3d类型。

返回值

返回值为float类型。

示例

SELECT ST_XMax('BOX3D(1 2 3, 4 5 6)');
ST_XMAX(double precision)      |
-------------------------------
4                              |
总数目:1

SELECT ST_XMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
ST_XMAX(double precision)      |
-------------------------------
5                              |
总数目:1
SELECT ST_XMax('LINESTRING(1 3, 5 6)');
ERROR, BOX3D parser - doesn't start with BOX3D(


ST_XMin

ST_XMin — 返回bounding box或者2d或3d或geometry的X方向范围的最小值。

语法

st_xmin ::=

参数

aGeomorBox2DorBox3D

Box3D类型。虽然该函数是为box3d而定义的,但也支持box2d和geometry类型对象,因为这两种对象可以自动转换成box3d类型。但不能用WKT表述的geometry或box2d对象传递进去,因为这种情况下不能做自动转换成box3d类型。

返回值

返回值为float类型。

示例

SELECT ST_XMin('BOX3D(1 2 3, 4 5 6)');
ST_XMIN(double precision)      |
-------------------------------
1                              |
总数目:1

SELECT ST_XMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
ST_XMIN(double precision)      |
-------------------------------
1                              |
总数目:1
SELECT ST_XMin('LINESTRING(1 3, 5 6)');
ERROR, BOX3D parser - doesn't start with BOX3D(


ST_Y

ST_Y — 返回输入点的Y坐标,如果输入不是点,返回NULL,输入必须是点类型。

语法

st_y ::=

参数

a_point

geometry类型。

返回值

返回值为float类型。

示例

SELECT ST_Y(ST_GeomFromEWKT('POINT(1 2 3 4)'));
ST_Y(double precision)      |
----------------------------
2                           |
总数目:1

SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));
ST_Y(double precision)      |
----------------------------
1.5                         |
总数目:1

ST_YMax

ST_YMax — 返回bounding box 或者2d或3d或geometry的Y方向范围的最大值。

语法

st_ymax ::=

参数

aGeomorBox2DorBox3D

box3d类型。

返回值

返回值为float类型。

示例

SELECT ST_YMax('BOX3D(1 2 3, 4 5 6)');
ST_YMAX(double precision)      |
-------------------------------
5                              |
总数目:1

SELECT ST_YMax(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
ST_YMAX(double precision)      |
-------------------------------
6                              |
总数目:1
SELECT ST_YMax('LINESTRING(1 3, 5 6)');
ERROR, BOX3D parser - doesn't start with BOX3D(


ST_YMin

ST_YMin — 返回bounding box 或者2d或3d或geometry的Y方向范围的最小值。

语法

st_ymin ::=

参数

aGeomorBox2DorBox3D

box3d类型。

返回值

返回值为float类型。

注解

ST_ZMax、ST_ZMin 分别为返回bounding box 或者2d或3d或geometry的Y方向范围的最大值和最小值。用法同ST_XMax、ST_XMin一样。就不再描述了。

示例

SELECT ST_YMin('BOX3D(1 2 3, 4 5 6)');
ST_YMIN(double precision)      |
-------------------------------
2                              |
总数目:1

SELECT ST_YMin(ST_GeomFromText('LINESTRING(1 3 4, 5 6 7)'));
ST_YMIN(double precision)      |
-------------------------------
3                              |
总数目:1
SELECT ST_YMin('LINESTRING(1 3, 5 6)');
ERROR, BOX3D parser - doesn't start with BOX3D(


ST_Z

ST_Z — 返回输入点的Z坐标,如果输入不是点,返回NULL,输入必须是点类型。

语法

st_z ::=

参数

a_point

geometry类型。

返回值

返回值为float类型。

示例

SELECT ST_Z(ST_GeomFromEWKT('POINT(1 2 3 4)'));
ST_Z(double precision)      |
----------------------------
3                           |
总数目:1

ST_Zmflag

ST_Zmflag — 返回一个几何对象的ZM标识,值的对应关系如下,对于2d对象,ZM值为1记为0=2d,以此类推 1=3dm, 2=3dz,3=4d。

语法

st_zmflag ::=

参数

geomA

geometry类型。

返回值

返回值为smallint类型。

示例

SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'));
ST_ZMFLAG(smallint)      |
-------------------------
0                        |
总数目:1

SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRINGM(1 2 3, 3 4 3)'));
ST_ZMFLAG(smallint)      |
-------------------------
1                        |
总数目:1

SELECT ST_Zmflag(ST_GeomFromEWKT('CIRCULARSTRING(1 2 3, 3 4 3, 5 6 3)'));
ST_ZMFLAG(smallint)      |
-------------------------
2                        |
总数目:1

SELECT ST_Zmflag(ST_GeomFromEWKT('POINT(1 2 3 4)'));
ST_ZMFLAG(smallint)      |
-------------------------
3                        |
总数目:1