当前位置:网站首页>金仓数据库 KingbaseGIS 使用手册(6.4. 几何对象存取函数)

金仓数据库 KingbaseGIS 使用手册(6.4. 几何对象存取函数)

2022-08-09 22:11:00 沉舟侧畔千帆过_

6.4. 几何对象存取函数

6.4.1. GeometryType

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

用法

text GeometryType(geometry geomA);

描述

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

OGC SPEC s2.1.1.1 – 返回geometry类型的实例子类型名称,该类型是geometry的子类型成员。实例的类型名称是一个字符串。

注意

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

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1。

  • 该函数支持CircularString和Curve几何类型对象。

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该函数支持 Polyhedral Surface类型几何对象。

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces (TIN)类型。

样例

SELECT GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));

geometrytype
--------------
LINESTRING

SELECT ST_GeometryType(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)) )'));

result
--------------------
ST_PolyhedralSurface

SELECT GeometryType(geom) as result
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
);


result
--------
TIN

相关参考

ST_GeometryType

6.4.2. ST_Boundary

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

用法

geometry ST_Boundary(geometry geomA);

描述

返回这个几何类型对象的边界组成的闭包。由于该函数的返回值是一个闭包,因此拓扑结构是封闭的,同时结果可以用OGC SPEC规范 基本的几何类型对象来表示。该函数由GEOS模块提供。

注意

2.0.0之前的版本,如果该函数处理GEOMETRYCOLLECTION对象会抛出异常,从2.0.0版本开始,该函数会返回NULL(对不支持的输入类型)。

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1. OGC SPEC s2.1.1.1。

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 5.1.14。

  • 这个函数支持3D对象,并且不会删除z坐标。

样例

SELECT ST_AsText(ST_Boundary(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)')));

st_astext
-----------
MULTIPOINT(1 1,-1 1)

SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))')));

st_astext
----------
LINESTRING(1 1,0 0,-1 1,1 1)

SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('POLYGON((1 1 1,0 0 1, -1 1 1, 1 1 1))')));

st_asewkt
-----------------------------------
LINESTRING(1 1 1,0 0 1,-1 1 1,1 1 1)


SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('MULTILINESTRING((1 1 1,0 0 0.5, -1 1 1),(1 1 0.5,0 0 0.5, -1 1 0.5, 1 1 0.5) )')));

st_asewkt
----------
MULTIPOINT(-1 1 1,1 1 0.75)

相关参考

ST_ExteriorRingST_MakePolygon

6.4.3. ST_CoordDim

ST_CoordDim — 返回ST_ Geometry 值对应的几何类型的坐标维度值。

用法

integer ST_CoordDim(geometry geomA);

描述

返回ST_Geometry值对应的几何类型对象的坐标维度,该函数等价于SQL/MM规范的ST_Ndims函数。

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1。

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 5.1.3。

  • 该函数支持CircularString和Curve几何类型对象。

  • 这个函数支持3D对象,并且不会删除z坐标。

该行支持 Polyhedral Surface几何类型对象。

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces (TIN)类型。

样例

SELECT ST_CoordDim('CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 13)');

ST_CoordDim
-----------
3

SELECT ST_CoordDim(ST_Point(1,2));

ST_CoordDim
-----------
2

相关参考

ST_NDims

6.4.4. ST_Dimension

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

用法

integer ST_Dimension(geometry g);

描述

返回输入的几何对象固有的维度值,这个维度值必须小于或等于坐标系的维度值。 按照OGC SPEC标准 - Point的固有维度值是0,LINESTRING固有维度值是1,POLYGON固有维度值为2,GEOMETRYCOLLECTION 的 维度值最大,如果是空几何类型,就返回NULL值。

该方法实现了规范 SQL/MM specification. SQL-MM 3: 5.1.2。

  • 该函数支持 Polyhedral Surface类型几何对象。

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces (TIN)类型。

样例

SELECT ST_Dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))');

ST_Dimension
-----------
1

相关参考

ST_NDims

6.4.5. ST_Dump

ST_Dump —返回一个组成输入几何对象g1的geometry_dump (geom,path) 行集合。

用法

geometry_dump[] ST_Dump(geometry g1);

描述

这是一个返回集合的函数(set-returning function 即SRF)。该函数会返回组成输入对象的geometry_dump 行集合和行的位置值。当输入类型是 (POINT、LINESTRING、OLYGON),返回的是一个空的数组和一个和输入对象一样的几何对象形成的一条记录。 当输入对象是一个collection或者multi类型的collection,该函数会返回每一个collection的组成和组成每一个collection的每一个元素的位置下标。

ST_Dump 在展开geometry对象很有用,它与GROUP BY子句的功能是相反的。该函数可以用来把MULTIPOLYGONS 展开成POLYGONS。

  • 该函数支持CircularString和Curve几何类型对象。

  • 该函数支持 Polyhedral Surface类型几何对象。

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces (TIN)类型。

  • 这个函数支持3D对象,并且不会删除z坐标。

样例 : Standard

SELECT sometable.field1, sometable.field1,
(ST_Dump(sometable.the_geom)).geom AS the_geom
FROM sometable;
-- Break a compound curve into its constituent linestrings and circularstrings
SELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom)
FROM ( SELECT (ST_Dump(p_geom)).geom AS geom
FROM (SELECT ST_GeomFromEWKT(
   'COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))')
   AS p_geom) AS b
) AS a;

st_asewkt                    | st_hasarc
-----------------------------+----------
CIRCULARSTRING(0 0,1 1,1 0)  | t
LINESTRING(1 0,0 1)          | f
(2 rows)

样例 : Polyhedral Surfaces, TIN and Triangle

-- Polyhedral surface example
-- Break a Polyhedral surface into its faces
SELECT (a.p_geom).path[1] As path, ST_AsEWKT((a.p_geom).geom) As geom_ewkt
FROM (SELECT ST_Dump(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;

path  |geom_ewkt
------+------------------------------------------
1     | POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0))
2     | POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))
3     | POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))
4     | POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0))
5     | POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0))
6     | POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))

-- TIN --
SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
FROM
(SELECT
ST_Dump( 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 gdump
) AS g;
-- result --

path  | wkt
------+-------------------------------------
{1}   | TRIANGLE((0 0 0,0 0 1,0 1 0,0 0 0))
{2}   | TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))

相关参考

geometry_dumpST_CollectST_CollectST_GeometryN

6.4.6. ST_DumpPoints

ST_DumpPoints —返回组成一个几何对象的所有点的geometry_dump(geom,path)记录集。

用法

geometry_dump[]ST_DumpPoints(geometry geom);

描述

该函数会返回组成输入对象的geometry_dump 行集合和行的位置值。

输入对象是由点组成的几何对象。

参数path是一个展开输入几何对象的后的所有点的位置形成的数组,每一个点的位置就是该数组的下标。 例如如果输入对象是一个LINESTRING对象,会返回一个LINESTRING所有点位置坐标的数组{i}。 如果输入对象是一个POLYGON,返回一个数组{i,j},i表示环的位置顺序(1是最外面的环,内环以此类推),j是环上面的点的位置顺序(下标从1开始)。

  • 该函数支持CircularString和Curve几何类型对象。

  • 该函数支持 Polyhedral Surface类型几何对象。

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces(TIN)类型。

  • 这个函数支持3D对象,并且不会删除z坐标。

样例:Classic Explode a Table of LineStrings into nodes

SELECT edge_id, (dp).path[1] As index, ST_AsText((dp).geom) As wktnode
FROM (SELECT 1 As edge_id
, ST_DumpPoints(ST_GeomFromText('LINESTRING(1 2, 3 4, 10 10)')) AS dp
UNION ALL
SELECT 2 As edge_id
, ST_DumpPoints(ST_GeomFromText('LINESTRING(3 5, 5 6, 9 10)')) AS dp
) As foo;

edge_id  | index | wktnode
---------+-------+--------------
1        | 1     | POINT(1 2)
1        | 2     | POINT(3 4)
1        | 3     | POINT(10 10)
2        | 1     | POINT(3 5)
2        | 2     | POINT(5 6)
2        | 3     | POINT(9 10)

样例: Standard Geometry

SELECT path, ST_AsText(geom)
FROM (
SELECT (ST_DumpPoints(g.geom)).*
FROM
(SELECT
'GEOMETRYCOLLECTION(
POINT ( 0 1 ),
LINESTRING ( 0 3, 3 4 ),
POLYGON (( 2 0, 2 3, 0 2, 2 0 )),
POLYGON (( 3 0, 3 3, 6 3, 6 0, 3 0 ),
( 5 1, 4 2, 5 2, 5 1 )),
MULTIPOLYGON (
(( 0 5, 0 8, 4 8, 4 5, 0 5 ),
( 1 6, 3 6, 2 7, 1 6 )),
(( 5 4, 5 8, 6 7, 5 4 ))
)
)'::geometry AS geom
) AS g
) j;


path       | st_astext
-----------+------------
{1,1}      | POINT(0 1)
{2,1}      | POINT(0 3)
{2,2}      | POINT(3 4)
{3,1,1}    | POINT(2 0)
{3,1,2}    | POINT(2 3)
{3,1,3}    | POINT(0 2)
{3,1,4}    | POINT(2 0)
{4,1,1}    | POINT(3 0)
{4,1,2}    | POINT(3 3)
{4,1,3}    | POINT(6 3)
{4,1,4}    | POINT(6 0)
{4,1,5}    | POINT(3 0)
{4,2,1}    | POINT(5 1)
{4,2,2}    | POINT(4 2)
{4,2,3}    | POINT(5 2)
{4,2,4}    | POINT(5 1)
{5,1,1,1}  | POINT(0 5)
{5,1,1,2}  | POINT(0 8)
{5,1,1,3}  | POINT(4 8)
{5,1,1,4}  | POINT(4 5)
{5,1,1,5}  | POINT(0 5)
{5,1,2,1}  | POINT(1 6)
{5,1,2,2}  | POINT(3 6)
{5,1,2,3}  | POINT(2 7)
{5,1,2,4}  | POINT(1 6)
{5,2,1,1}  | POINT(5 4)
{5,2,1,2}  | POINT(5 8)
{5,2,1,3}  | POINT(6 7)
{5,2,1,4}  | POINT(5 4)
(29 rows)

样例: Polyhedral Surfaces, TIN and Triangle

-- Polyhedral surface cube --

SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
FROM
(SELECT
ST_DumpPoints(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 gdump
) AS g;
-- result --

path     | wkt
---------+--------------
{1,1,1}  | POINT(0 0 0)
{1,1,2}  | POINT(0 0 1)
{1,1,3}  | POINT(0 1 1)
{1,1,4}  | POINT(0 1 0)
{1,1,5}  | POINT(0 0 0)
{2,1,1}  | POINT(0 0 0)
{2,1,2}  | POINT(0 1 0)
{2,1,3}  | POINT(1 1 0)
{2,1,4}  | POINT(1 0 0)
{2,1,5}  | POINT(0 0 0)
{3,1,1}  | POINT(0 0 0)
{3,1,2}  | POINT(1 0 0)
{3,1,3}  | POINT(1 0 1)
{3,1,4}  | POINT(0 0 1)
{3,1,5}  | POINT(0 0 0)
{4,1,1}  | POINT(1 1 0)
{4,1,2}  | POINT(1 1 1)
{4,1,3}  | POINT(1 0 1)
{4,1,4}  | POINT(1 0 0)
{4,1,5}  | POINT(1 1 0)
{5,1,1}  | POINT(0 1 0)
{5,1,2}  | POINT(0 1 1)
{5,1,3}  | POINT(1 1 1)
{5,1,4}  | POINT(1 1 0)
{5,1,5}  | POINT(0 1 0)
{6,1,1}  | POINT(0 0 1)
{6,1,2}  | POINT(1 0 1)
{6,1,3}  | POINT(1 1 1)
{6,1,4}  | POINT(0 1 1)
{6,1,5}  | POINT(0 0 1)
(30 rows)

-- Triangle --
SELECT (g.gdump).path, ST_AsText((g.gdump).geom) as wkt
FROM
(SELECT
ST_DumpPoints( ST_GeomFromEWKT('TRIANGLE ((
0 0,
0 9,
9 0,
0 0
))') ) AS gdump
) AS g;

-- result --
path  | wkt
------+------------
{1}   | POINT(0 0)
{2}   | POINT(0 9)
{3}   | POINT(9 0)
{4}   | POINT(0 0)

-- TIN --
SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
FROM
(SELECT
ST_DumpPoints( 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 gdump
) AS g;

-- result --
path     | wkt
---------+--------------
{1,1,1}  | POINT(0 0 0)
{1,1,2}  | POINT(0 0 1)
{1,1,3}  | POINT(0 1 0)
{1,1,4}  | POINT(0 0 0)
{2,1,1}  | POINT(0 0 0)
{2,1,2}  | POINT(0 1 0)
{2,1,3}  | POINT(1 1 0)
{2,1,4}  | POINT(0 0 0)
(8 rows)

相关参考

geometry_dump, ST_Dump, ST_DumpRings

6.4.7. ST_DumpRings

ST_DumpRings — 返回将一个polygon对象展开后dump出外环和内环的结果。

用法

geometry_dump[] ST_DumpRings(geometry a_polygon);

描述

返回将一个polygon对象 展开后dump出外环和内环的结果参数“path”表示环的标号,0表示外环,大于0表示内环的标号。输入对象是一个polygon对象。

注意

该函数目前只支持POLYGON几何类型对象,不支持MULTIPOLYGON类型对象。

  • 这个函数支持3D对象,并且不会删除z坐标。

样例

SELECT sometable.field1, sometable.field1,
(ST_DumpRings(sometable.the_geom)).geom As the_geom
FROM sometableOfpolys;
SELECT ST_AsEWKT(geom) As the_geom, path
FROM ST_DumpRings(
ST_GeomFromEWKT('POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839
1,-8148972 5132767 1,-8148958 5132508 1,-8148941 5132466 1,-8148924 5132394 1,
-8148903 5132210 1,-8148930 5131967 1,-8148992 5131978 1,-8149237 5132093 1,-8149404
5132211 1,-8149647 5132310 1,-8149757 5132394 1,
-8150305 5132788 1,-8149064 5133092 1),
(-8149362 5132394 1,-8149446 5132501 1,-8149548 5132597 1,-8149695 5132675 1,-8149362
5132394 1))')
) as foo;

path| the_geom
----+------------------------------------------------------------------------------------------------------------------
{0} | POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,-8148941 5132466 1,-8148924 5132394 1, -8148903 5132210 1,-8148930 5131967 1, -8148992 5131978 1,-8149237 5132093 1,-8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,-8150305 5132788 1,-8149064 5133092 1))
{1} | POLYGON((-8149362 5132394 1,-8149446 5132501 1,-8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))

相关参考

geometry_dump, ST_Dump, ST_ExteriorRing, ST_InteriorRingN

6.4.8. ST_EndPoint

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

用法

boolean ST_EndPoint(geometry g);

描述

返回一个线段的最后一个point对象,如果输入参数不是LINESTRING类型,则返回为NULL值。

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 7.1.4。

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该函数支持 CircularString 和 Curve 类型。

样例

system=# SELECT ST_AsText(ST_EndPoint('LINESTRING(1 1, 2 2, 3 3)'::geometry));

st_astext
-----------
POINT(3 3)
(1 row)

system=# SELECT ST_EndPoint('POINT(1 1)'::geometry) IS NULL AS is_null;

is_null
----------
t
(1 row)

--3d endpoint
SELECT ST_AsEWKT(ST_EndPoint('LINESTRING(1 1 2, 1 2 3, 0 0 5)'));

st_asewkt
--------------
POINT(0 0 5)
(1 row)

相关参考

ST_PointN, ST_StartPoint

6.4.9. ST_Envelope

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

用法

geometry ST_Envelope(geometry g1);

描述

从提供的geometry类型中返回一个box的边界值精度为float8的最小geometry类型。多边形是bonding box的各个点((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), (MINX, MINY))来定义并连接组成的,(KGIS 将会添加一个ZMIN/ZMAX 坐标)。退化的情况例如垂线或者点将会返回一个比POLYGON类型低的维度类型,例如POINT或LINESTRING类型。

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 5.1.15

样例

SELECT ST_AsText(ST_Envelope('POINT(1 3)'::geometry));

st_astext
------------
POINT(1 3)
(1 row)

SELECT ST_AsText(ST_Envelope('LINESTRING(0 0, 1 3)'::geometry));

st_astext
--------------------------------
POLYGON((0 0,0 3,1 3,1 0,0 0))(1 row)

SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000001 1, 1.0000001 0, 0 0))'::geometry));

st_astext
--------------------------------------------------------------
POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))
(1 row)

SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000000001 1, 1.0000000001 0, 0 0))'::geometry));

st_astext
--------------------------------------------------------------
POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))
(1 row)

SELECT Box3D(geom), Box2D(geom), ST_AsText(ST_Envelope(geom)) As envelopewkt FROM (SELECT 'POLYGON((0 0, 0 1000012333334.34545678, 1.0000001 1, 1.0000001 0, 0 0))':: geometry As geom) As foo;

参考

Box2D, Box3D

6.4.10. ST_BoundingDiagonal

ST_BoundingDiagonal — 以LineString形式返回一个给定几何对象边界框的对角线。

用法

geometry ST_BoundingDiagonal(geometry geom, boolean fits=false);

描述

以LineString形式返回一个给定几何对象边界框的对角线。 如果输入几何对象为空,输出的对角线也为空,否则将输出一条只有两个端点的 LineString,在每个维度上都是起点为最小值,终点为最大值。

返回的 LineString 对象会保留输入几何对象的 SRID,维度(如果存在 Z 和 M 维,也会保留)。

参数 fits 表明是否要做到最佳匹配。 如果是 false,对角线比边界框稍大也是可以接受的(对于有很多顶点的几何对象,这样会更快)。 任何情况下,返回对角线的边界框都一定能覆盖整个输入几何对象。

注意

在退化的案例中(输入几何对象只有一个顶点),返回的 LineString 在拓扑结构上将是非法的(没有内环)。但这不会造成返回的结果在语义层面是非法的。

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该方法支持M维坐标。

样例

-- Get the minimum X in a buffer around a point
SELECT ST_X(ST_StartPoint(ST_BoundingDiagonal(
ST_Buffer(ST_MakePoint(0,0),10)
)));

st_x
------
-10

参考

ST_StartPoint, ST_EndPoint, ST_X, ST_Y, ST_Z, ST_M, &&&

6.4.11. ST_ExteriorRing

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

用法

geometry ST_ExteriorRing(geometry a_polygon);

描述

返回一个POLYGON 几何类型的外环,如果输入类型不是POLYGON类型,返回NULL值。

注意

只支持POLYGON几何类型。

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1. 2.1.5.1。

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 8.2.3, 8.3.3。

  • 这个函数支持3D对象,并且不会删除z坐标。

样例

--If you have a table of polygons
SELECT gid, ST_ExteriorRing(the_geom) AS ering
FROM sometable;

--If you have a table of MULTIPOLYGONs
--and want to return a MULTILINESTRING composed of the exterior rings of each polygon
SELECT gid, ST_Collect(ST_ExteriorRing(the_geom)) AS erings
FROM (SELECT gid, (ST_Dump(the_geom)).geom As the_geom
FROM sometable)
As foo
GROUP BY gid;

--3d Example
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
---------
LINESTRING(0 0 1,1 1 1,1 2 1,1 1 1,0 0 1)

参考

ST_InteriorRingN, ST_Boundary, ST_NumInteriorRings

6.4.12. ST_GeometryN

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

用法

geometry ST_GeometryN(geometry geomA, integer n);

描述

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

注意

对单体几何类型而言,如果想得到所有的几何对象元素,ST_Dump函数更高效。

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1。

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 9.1.5。

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该函数支持CircularString和Curve几何类型对象。

  • 该函数支持 Polyhedral Surface类型几何对象。

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces (TIN)类型。

CREATE TABLE districts (dist_id integer, shape sde.st_geometry);
INSERT INTO districts (dist_id, shape) VALUES (1,sde.st_multipolygon
('multipolygon (((-1 -1, -1 11, 11 11, 11 -1, -1 -1),(19 -1, 19 11,
29 9, 31 -1, 19 -1), (39 -1, 39 11, 51 11, 51 -1, 39 -1)))', 0));

SELECT st_astext (sde.st_geometryn (shape, 2)) AS Second_Element
FROM districts;
Second_Element

POLYGON ((39 -1, 51 -1, 51 11, 39 11, 39 -1))

标准 样例

--Extracting a subset of points from a 3d multipointSELECT n,
ST_AsEWKT(ST_GeometryN(the_geom, n)) As geomewkt
FROM (
VALUES (ST_GeomFromEWKT('MULTIPOINT(1 2 7, 3 4 7, 5 6 7, 8 9 10)') ),
( ST_GeomFromEWKT('MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5),
(10 11, 12 11))') )
)As foo(the_geom)
CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(the_geom);

n  | geomewkt
---+-----------------------------------------
1  | POINT(1 2 7)
2  | POINT(3 4 7)
3  | POINT(5 6 7)
4  | POINT(8 9 10)
1  | CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5)
2  | LINESTRING(10 11,12 11)

--Extracting all geometries (useful when you want to assign an id)
SELECT gid, n, ST_GeometryN(the_geom, n)
FROM sometable CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(the_geom);

Polyhedral Surfaces, TIN and Triangle 样例

-- Polyhedral surface example
-- Break a Polyhedral surface into its faces
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
------------------------------------------
POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))

-- TIN --
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;
-- result --

wkt
-------------------------------------
TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))

参考

ST_Dump, ST_NumGeometries

6.4.13. ST_GeometryType

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

用法

text ST_GeometryType(geometry g1);

描述

返回的geometry类型是一个字符串,比如“ST_Linestring”, “ST_Polygon”,“ST_MultiPolygon” 等待.该函数与函数GeometryType(geometry) 在string类型结果不同,该函数返回的字符串有前缀ST,同样对geometry类型是否有m值也是一样的处理。

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 5.1.4。

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该函数支持 Polyhedral Surface类型几何对象。

样例

SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27
29.31,77.29 29.07)'));
--result
ST_LineString

SELECT ST_GeometryType(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)) )'));
--result
ST_PolyhedralSurface

SELECT ST_GeometryType(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)) )'));
--result
ST_PolyhedralSurface

SELECT ST_GeometryType(geom) as result
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;

result
--------
ST_Tin

参考

GeometryType

6.4.14. ST_HasArc

ST_HasArc — 如果一个geometry对象或geometry collection包含一个CircularString对象,则返回TRUE。

用法

boolean ST_HasArc(geometry geomA);

描述

如果一个geometry对象或geometry collection包含一个CircularString对象,则返回TRUE。

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持CircularString和Curve几何类型对象

样例

SELECT ST_HasArc(ST_Collect('LINESTRING(1 2, 3 4, 5 6)', 'CIRCULARSTRING(1 1, 2 3, 4 5, 6
7, 5 6)'));
st_hasarc
--------
t

参考

ST_CurveToLine, ST_LineToCurve

6.4.15. ST_InteriorRingN

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

用法

geometry ST_InteriorRingN(geometry a_polygon, integer n);

描述

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

注意

该函数不支持MULTIPOLYGON类型. 对于MULTIPOLYGON类型,使用ST_Dump。

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1。

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 8.2.6, 8.3.5。

  • 这个函数支持3D对象,并且不会删除z坐标。

样例

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;

参考

ST_ExteriorRing ST_BuildArea, ST_Collect, ST_Dump, ST_NumInteriorRing, ST_NumInteriorRings

6.4.16. ST_IsPolygonCCW

ST_IsPolygonCCW — 判断是否所有输入的多边形成分都是外环逆时针方向,内环顺时针方向。

用法

boolean ST_IsPolygonCCW ( geometry geom );

描述

判断是否所有输入的多边形成分都是外环逆时针方向,内环顺时针方向。

如果输入几何对象没有多边形成分,则返回True。

注意

闭合的 LineString 不会被视作多边形成分,因此如果输入一个闭合的 LineString,无论其节点排列方向为何,都会返回 True。

如果多边形的内环没有使用反向的排列(例如:多边形的一个或多个内环与外环的排列方向相同),那么无论 ST_IsPolygonCCW 还是 ST_IsPolygonCW 都会返回 False。

  • 该函数支持3D对象,并且不会删除z坐标。

  • 该函数支持M坐标。

参考

ST_ForcePolygonCW , ST_ForcePolygonCCW , ST_IsPolygonCW

6.4.17. ST_IsPolygonCW

ST_IsPolygonCW — 判断是否所有输入的多边形成分都是外环顺时针方向,内环逆时针方向。

用法

boolean ST_IsPolygonCW ( geometry geom );

描述

判断是否所有输入的多边形成分都是外环顺时针方向,内环逆时针方向。

如果输入几何对象没有多边形成分,则返回True。

注意

闭合的 LineString 不会被视作多边形成分,因此如果输入一个闭合的 LineString,无论其节点排列方向为何,都会返回 True。

如果多边形的内环没有使用反向的排列(例如:多边形的一个或多个内环与外环的排列方向相同),那么无论 ST_IsPolygonCW 还是 ST_IsPolygonCCW 都会返回 False。

  • 该函数支持3D对象,并且不会删除z坐标。

  • 该函数支持M坐标

参考

ST_ForcePolygonCW , ST_ForcePolygonCCW , ST_IsPolygonCW

6.4.18. ST_IsClosed

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

用法

boolean ST_IsClosed(geometry g);

描述

如果LINESTRING是闭合的,即起点和终点重合,那么该函数返回值为TRUE,对于Polyhedral surface类型来说,该函数返回值可能是非闭合的面或者闭合的几何体。

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1。

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 7.1.5, 9.3.3。

注意

SQL-MM 定义 ST_IsClosed(NULL) 结果为 0,但 KGIS 会返回 NULL。

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该函数支持CircularString和Curve几何类型对象。

  • 该函数支持 Polyhedral Surface类型几何对象。

Line String and Point 样例

system=# SELECT ST_IsClosed('LINESTRING(0 0, 1 1)'::geometry);

st_isclosed
-------------
f
(1 row)

system=# SELECT ST_IsClosed('LINESTRING(0 0, 0 1, 1 1, 0 0)'::geometry);

st_isclosed
-------------
t
(1 row)

system=# SELECT ST_IsClosed('MULTILINESTRING((0 0, 0 1, 1 1, 0 0),(0 0, 1 1))'::geometry);

st_isclosed
-------------
f
(1 row)

system=# SELECT ST_IsClosed('POINT(0 0)'::geometry);

st_isclosed
-------------
t
(1 row)

system=# SELECT ST_IsClosed('MULTIPOINT((0 0), (1 1))'::geometry);

st_isclosed
-------------
t
(1 row)

Polyhedral Surface 样例

-- A cube --
SELECT ST_IsClosed(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_isclosed
-------------
t

-- Same as cube but missing a side --
SELECT ST_IsClosed(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)) )'));

st_isclosed
-------------
f

参考

ST_IsRing

6.4.19. ST_IsCollection

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

用法

boolean ST_IsCollection(geometry g);

描述

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

  • GEOMETRYCOLLECTION

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

  • COMPOUNDCURVE

注意

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

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该函数支持CircularString和Curve几何类型对象。

样例

system=# SELECT ST_IsCollection('LINESTRING(0 0, 1 1)'::geometry);

st_iscollection
-------------
f
(1 row)

system=# SELECT ST_IsCollection('MULTIPOINT EMPTY'::geometry);

st_iscollection
-------------
t
(1 row)

system=# SELECT ST_IsCollection('MULTIPOINT((0 0))'::geometry);

st_iscollection
-------------
t
(1 row)

system=# SELECT ST_IsCollection('MULTIPOINT((0 0), (42 42))'::geometry);

st_iscollection
-------------
t
(1 row)

system=# SELECT ST_IsCollection('GEOMETRYCOLLECTION(POINT(0
0))'::geometry);

st_iscollection
-------------
t
(1 row)

参考

ST_NumGeometries

6.4.20. ST_IsEmpty

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

用法

boolean ST_IsEmpty(geometry geomA);

描述

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

注意

SQL-MM 规范定义了ST_IsEmpty(NULL) 值为 0, 而KGIS 返回值为 NULL。

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 5.1.7

  • 该函数支持CircularString和Curve几何类型对象

样例

SELECT ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'));

st_isempty
------------
t
(1 row)

SELECT ST_IsEmpty(ST_GeomFromText('POLYGON EMPTY'));

st_isempty
------------
t
(1 row)

SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));

st_isempty
------------
f
(1 row)

SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')) = false;

?column?
----------
t
(1 row)

SELECT ST_IsEmpty(ST_GeomFromText('CIRCULARSTRING EMPTY'));

st_isempty
------------
t
(1 row)

6.4.21. ST_IsRing

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

用法

boolean ST_IsRing(geometry g);

描述

如果LINESTRING是简单、闭合的,则返回TRUE即满足 ST_IsClosed (ST_StartPoint((g)) ~= ST_Endpoint((g))) 并且ST_IsSimple (LINESTRING本身不自我相交)。

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1. 2.1.5.1

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 7.1.6

注意

SQL-MM 规范定义了ST_IsRing (NULL) 值为 0, 而KGIS 返回值为 NULL。

样例

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  | st_isclosed | st_issimple
-----------+-------------+-------------
t          | t           | t
(1 row)

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  | st_isclosed | st_issimple
-----------+-------------+-------------
f          | t           | f
(1 row)

参考

ST_IsClosed, ST_IsSimple, ST_StartPoint, ST_EndPoint

6.4.22. ST_IsSimple

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

用法

boolean ST_IsSimple(geometry geomA);

描述

如果输入的geometry类型没有不规则的几何点,比如自我相交或者自我相切,则返回值为TRUE.关于更多的OGC定义的geometry对象的简单性和有效性,参考"Ensuring OpenGIS compliancy of geometries"

注意

SQL-MM 规范定义了ST_IsSimple (NULL) 值为 0, 而KGIS 返回值为 NULL.

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 5.1.8

  • 这个函数支持3D对象,并且不会删除z坐标

样例

SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));

st_issimple
-------------
t
(1 row)

SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)'));

st_issimple
-------------
f
(1 row)

参考

ST_IsValid

6.4.23. ST_M

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

用法

float ST_M(geometry a_point);

描述

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

注意

该函数还不是OGC SPEC规范中的函数, 但是在这里是为了完善point的坐标抽取函数列表。

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1。

  • 该方法实现了规范 SQL/MM specification.

  • 这个函数支持3D对象,并且不会删除z坐标

样例

SELECT ST_M(ST_GeomFromEWKT('POINT(1 2 3 4)'));

st_m
------
4
(1 row)

参考

ST_GeomFromEWKT , ST_X , ST_Y , ST_Z

6.4.24. ST_MemSize

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

用法

integer ST_MemSize(geometry geomA);

描述

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

该函数是对KingbaseES内置函数 pg_size_pretty, pg_relation_size, pg_total_relation_size 的一个补充。

注意

函数pg_relation_size给出一个表所占用空间比ST_MemSize要少,这是因为pg_relation_size不会把TOAST类型表中存储大型几何对象的字段算进去。而函数pg_total_relation_size 会把所有的普通表、toast类型表和索引都计算进去。

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该函数支持CircularString和Curve几何类型对象。

  • 该函数支持 Polyhedral Surface类型几何对象。

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces (TIN)类型。

样例

--Return how much byte space Boston takes up in our Mass data set
SELECT pg_size_pretty(SUM(ST_MemSize(the_geom))) as totgeomsum,
pg_size_pretty(SUM(CASE WHEN town = 'BOSTON' THEN st_memsize(the_geom) ELSE 0 END)) As
bossum,
CAST(SUM(CASE WHEN town = 'BOSTON' THEN st_memsize(the_geom) ELSE 0 END)*1.00 /
SUM(st_memsize(the_geom))*100 As numeric(10,2)) As perbos
FROM towns;

totgeomsum | bossum | perbos
-----------+--------+------
1522 kB    | 30 kB  | 1.99

SELECT ST_MemSize(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227
150406)'));
--What percentage of our table is taken up by just the geometry
SELECT pg_total_relation_size('public.neighborhoods') As fulltable_size, sum(ST_MemSize(
the_geom)) As geomsize,
sum(ST_MemSize(the_geom))*1.00/pg_total_relation_size('public.neighborhoods')*100 As
pergeom
FROM neighborhoods;

fulltable_size | geomsize | pergeom
---------------+----------+---------------------
262144         |96238     | 36.71188354492187500000

6.4.25. ST_NDims

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

用法

integer ST_NDims(geometry g1);

描述

返回一个geometry类型的坐标维度。 KGIS 支持2 - (x,y) , 3 - (x,y,z) 或 2D 带有测量值m- (x,y,m), 以及 4 - 3D带有测量值m的 (x,y,z,m) 形式。

  • 这个函数支持3D对象,并且不会删除z坐标。

样例

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  | d3point | d2pointm
---------+---------+----------
2        | 3       | 3

参考

ST_CoordDim, ST_Dimension, ST_GeomFromEWKT

6.4.26. ST_NPoints

ST_NPoints — 返回geometry的顶点个数.

用法

integer ST_NPoints(geometry g1);

描述

返回geometry的顶点个数. 对所有的geometry类型都支持。

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该函数支持CircularString和Curve几何类型对象。

  • 该函数支持 Polyhedral Surface类型几何对象。

样例

SELECT ST_NPoints(ST_GeomFromText(
   'LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));

--result
4

--Polygon in 3D space
SELECT ST_NPoints(ST_GeomFromEWKT(
   'LINESTRING(77.29 29.07 1,77.42 29.26 0,77.27 29.31 -1,77.29 29.07 3)'))

--result
4

参考

ST_NumPoints

6.4.27. ST_NRings

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

用法

integer ST_NRings(geometry geomA);

描述

如果输入的几何类型对象是polygon或者multi-polygon,返回环的个数。不像函数NumInteriorRings,ST_NRings函数会把外环也统计进去。

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该函数支持CircularString和Curve几何类型对象。

样例

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  | ninterrings
--------+-------------
1       | 0
(1 row)

参考

ST_NumInteriorRings

6.4.28. ST_NumGeometries

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

用法

integer ST_NumGeometries(geometry geom);

描述

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

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 9.1.4

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持 Polyhedral Surface类型几何对象.

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces (TIN)类型.

样例

--Prior versions would have returned NULL for this
-- in 2.0.0 this returns 1
SELECT ST_NumGeometries(ST_GeomFromText(
   'LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));

--result
1

-- Geometry Collection Example
-- multis count as one geom in a collection

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)))'));
--result
3

参考

ST_GeometryN , ST_Multi

6.4.29. ST_NumInteriorRings

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

用法

integer ST_NumInteriorRings(geometry a_polygon);

描述

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

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 8.2.5

样例

--If you have a regular polygon
SELECT gid, field1, field2, ST_NumInteriorRings(the_geom) AS numholes
FROM sometable;

--If you have multipolygons
--And you want to know the total number of interior rings in the MULTIPOLYGON
SELECT gid, field1, field2, SUM(ST_NumInteriorRings(the_geom)) AS numholes
FROM (SELECT gid, field1, field2, (ST_Dump(the_geom)).geom As the_geom
FROM sometable) As foo
GROUP BY gid, field1,field2;

参考

ST_NumInteriorRing

6.4.30. ST_NumInteriorRing

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

用法

integer ST_NumInteriorRing(geometry a_polygon);

描述

返回geometry对象里面第一个polygon里面包含的内环数,该函数与ST_NumInteriorRings等价。The OpenGIS SPEC规范关于该函数命名有歧义,所以KGIS同时提供了这两种语法。

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 8.2.5

参考

ST_NumInteriorRings

6.4.31. ST_NumPatches

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

用法

integer ST_NumPatches(geometry g1);

描述

返回 Polyhedral Surface的面熟. 对于非polyhedral 几何类型对象返回NULL值.该函数是MM规范里面函数

ST_NumGeometries的别名.如果不在意MM规范的约束,建议使用更快的ST_NumGeometries

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1.

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: ?

  • 该函数支持 Polyhedral Surface类型几何对象.

样例

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)) )'));

result
------------
6

参考

ST_GeomFromEWKT , ST_NumGeometries

6.4.32. ST_NumPoints

ST_NumPoints —返回ST_LineString 或 ST_CircularString值对应的几何对象里面包含的point对象个数.

用法

integer ST_NumPoints(geometry g1);

描述

返回ST_LineString 或 ST_CircularString 值对应的几何对象里面包含的point对象个数. SPEC规范只支持Linestring。该函数是ST_Npoints的别名函数,而ST_Npoints这个函数对包括LINESTRING类型的对象返回的是对象的顶点数,建议使用多用途同时支持多类型的ST_Npoints函数

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1.

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 7.2.4

样例

SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));

result
------------
4

参考

ST_NPoints

6.4.33. ST_PatchN

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

用法

geometry ST_PatchN(geometry geomA, integer n);

描述

返回至少包含一个面的geometry对象的第N个面,支持的输入类型是POLYHEDRALSURFACE,POLYHEDRALSURFACEM.

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

注意

几何对象至少包含一个面

注意

如果想得到一个几何对象的所有子几何对象(这里是几何面),使用ST_Dump更高效

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: ?

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持 Polyhedral Surface类型几何对象.

样例

--Extract the 2nd face of the polyhedral surface
SELECT ST_AsEWKT(ST_PatchN(geom, 2)) As geomewkt
FROM (
VALUES (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
foo(geom);

geomewkt
---------------------------------------------
POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))

参考

ST_AsEWKT , ST_GeomFromEWKT , ST_Dump , ST_GeometryN , ST_NumGeometries

6.4.34. ST_PointN

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

用法

geometry ST_PointN(geometry a_linestring, integer n);

描述

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

样例

-- Extract all POINTs from a LINESTRING
SELECT ST_AsText(
ST_PointN(
column1,
generate_series(1, ST_NPoints(column1))))
FROM ( VALUES ('LINESTRING(0 0, 1 1, 2 2)'::geometry) ) AS foo;

st_astext
------------
POINT(0 0) POINT(1 1)
POINT(2 2)(3 rows)

--Example circular string
SELECT ST_AsText(ST_PointN(ST_GeomFromText('CIRCULARSTRING(1 2, 3 2, 1 2)'),2));

st_astext
----------
POINT(3 2)

参考

ST_NPoints

6.4.35. ST_Points

ST_Points — 返回一个 MultiPoint 对象,其中包含输入几何对象的所有坐标点。

用法

geometry ST_Points( geometry geom );

描述

返回一个 MultiPoint 对象,其中包含输入几何对象的所有坐标点。 该函数不会删除输入几何对象中重复的点,包括环状对象的起点和终点(如果不希望保留重复的点,可以使用 ST_RemoveRepeatedPoints 函数来删除)。

如果输入几何对象有 M 坐标和 Z 坐标,这些维度也会被保留下来。

  • 该函数支持 Circular String 和 Curve

  • 该函数支持3D对象,并且不会丢弃Z坐标

样例

SELECT ST_AsText(ST_Points('POLYGON Z ((30 10 4,10 30 5,40 40 6, 30 10 4))'));

result
------------
MULTIPOINT Z (30 10 4,10 30 5,40 40 6, 30 10 4)

参考

ST_RemoveRepeatedPoints

6.4.36. ST_StartPoint

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

用法

geometry ST_StartPoint(geometry geomA);

描述

返回LINESTRING几何对象的起点,如果输入类型不是LINESTRING返回NULL

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 7.1.3

  • 这个函数支持3D对象,并且不会删除z坐标

样例

SELECT ST_AsText(ST_StartPoint('LINESTRING(0 1, 0 2)'::geometry));

st_astext
------------
POINT(0 1)
(1 row)

SELECT ST_StartPoint('POINT(0 1)'::geometry) IS NULL AS is_null;

is_null
---------
t
(1 row)

--3d line
SELECT ST_AsEWKT(ST_StartPoint('LINESTRING(0 1 1, 0 2 2)'::geometry));

st_asewkt
------------
POINT(0 1 1)
(1 row)

参考

ST_EndPoint , ST_PointN

6.4.37. ST_Summary

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

用法

text ST_Summary(geometry g);text ST_Summary(geography g);

描述

返回geometry对象的文本概要. 该函数返回的文本描述中,含有中括号的标识意义如下

  • M: 有一个 M 坐标

  • Z: 有一个 Z 坐标

  • B: 有一个缓冲区

  • G: 是一个地理坐标

  • S: 有空间参考系

样例

=# 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                         | geog
-----------------------------+--------------------------
LineString[B] with 2 points  | Polygon[BGS] with 1 rings
                             | ring 0 has 5 points
:
(1 row)

=# 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                      | geom_poly
-------------------------------+--------------------------
LineString[ZBGS] with 2 points | Polygon[ZBS] with 1 rings
: ring 0 has 5 points
:
(1 row)

参考

ST_Force3DM, ST_Force3DZ, ST_Force2D, geography ST_IsValid, ST_IsValid, ST_IsValidReason, ST_IsValidDetail

6.4.38. ST_X

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

用法

float ST_X(geometry a_point);

描述

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

样例

SELECT ST_X(ST_GeomFromEWKT('POINT(1 2 3 4)'));

st_x
------
1
(1 row)

SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));

st_y
------
1.5
(1 row)

参考

ST_Centroid , ST_GeomFromEWKT , ST_M , ST_XMax , ST_XMin , ST_Y , ST_Z

6.4.39. ST_Y

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

用法

float ST_Y(geometry a_point);

描述

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

  • 该方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1.

  • 该方法实现了规范 SQL/MM specification. SQL-MM 3: 6.1.4

  • 这个函数支持3D对象,并且不会删除z坐标

样例

SELECT ST_Y(ST_GeomFromEWKT('POINT(1 2 3 4)'));

st_y
------
2
(1 row)

SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));

st_y
------
1.5
(1 row)

参考

ST_Centroid , ST_GeomFromEWKT , ST_M , ST_X , ST_YMax , ST_YMin , ST_Z

6.4.40. ST_Z

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

用法

float ST_Z(geometry a_point);

描述

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

  • 该方法实现了规范 SQL/MM specification.

  • 这个函数支持3D对象,并且不会删除z坐标

样例

SELECT ST_Z(ST_GeomFromEWKT('POINT(1 2 3 4)'));

st_z
------
3
(1 row)

参考

ST_GeomFromEWKT , ST_M , ST_X , ST_Y , ST_ZMax , ST_ZMin

6.4.41. ST_Zmflag

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

用法

smallint ST_Zmflag(geometry geomA);

描述

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

  • 这个函数支持3D对象,并且不会删除z坐标。

  • 该函数支持CircularString和Curve几何类型对象。

样例

SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'));

st_zmflag
-----------
0

SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRINGM(1 2 3, 3 4 3)'));

st_zmflag
-----------
1

SELECT ST_Zmflag(ST_GeomFromEWKT('CIRCULARSTRING(1 2 3, 3 4 3, 5 6 3)'));

st_zmflag
-----------
2

SELECT ST_Zmflag(ST_GeomFromEWKT('POINT(1 2 3 4)'));

st_zmflag
-----------
3

参考

ST_CoordDim , ST_NDims , ST_Dimension

 

原网站

版权声明
本文为[沉舟侧畔千帆过_]所创,转载请带上原文链接,感谢
https://blog.csdn.net/arthemis_14/article/details/126246830