空间关系和测量函数

ST_3DClosestPoint

ST_3DClosestPoint — 返回3维内离g2几何对象最近的g1上的点。这个点也是g1和g2之间最短的线的第一个点。

语法

st_3dclosestpoint ::=

参数

g1

geometry类型。

g2

geometry类型。

返回值

返回值为geometry类型。

示例

select st_astext(st_3dclosestpoint('linestring(0 0,1 1,2 0)'::geometry, 'linestring(0 2 3, 3 2 3)'::geometry));
ST_ASTEXT(text)      |
---------------------
POINT Z (1 1 3)      |
总数目:1

ST_3DDistance

ST_3DDistance — 对于3维的geometry类型对象,返回两个几何对象的最短笛卡尔距离(基于SRS表),单位以投影系单位为准。

语法

st_3ddistance ::=

参数

g1

geometry类型。

g2

geometry类型。

返回值

返回值为float类型。

示例

select st_3ddistance('linestring(0 0 1,1 1 2,2 0 3)'::geometry, 'linestring(0 2, 3 2)'::geometry);
ST_3DDISTANCE(double precision)      |
-------------------------------------
1                                    |
总数目:1

ST_3DDWithin

ST_3DDWithin — 如果两个3d(z)几何对象的三维距离指定的距离值范围内,返回TRUE。

语法

st_3ddwithin ::=

参数

g1

geometry类型。

g2

geometry类型。

distance_of_srid

double类型。

返回值

返回值为boolean类型。

示例

SELECT ST_3DDWithin(a,b,5) FROM ( SELECT 'POINT(1 1 1)'::geometry as a, 'POINT(3 2 7)'::geometry as b ) as foo;
ST_3DDWITHIN(boolean)      |
---------------------------
false                      |
总数目:1

ST_3DDFullyWithin

ST_3DDFullyWithin — 如果所有三维几何图形彼此之间的距离都在指定范围内,则返回true。

语法

st_3ddfullywithin ::=

参数

g1

geometry类型。

g2

geometry类型。

distance

double类型。

返回值

返回值为boolean类型。

该函数的输入几何对象必须都在同一个坐标投影中,有相同的SRID。

示例

SELECT ST_3DDFullyWithin(a,b,5) FROM ( SELECT 'POINT(1 1 1)'::geometry as a, 'POINT(3 2 7)'::geometry as b ) as foo;
ST_3DDFULLYWITHIN(boolean)      |
--------------------------------
false                           |
总数目:1

SELECT ST_3DDFullyWithin(a,b,5) FROM ( SELECT 'POINT(1 1 1)'::geometry as a, 'POINT(3 2 4)'::geometry as b ) as foo;
ST_3DDFULLYWITHIN(boolean)      |
--------------------------------
true                            |
总数目:1

ST_3DIntersects

ST_3DIntersects — 如果几何对象在3维空间内相交,则返回TRUE,该函数只适用于points, linestrings, polygons, polyhedral surface (area)类型。

语法

st_3dintersects ::=

参数

g1

geometry类型。

g2

geometry类型。

返回值

返回值为boolean类型。覆盖、接触(相切)、包含都属于空间相交。上述的任意一种都返回TRUE,那么这些几何对象也是空间相交的。空间不相交则返回FALSE。

示例

SELECT ST_3DIntersects(pt, line), ST_Intersects(pt,line)
FROM (SELECT 'POINT(0 0 2)'::geometry As pt,
'LINESTRING (0 0 1, 0 2 3 )'::geometry As line) As foo;
ST_3DINTERSECTS(boolean)      |ST_INTERSECTS(boolean)      |
----------------------------------------------------------
false                         |true                        |
总数目:1

ST_3DLongestLine

ST_3DLongestLine — 返回两个几何对象之间最长的3维线段。

语法

st_3dlongestline ::=

参数

g1

geometry类型。

g2

geometry类型。

返回值

返回值为geometry类型。

如果有多个线段都是最长线段,那么返回第一个最长的。该线段的起点在g1,终点在g2。该函数返回的线段的长度与用函数ST_3DMaxDistance计算g1和g2的距离值一样。

示例

SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt,
ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt
FROM (SELECT 'POINT(100 100 30)'::geometry As pt, 
'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line
) As foo;
LOL3D_LINE_PT(text)      |LOL2D_LINE_PT(text)      |
--------------------------------------------------
LINESTRING(50 75 1000,100|LINESTRING(98 190,100 100|
 100 30)                 |)                        |
总数目:1

ST_3DMaxDistance

ST_3DMaxDistance — 对于3维的geometry类型对象,返回两个几何对象的最大笛卡尔距离(基于SRS表),单位以投影系单位为准。

语法

st_3dmaxdistance ::=

参数

g1

geometry类型。

g2

geometry类型。

返回值

返回值为float类型。

示例

SELECT ST_3DMaxDistance(a,b) FROM ( SELECT 'POINT(1 1 1)'::geometry as a, 'POINT(3 2 7)'::geometry as b ) as foo;
ST_3DMAXDISTANCE(double precision)      |
----------------------------------------
6.40312423743285                        |
总数目:1

ST_3DShortestLine

ST_3DShortestLine — 返回两个3维几何对象之间最短的线段。

语法

st_3dshortestline ::=

参数

g1

geometry类型。

g2

geometry类型。

返回值

返回值为float类型。

如果函数找到这两个3维几何对象之间不止一条线段,那么只会返回第一条。如果g1和g2只在一个点相交,该函数会返回一条返回起点和终点都在该交点的线段。

如果g1和g2相交不止一个点,该函数会返回起点和终点都在同一点的线段,但该交点可以是g1和g2相交的任意一点。返回的线段起点总是属于g1,终点属于g2。

该函数返回的线段的3D长度总是和ST_3Ddistance计算g1和g2之间的距离值是一样的。

示例

SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt,
ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_line_pt
FROM (SELECT 'POINT(100 100 30)'::geometry As pt,
'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line
) As foo;
SHL3D_LINE_PT(text)      |SHL2D_LINE_PT(text)      |
--------------------------------------------------
LINESTRING(54.69937988676|LINESTRING(73.07692307692|
19 128.935022917228 11.5|31 115.384615384615,100 |
475869506606,100 100 30) |100)                     |
总数目:1

ST_Area

ST_Area — 返回输入对象是polygon或者multi-polygon对象的面积。对于geometry对象来说,面积单位是SRID规定的单位,对于geography对象,面积是平方米。

语法

st_area ::=

参数

g1

geometry类型。

g2

geometry类型。

返回值

返回值为float类型。

如果想要计算更快但精度略低,需要计算球面积。使用方法如下:ST_Area(geog,false)。

示例

-- 返回马萨诸塞州的一个地块的平方英尺的面积,并转换得到平方米。注意:这里返回的结果是平方英尺,因为SRID为
-- 2249,是参考系Mass State Plane 坐标系的单位英尺(关于该参考系,请参考:
-- http://www.mass.gov/anf/research-and-tech/it-serv-and-support/application-serv/office-of-geographic-information-massgis/datalayers/overview.html)
SELECT ST_Area(the_geom) As sqft, ST_Area(the_geom) * POWER(0.3048,2) As sqm
FROM (SELECT ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
743265 2967450,743265.625 2967416,743238 2967416))',2249) ) As foo(the_geom);
SQFT(double precision)      |SQM(double precision)      |
-------------------------------------------------------
928.625                     |86.27208552                |
总数目:1

ST_Azimuth

ST_Azimuth — 返回几何对象点A从正北方向按顺时针旋转到点B时候所需要的角度。

语法

st_azimuth ::=

参数

pointA

geometry类型或者geography类型。

pointB

geometry类型或者geography类型。

返回值

返回值为float类型。

返回几何对象点A从正北方向按顺时针旋转到点B时候所需要的角度,如果两个点重合,则返回NULL值。

该方位角以正北方向为标准起始线,该线定义如下:North = 0; East = PI/2; South = PI; West = 3PI/2。

方位角是一个数学概念,定义为参考平面和点之间的角度,角度单位为弧度。可以使用内置的函数degrees()将单位转换为度。

示例

SELECT degrees(ST_Azimuth(ST_Point(25, 45), ST_Point(75, 100))) AS degA_B,
degrees(ST_Azimuth(ST_Point(75, 100), ST_Point(25, 45))) AS degB_A;
DEGA_B(double precision)      |DEGB_A(double precision)      |
------------------------------------------------------------
42.2736890060937              |222.273689006094              |
总数目:1

ST_Angle

ST_Angle — 返回3个点之间或2个向量(4个点或2条线)之间的角度。

语法

st_angle ::=

参数

point1 point2 point3 point4

geometry类型。

line1 line2

geometry类型。

返回值

返回值为float类型。

对于3个点,计算P1P2P3顺时针测量的角度。如果输入为2行,则将行的第一个点和最后一个点作为4点。对于4个点,计算P1P2、P3P4顺时针测量的角度。结果总是正值,介于0到2*Pi弧度之间。使用成对或点的方位角。

ST_角(P1,P2,P3)=ST_角(P2,P1,P2,P3)

结果以弧度为单位,可以使用内置的函数degrees()转换为度,如示例所示。

示例

--- ST_Angle(lines)
SELECT 'ST_Angle_2_lines', St_Angle(l1,l2)
	FROM (SELECT ST_GeomFromtext('LINESTRING(0 1,0 0)') AS l1
	, ST_GeomFromtext('LINESTRING(1 0, 2 0)') AS l2);
?COLUMN?(varchar)      |ST_ANGLE(double precision)      |
-------------------------------------------------------
ST_Angle_2_lines       |4.71238898038469                |
总数目:1

SELECT ST_Angle(ST_Point(0,1),ST_Point(0,0),ST_Point(1,0));
ST_ANGLE(double precision)      |
--------------------------------
1.5707963267949                 |
总数目:1

SELECT ST_Angle(ST_Point(0,1),ST_Point(0,0),ST_Point(1,0),ST_Point(2,1));
ST_ANGLE(double precision)      |
--------------------------------
3.92699081698724                |
总数目:1

ST_Centroid

ST_Centroid — 返回一个几何对象的几何中心。

语法

st_centroid ::=

参数

geom

geometry类型。

geog

geography类型。

default_use_spheroid

boolean类型。默认值为true。

返回值

输入为geometry类型时,返回值为geometry类型。输入为geography类型时,返回值为geography类型。

返回一个几何对象的中心,或者等价地返回一个几何对象的质心,即一个点。关于多点几何对象 [MULTI]POINT,返回的是输入几何对象坐标的的算术平均值。

对于[MULTI]LINESTRING几何类型对象,返回的是每个线段的加权长度。对于[MULTI]POLYGONs,加权值以面积来算。如果输入的是一个EMPTY空几何对象,将返回GEOMETRYCOLLECTION类型几何对象。

如果输入的是NULL,则返回NULL。几何对象的中心等同于最高维度几何对象几何的中心(因为较低的维度几何对象对中心的加权贡献为0)。

示例

SELECT ST_AsText(ST_Centroid('MULTIPOINT ( -1 0, -1 2, -1 3, -1 4, -1 7, 0 1, 0 3, 1 1, 2 0, 6 0, 7 8, 9 8, 10 6 )'));
ST_ASTEXT(text)      |
---------------------
POINT(2.3076923076923|
1 3.30769230769231)  |
总数目:1

SELECT ST_AsText(ST_Centroid('LINESTRING(-20 35, 8 46)'::geography));
ST_ASTEXT(text)      |
---------------------
POINT(-7.174650404964|
83 41.3491403672106) |
总数目:1

ST_ClosestPoint

ST_ClosestPoint — 返回2维平面内离geom2几何对象最近的geom1上的点。这个点也是geom1和geom2之间最短的线的第一个点。

语法

st_closestpoint ::=

参数

geom1

geometry类型。

geom2

geometry类型。

返回值

返回值为geometry类型。

如果输入对象是3D几何对象,你应该选择使用ST_3DClosestPoint。

示例

SELECT 
ST_AsText(ST_ClosestPoint(pt,line) ) As cp_pt_line,
ST_AsText(ST_ClosestPoint(line,pt )) As cp_line_pt
FROM (SELECT 'POINT(100 100)'::geometry As pt,
'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry As line
) As foo;
CP_PT_LINE(text)      |CP_LINE_PT(text)      |
--------------------------------------------
POINT(100 100)        |POINT(73.0769230769231|
                      | 115.384615384615)    |
总数目:1

ST_ClusterDBSCAN

ST_ClusterDBSCAN — 窗口函数,返回每个输入几何体所在的簇的整数id,该函数基于基于密度的应用程序空间聚类(DBSCAN)算法的2D实现。

语法

st_clusterdbscan ::=

参数

geom

geometry类型。如果输入的几何图形不符合加入任何其他群集的条件,则将为其分配一个NULL群集编号。

eps

float类型。

minpoints

integer类型。

返回值

返回值为integer类型。

该函数与ST_ClusterKMeans不同,它不需要指定簇的数量,而是使用所需的距离(eps)和密度(minpoints)参数来构造每个簇。

输入几何图形将被添加到簇中,前提是:

  • 一个“core”几何体,至少在minpoints输入几何体(包括其本身)的eps距离内,或
  • 一个“border”几何体,即在核心几何体的eps距离内。

请注意,在多个簇中,边界几何图形可能在核心几何图形的eps距离内;在这种情况下,两种分配都是正确的,边界几何体将被任意分配到一个可用簇。

在这些情况下,可以使用少于minpoints的几何图形生成正确的簇。当边界几何体的赋值不明确时,如果窗口定义中包含ORDER BY子句,则重复调用ST_ClusterDBSCAN将产生相同的结果,但集群赋值可能与相同算法的其他实现不同。

示例

WITH
pts AS (
    SELECT  ST_MakePoint(n, 0) As geom
    FROM    Generate_Series(0, 5) AS n
    )
SELECT ST_ClusterDBSCAN(geom, 1, 1) OVER() AS clst_id,
    ST_AsText(geom) AS geom
FROM pts;

ST_ClusterIntersecting

ST_ClusterIntersecting — 聚合函数,返回包含一组几何图形的连接组件的数组。

语法

st_clusterintersecting ::=

参数

set_geom

geometry 集合类型。

返回值

返回值为geometry[]类型。

ST_ClusterIntersecting是一个聚合函数,返回一个GeometryCollection数组,其中每个GeometryCollection代表一组相互连接的几何图形。

示例

WITH testdata AS
(SELECT unnest(ARRAY['LINESTRING (0 0, 1 1)'::geometry,
'LINESTRING (5 5, 4 4)'::geometry,
'LINESTRING (6 6, 7 7)'::geometry,
'LINESTRING (0 0, -1 -1)'::geometry,
'POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0))'::geometry]) AS geom)
SELECT ST_AsText(unnest(ST_ClusterIntersecting(geom))) FROM testdata;


SELECT ST_ClusterIntersecting(ARRAY['LINESTRING (0 0, 1 1)'::geometry, 'LINESTRING (5 5, 4 4)'::geometry]);
ST_CLUSTERINTERSECTING(_GEOMETRY)      |
---------------------------------------
{01070000000100000001020000000200000000|
00000000000000000000000000000000000000|
0000F03F000000000000F03F:0107000000010|
00000010200000002000000000000000000144|
00000000000001440000000000000104000000|
00000001040}                           |
总数目:1

ST_ClusterKMeans

ST_ClusterKMeans — 窗口函数,返回每个输入几何体所在的簇的整数id。

语法

st_clusterkmeans ::=

参数

set_geom

geometry 集合类型。

number_of_clusters

integer类型。

返回值

返回值为integer类型。

返回每个输入几何体的基于二维距离的k均值聚类数。用于聚类的距离是几何体质心之间的距离。

示例

DROP TABLE parcels;
CREATE TABLE parcels AS
SELECT ST_Subdivide(ST_Buffer('LINESTRING(40 100, 98 100, 100 150, 60 90)'::geometry,
40, 'endcap=square'::text),12) As geom;

SELECT ST_ClusterKMeans(geom,3) over () FROM parcels;
ST_CLUSTERKMEANS(int)      |
---------------------------
2                          |
---------------------------
0                          |
---------------------------
0                          |
---------------------------
2                          |
---------------------------
0                          |
---------------------------
1                          |
---------------------------
1                          |
总数目:7
DROP TABLE parcels;

ST_ClusterWithin

ST_ClusterWithin — 聚合函数,返回GeometryCollection数组,其中每个GeometryCollection表示一组几何图形,它们之间的间距不超过指定的距离(距离是以SRID为单位的笛卡尔距离)。

语法

st_clusterwithin ::=

参数

set_geom

geometry 集合类型。

distance

float类型。

返回值

返回值为geometry[]类型。

示例

SELECT ST_AsText(unnest(ST_ClusterWithin(ARRAY['SRID=4326;POINT (3 7)'::geometry, 'SRID=4326;LINESTRING (3 0, 3 9)'], 0)));
ST_ASTEXT(text)      |
---------------------
GEOMETRYCOLLECTION(PO|
INT(3 7),LINESTRING(|
3 0,3 9))            |
总数目:1

WITH testdata AS
(SELECT ARRAY['LINESTRING (0 0, 1 1)'::geometry, 'LINESTRING (5 5, 4 4)'::geometry, 'LINESTRING (6 6, 7 7)'::geometry, 'LINESTRING (0 0, -1 -1)'::geometry, 'POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0))'::geometry] AS geom)
SELECT ST_AsText(unnest(ST_ClusterWithin(geom, 1.4))) FROM testdata;

ST_Contains

ST_Contains — 当且仅当几何对象B的所有点没有在几何对象A的外部,并且B最少有一个点在A的内部(意思A把B完全包含了)返回true。

语法

st_contains ::=

参数

geomA

geometry类型。

geomB

geometry类型。

返回值

返回值为boolean类型。

该定义的一个重要差别是几何对象不包含B的边界,但A会包含自己的边界。和函数ST_ContainsProperly对比而言,ST_ContainsProperly函数几何对象不会完全包含自身边界(译者注:文字翻译如此,待定)。如果几何对象B完全在几何对象A范围内,则返回TRUE。

该函数只有在输入的几何对象处于相同的坐标投影系中,有相同的SRID才有使用意义。函数ST_Contains 是函数ST_Within逆功能函数. 因此ST_Contains(A,B)的值和ST_Within(B,A)值是一样的,除非输入的几何对象是无效的几何对象,因为这种情况下返回的总是错误的。

注解

该函数会自动生成一个bounding box用于利用几何对象上的索引。如果不想使用索引,请使用函数_ST_Contains。

示例

-- PIP - point within polygon
SELECT 'contains100', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, 'POINT(5 5)'::geometry);
?COLUMN?(varchar)      |ST_CONTAINS(boolean)      |
-------------------------------------------------
contains100            |true                      |
总数目:1

-- PIP - point on vertex of polygon
SELECT 'contains101', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, 'POINT(0 0)'::geometry);
?COLUMN?(varchar)      |ST_CONTAINS(boolean)      |
-------------------------------------------------
contains101            |false                     |
总数目:1

-- PIP - point outside polygon
SELECT 'contains102', ST_contains('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, 'POINT(-1 0)'::geometry);
?COLUMN?(varchar)      |ST_CONTAINS(boolean)      |
-------------------------------------------------
contains102            |false                     |
总数目:1

ST_ContainsProperly

ST_ContainsProperly — 如果输入几何对象B和几何对象A的内部相交,但不和A的边界(或外部)有接触,那么返回TRUE。

语法

st_containsproperly ::=

参数

geomA

geometry类型。

geomB

geometry类型。

返回值

返回值为boolean类型。

该函数相比较函数ST_Contains 和函数 ST_Intersects 的优势是该函数计算更高效,因为没有必要对每个点计算拓扑的必要。一个使用该函数的例子是计算包含一个很大的多边形几何对象的集合的交集。

因为计算交集是一个相当慢的操作,使用函数ST_ContainsProperly来过滤掉完全在区域内部的测试对象会更高效。在这些样例中,交集是一个优先的原始测试几何对象。

注解

该函数会自动生成一个bounding box用于利用几何对象上的索引。如果不想使用索引,请使用函数_ST_ContainsProperly。

示例

drop table v;
create table v(p geometry);
INSERT INTO v VALUES
('LINESTRING(1 10, 9 10, 9 8)'),
('LINESTRING(1 2, 2 2, 3 3)'),
('LINESTRING(1 10, 9 10, 10 10)');

SELECT ST_ContainsProperly('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry, p) FROM v;
ST_CONTAINSPROPERLY(boolean)      |
----------------------------------
false                             |
----------------------------------
true                              |
----------------------------------
false                             |
总数目:3
drop table v;

ST_Covers

ST_Covers — 如果geometry或geography对象B的所有点都不在geometry或geography对象A的外部,则返回1(即TRUE)。

语法

st_covers ::=

参数

geoA

geometry类型或者geography类型。

geoB

geometry类型或者geography类型。

返回值

返回值为boolean类型。

注解

该函数会自动生成一个bounding box用于利用几何对象上的索引。如果不想使用索引,请使用函数_ST_Covers。

示例

SELECT ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(1 10, 9 10, 9 8)');
ST_COVERS(boolean)      |
------------------------
true                    |
总数目:1

SELECT ST_Covers('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))', 'LINESTRING(1 11, 10 10, 10 8)');
ST_COVERS(boolean)      |
------------------------
false                   |
总数目:1

ST_CoveredBy

ST_CoveredBy — 如果geometry或geography对象A的所有点都不在geometry或geography对象B的外部,则返回1(即TRUE)。

语法

st_coveredby ::=

参数

geoA

geometry类型或者geography类型。

geoB

geometry类型或者geography类型。

返回值

返回值为boolean类型。

注解

该函数会自动生成一个bounding box用于利用几何对象上的索引。如果不想使用索引,请使用函数_ST_CoveredBy。

示例

SELECT ST_CoveredBy('LINESTRING(1 10, 9 10, 9 8)' , 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))' );
ST_COVEREDBY(boolean)      |
---------------------------
true                       |
总数目:1

SELECT ST_CoveredBy('LINESTRING(1 11, 10 10, 10 8)' , 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))');
ST_COVEREDBY(boolean)      |
---------------------------
false                      |
总数目:1

ST_Crosses

ST_Crosses — 如果两个输入的对象有部分交集但不是完全相交,则该函数返回TRUE。

语法

st_crosses ::=

参数

geomA

geometry类型。

geomB

geometry类型。

返回值

返回值为boolean类型。

输入的几何对象之间的交集不能是空集,同时相交集合对象的维度必须比两个输入对象的最大维度值要小。除此之外,两个几何对象相交的部分不能是输入的其中任意一个对象(即一个对象包含了另一个对象)。否则返回FALSE。

注解

该函数会自动生成一个bounding box以便充分利用几何对象上的任意索引。

示例

SELECT ST_crosses('LINESTRING(0 10, 0 -10)'::geometry, 'LINESTRING(0 0, 1 1)'::geometry);
ST_CROSSES(boolean)      |
-------------------------
false                    |
总数目:1

SELECT ST_crosses('LINESTRING(0 10, 0 -10)'::geometry, 'LINESTRING(-4 0, 1 1)'::geometry);
ST_CROSSES(boolean)      |
-------------------------
true                     |
总数目:1

ST_LineCrossingDirection

ST_LineCrossingDirection — 根据两个LINESTRING,返回一个范围在-3到3之间的数字,该数字表示这两个LINESTRING的相交方式。0表示这两个几何对象没有相交关系。

语法

st_linecrossingdirection ::=

参数

geomA

geometry类型。

geomB

geometry类型。

返回值

返回值为integer类型。

根据两个LINESTRING,返回一个范围在-3到3之间的数字,该数字表示这两个LINESTRING的相交方式。0表示这两个几何对象没有相交关系。该函数返回的整型常量值定义如下:

  • 0: LINE NO CROSS
  • -1: LINE CROSS LEFT
  • 1: LINE CROSS RIGHT
  • -2: LINE MULTICROSS END LEFT
  • 2: LINE MULTICROSS END RIGHT
  • -3: LINE MULTICROSS END SAME FIRST LEFT
  • 3: LINE MULTICROSS END SAME FIRST RIGHT

示例

SELECT ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 ,
    ST_LineCrossingDirection(foo.line2, foo.line1) As l2_cross_l1
FROM (SELECT
    ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As line1, ST_GeomFromText('LINESTRING(2.99 90.16,71 74,20 140,171 154)') As line2 ) As foo;
L1_CROSS_L2(int)      |L2_CROSS_L1(int)      |
--------------------------------------------
-2                    |2                     |
总数目:1


SELECT ST_LineCrossingDirection(foo.line1, foo.line2) As l1_cross_l2 
FROM (SELECT
    ST_GeomFromText('LINESTRING(1 1,89 114,40 70,86 43)') As line1, ST_GeomFromText('LINESTRING(1 1,71 74,20 140,171 154)') As line2 ) As foo;
L1_CROSS_L2(int)      |
----------------------
-3                    |
总数目:1

ST_Disjoint

ST_Disjoint — 如果几何图形不“在空间上相交”——如果它们不共享任何空间,则返回TRUE。

语法

st_disjoint ::=

参数

geomA

geometry类型。

geomB

geometry类型。

返回值

返回值为boolean类型。

覆盖、相切、包含都不是空间不相交,如果上述的任意一种情况返回TRUE,那么都意味着几何对象没有空间不相交。空间相交的话该函数返回FALSE。

示例

SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
ST_DISJOINT(boolean)      |
--------------------------
true                      |
总数目:1

SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);
ST_DISJOINT(boolean)      |
--------------------------
false                     |
总数目:1

ST_Distance

ST_Distance — 对于 geometry 类型以投影单位(基于空间参照系)返回两个几何之间的二维笛卡尔距离。对于“geography类型”,默认值为返回两个地理位置之间的最小测地距离(以米为单位)。

语法

st_distance ::=

参数

geomA geomB

geometry类型。

geogA geogB

geography类型。

use_spheroid

boolean类型。如果use_spheroid参数传递的值是false,那么返回的是球面距离,而不是椭圆面距离。

返回值

返回值为float类型。

示例

SELECT ST_Distance(ST_GeomFromText('POINT(-72.1235 42.3521)',4326),ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)', 4326));	
ST_DISTANCE(double precision)      |
-----------------------------------
0.00150567726382822                |
总数目:1


SELECT ST_Distance(gg1, gg2, true) As spheroid_dist, ST_Distance(gg1, gg2, false) As sphere_dist
FROM (SELECT
ST_GeographyFromText('SRID=4326;POINT(-72.1235 42.3521)') As gg1,
ST_GeographyFromText('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)') As gg2
) As foo;
SPHEROID_DIST(double precision)      |SPHERE_DIST(double precision)      |
------------------------------------------------------------------------
123.80207675                         |123.47573692                       |
总数目:1

ST_MinimumClearance

ST_MinimumClearance — 返回几何体的最小间隙,这是几何体坚固性的度量。

语法

st_minimumclearance ::=

参数

geom

geometry类型。

返回值

返回值为float类型。

根据ST_IsValid(多边形)或ST_IsSimple(线)的规定,当几何体满足有效性标准时,如果其中一个顶点移动了一小段距离,则几何体将变得无效,这并不少见,在转换为基于文本的格式(如WKT、KML、GML GeoJSON)或不使用双精度浮点坐标的二进制格式(MapInfo选项卡)时可能会发生这种情况。

几何体的“最小间隙”是指可以移动几何体顶点以生成无效几何体的最小距离。可以将其视为几何体稳健性的定量度量,其中最小间隙值的增加表示稳健性的增加。

如果几何体的最小间隙为e,则可以说:

  • 几何体中没有两个不同的顶点之间的距离小于e。
  • 没有任何顶点距离不是端点的线段的距离小于e。

如果几何体不存在最小间隙(例如,单点或点相同的多点),则ST_MinimumClearance将返回无穷大。

示例

SELECT ST_MinimumClearance('POLYGON ((0 0, 1 0, 1 1, 0.5 3.2e-4, 0 0))');
ST_MINIMUMCLEARANCE(double precision)      |
-------------------------------------------
0.00032                                    |
总数目:1

ST_MinimumClearanceLine

ST_MinimumClearance — 返回跨越几何体最小间隙的两点的LINESTRING。

语法

st_minimumclearance ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。返回跨越几何体最小间隙的两点的LINESTRING。如果几何体没有最小间隙,将返回LINESTRING EMPTY。

示例

SELECT ST_AsText(ST_MinimumClearanceLine('POLYGON ((0 0, 1 0, 1 1, 0.5 3.2e-4, 0 0))'));
ST_ASTEXT(text)      |
---------------------
LINESTRING(0.5 0.0003|
2,0.5 0)             |
总数目:1

ST_HausdorffDistance

ST_HausdorffDistance — 返回两个几何对象的Hausdorff 距离。该距离用来表示两个几何对象有多类似或有多不相同。距离单位是这两个几何对象所在的空间参考系所用的距离单位。

语法

st_hausdorffdistance ::=

参数

geom1 geom2

geometry类型。

densifyFrac

float类型。当指定参数densifyFrac时候,该函数在计算离散豪斯多夫距离前会先把一个分段致密化。每一个分段会被分割成距离相等的更小分段,而所有分段的总距离最接近给出的大分段总距离。即微积分计算方式。

返回值

返回值为float类型。

该函数是离散豪斯多夫距离的算法实现。这是针对于离散点的豪斯多夫距离。

注解

当前的实现只支持顶点作为离散位置。这可以扩展到允许使用任意密度的点。

该算法不等同于标准的Hausdorff距离。然而,它计算出一个近似值,该近似值适用于大量有用的情况。这个子集的一个重要部分是大致平行且长度大致相等的LINESTRING。这是line匹配的有用指标。

示例

SELECT ST_HausdorffDistance('LINESTRING (0 0, 2 0)'::geometry,'MULTIPOINT (0 1, 1 0, 2 1)'::geometry);
ST_HAUSDORFFDISTANCE(double precision)      |
--------------------------------------------
1                                           |
总数目:1

SELECT st_hausdorffdistance('LINESTRING (130 0, 0 0, 0 150)'::geometry, 'LINESTRING (10 10, 10 150, 130 10)'::geometry, 0.5);
ST_HAUSDORFFDISTANCE(double precision)      |
--------------------------------------------
70                                          |
总数目:1

ST_FrechetDistance

ST_FrechetDistance — 返回两个几何体之间的Fréchet距离。这是曲线之间的相似性度量,考虑了曲线上点的位置和顺序。单位采用几何图形的空间参考系统的单位。

语法

st_frechetdistance ::=

参数

geom1 geom2

geometry类型。

default_densifyFrac

float类型。默认值为-1;

返回值

返回值为float类型。

基于计算离散Fréchet距离,实现了两种几何体的Fréchet距离计算算法,该算法仅限于离散点。Fréchet距离是曲线之间相似性的度量,它考虑了曲线上点的位置和顺序。因此,它通常比Hausdorff距离更好。

当指定可选的densifyFrac时,该函数在计算离散的Fréchet距离之前执行分段加密。densifyFrac参数设置用于加密每个段的分数。每个分段将被分成若干等长的子分段,其总长度的分数最接近给定分数。

注解

当前的实现只支持顶点作为离散位置。这可以扩展到允许使用任意密度的点。

我们指定的densifyFrac越小,我们得到的Fréchet距离就越精确。但是,计算时间和内存使用量随着子段数的平方而增加。

示例

SELECT ST_FrechetDistance('LINESTRING (0 0, 2 0)'::geometry,'MULTIPOINT (0 1, 1 0, 2 1)'::geometry);
ST_FRECHETDISTANCE(double precision)      |
------------------------------------------
1                                         |
总数目:1

SELECT ST_FrechetDistance('LINESTRING (130 0, 0 0, 0 150)'::geometry, 'LINESTRING (10 10, 10 150, 130 10)'::geometry, 0.5);
ST_FRECHETDISTANCE(double precision)      |
------------------------------------------
191.049731745428                          |
总数目:1

ST_MaxDistance

ST_MaxDistance — 返回两个几何对象的最长距离,距离单位是投影单位。

语法

st_maxdistance ::=

参数

geom1 geom2

geometry类型。

返回值

返回值为float类型。

返回两个几何对象的最大距离,单位以投影系的单位为准。如果g1和g2的几何类型相同,该函数会返回两个几何对象上的点的最大距离。

示例

SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
ST_MAXDISTANCE(double precision)      |
--------------------------------------
2                                     |
总数目:1

SELECT ST_MaxDistance('POINT(0 0)'::geometry, 'LINESTRING ( 2 2, 2 2 )'::geometry);
ST_MAXDISTANCE(double precision)      |
--------------------------------------
2.82842712474619                      |
总数目:1

ST_DistanceSphere

ST_DistanceSphere — 返回两个经纬度几何体之间的最小距离(以米为单位)。使用从SRID定义的球体导出的球形地球和半径。比ST_DistanceSpheroid ST_DistanceSpheroid快,但精确度较低。

语法

st_distancesphere ::=

参数

geomlonlat1 geomlonlat2

geometry类型。

返回值

返回值为float类型。

示例

SELECT round(CAST(ST_DistanceSphere(ST_Centroid(the_geom), ST_GeomFromText('POINT(-118 38) 
',4326)) As numeric),2) As dist_meters
FROM
(SELECT ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', 4326) As the_geom)
as foo;
DIST_METERS(numeric)      |
--------------------------
70425                     |
总数目:1


SELECT ST_DistanceSphere(ST_GeomFromText('LINESTRING(-118.584 38.374,-118.583 38.5)', 4326), ST_GeomFromText('POINT(-118 38)',4326)) ;
ST_DISTANCESPHERE(double precision)      |
-----------------------------------------
65837.8817709                            |
总数目:1

ST_DistanceSpheroid

ST_DistanceSpheroid — 返回给定特定椭球体的两个经纬度表示的几何体之间的最小距离。

语法

st_distancespheroid ::=

参数

geomlonlat1 geomlonlat2

geometry类型。

measurement_spheroid

spheroid类型。

返回值

返回值为float类型。

返回给定特定球体的两个经纬度表示的几何体之间的最小距离(以米为单位)。请参见ST_LengthSpheroid的球体说明。

示例

SELECT ST_DistanceSpheroid(ST_GeomFromEWKT('MULTIPOLYGON(((-10 40,-10 55,-10 70,5 40,-10 40)))'), ST_GeomFromEWKT('MULTIPOINT(20 40,20 55,20 70,35 40,35 55,35 70,50 40,50 55,50 70)'), 'SPHEROID["GRS_1980",6378137,298.257222101]') As result;
RESULT(double precision)      |
------------------------------
1121394.75617141              |
总数目:1

ST_DFullyWithin

ST_DFullyWithin — 如果输入的所有几何对象之间的距离都在一个指定的距离内,那么返回TRUE。

语法

st_dfullywithin ::=

参数

geom1 geom2

geometry类型。

distance

double类型。指定的距离单位是SRS表中规定的单位。该函数的输入几何对象必须都在同一个坐标投影中,有相同的SRID。

返回值

返回值为boolean类型。

注解

该函数会自动生成一个bounding box以便充分利用几何对象上的任意索引。

示例

SELECT ST_DFullyWithin(geom_a, geom_b, 10) as DFullyWithin10, ST_DWithin(geom_a,geom_b, 10) as DWithin10, 
ST_DFullyWithin(geom_a, geom_b, 20) as DFullyWithin20 from
(SELECT ST_GeomFromText('POINT(1 1)') as geom_a,ST_GeomFromText('LINESTRING(1 5, 2 7, 1 9, 14 12)') as geom_b) t1;
DFULLYWITHIN10(boolean)      |DWITHIN10(boolean)      |DFULLYWITHIN20(boolean)      |
----------------------------------------------------------------------------------
false                        |true                    |true                         |
总数目:1

ST_DWithin

ST_DWithin — 如果输入的几何对象的都在以一个点为中心的指定的距离范围内则返回TRUE。对于geometry类型对象,单位以SRS表中的距离单位为标准。如果是geography类型,单位是米。

语法

st_dwithin ::=

参数

geom1 geom2

geometry类型。

distance_of_srid

double类型。

geog1 geog2

geography类型。

distance_meters

double类型。

use_spheroid

boolean类型。默认的是use_spheroid=true (以WGS 84椭球面为参考系);如果想更快的检索出所需要的点,使用use_spheroid=false,该参数表示以正规的球体为参考系。

返回值

返回值为boolean类型。

注解

该函数会自动生成一个bounding box以便充分利用几何对象上的任意索引。

示例

SELECT ST_DWithin(geom_a, geom_b, 10)
FROM
(SELECT ST_GeomFromText('POINT(1 1)') As geom_a,ST_GeomFromText('LINESTRING(1 5, 2 7, 1 9, 14 12)') As geom_b);
ST_DWITHIN(boolean)      |
-------------------------
true                     |
总数目:1


SELECT ST_DWithin(geog_a, geog_b, 10, true)
FROM
(SELECT ST_GeogFromText('POINT(1 1)') As geog_a,ST_GeogFromText('LINESTRING(1 5, 2 7, 1 9, 14 12)') As geog_b);
ST_DWITHIN(boolean)      |
-------------------------
false                    |
总数目:1


SELECT ST_DWithin(geog_a, geog_b, 10, false)
FROM
(SELECT ST_GeogFromText('POINT(1 1)') As geog_a,ST_GeogFromText('LINESTRING(1 5, 2 7, 1 9, 14 12)') As geog_b);
ST_DWITHIN(boolean)      |
-------------------------
false                    |
总数目:1

ST_Equals

ST_Equals — 返回给定的几何对象是否是相同的几何对象,不考虑几何对象之间的方向差异(比如有一个几何对象,将该几何对象绕着其中一个顶点旋转20度,得到一个新的几何对象,那么这个旋转后的几何对象和原来的几何对象是相同的,因为不考虑方向)

语法

st_equals ::=

参数

geom1 geom2

geometry类型。

返回值

返回值为boolean类型。

示例

SELECT ST_Equals('POINTZ (15 15 15)', ST_AsText(ST_GeometricMedian('MULTIPOINT ((10 10 10), (10 20 10), (20 10 10), (20 20 10), (10 10 20), (10 20 20), (20 10 20), (20 20 20))'::geometry)));
ST_EQUALS(boolean)      |
------------------------
true                    |
总数目:1

SELECT ST_Equals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));
ST_EQUALS(boolean)      |
------------------------
true                    |
总数目:1

ST_GeometricMedian

ST_GeometricMedian — 返回MultiPoint几何中的中心值。

语法

st_geometricmedian ::=

参数

geom

geometry类型。

tolerance

float8类型。公差。

max_iter

int类型。迭代次数。

fail_if_not_converged

boolean类型。 如果没有迭代计算出结果是否产生错误。

返回值

返回值为geometry类型。

使用Weiszfeld算法计算多点几何体的近似几何中值。几何中值提供了一种中心性度量,它对异常点的敏感度低于质心。算法将迭代,直到连续迭代之间的距离变化小于提供的公差参数。

如果在迭代max_iter后未满足此条件,函数将产生错误并退出,除非将fail_If_not_converged设置为false。如果未提供公差值,将根据输入几何图形的范围计算默认公差值。

点的M值(如果存在)被解释为它们的相对权重。

示例

-- 即使不让它迭代,也不会失败
SELECT 't9', ST_IsEmpty(ST_GeometricMedian('MULTIPOINT (0 0, 1 1, 0 1, 2 2)'::geometry, NULL, 1, FALSE));
?COLUMN?(varchar)      |ST_ISEMPTY(boolean)      |
------------------------------------------------
t9                     |false                    |
总数目:1
--坚持它必须收敛
SELECT 't10', ST_IsEmpty(ST_GeometricMedian('MULTIPOINT (0 0, 1 1, 0 1, 2 2)'::geometry, NULL, 1, TRUE));
ERROR, Median failed to converge within 2e-06 after 1 iterations.


-- 设置公差
SELECT 't11', ST_IsEmpty(ST_GeometricMedian('MULTIPOINT (0 0, 1 1, 0 1, 2 2)'::geometry, 0.1, 1, TRUE));
?COLUMN?(varchar)      |ST_ISEMPTY(boolean)      |
------------------------------------------------
t11                    |false                    |
总数目:1

ST_HasArc

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

语法

st_hasarc ::=

参数

geom

geometry类型。

返回值

返回值为boolean类型。

示例

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(boolean)      |
------------------------
true                    |
总数目:1

ST_Intersects

ST_Intersects — 如果Geometries/Geography在2维空间内有相交(有共同的空间部分),则返回TRUE。对于geography类型对象—误差是0.00001米(因此许多很靠近的点会被认为是相交(即重合))

语法

st_intersects ::=

参数

geomA  geomB

geometry类型。

geogA geogB

geography类型。

返回值

返回值为boolean类型。

覆盖、接触(相切)、包含都属于空间相交。上述的任意一种都返回TRUE,那么这些几何对象也是空间相交的。空间不相交则返回FALSE。

示例

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(boolean)      |
------------------------
true                    |
总数目:1

ST_Length

ST_Length — 返回一个LINESTRING或MULTILINESTRING类型对象的2维长度。长度单位对于geometry类型对象来说以空间参考系规定的单位为标准,geography类型以椭圆参考系为参考系,单位是米。

语法

st_length ::=

参数

a_2dlinestring

geometry类型。

geog

geography类型。

default_use_spheroid

boolean类型。默认值为true。

返回值

返回值为float类型。

对于geometry类型对象来说,返回一个LINESTRING或MULTILINESTRING、ST_Curve, ST_MultiCurve返回值对应的类型对象的2维笛卡尔长度(译者注:所谓笛卡尔长度其实就是欧几里得算法的长度)。对于区域面类型的几何对象,该函数返回0,

要想计算区域面类型的长度,需要使用函数ST_Perimeter。长度单位对于geometry类型对象来说以空间参考系规定的单位为标准。

对于geography类型对象,单位是米,使用ST_Perimeter函数来计算区域面类型的对象长度。当前对于geometry类型对象来说,该函数是ST_Length2D别名,但是将来会对更高维度几何对象进行支持。

注解

对于地理测量(geography类型),默认为椭球体(spheroid)测量。要使用速度更快、精度较低的球体(sphere),请使用ST_Length(gg,false);

示例

SELECT ST_Length(ST_GeomFromText('LINESTRING(743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416)',2249));
ST_LENGTH(double precision)      |
---------------------------------
122.630744000095                 |
总数目:1


SELECT ST_Length(the_geog) As length_spheroid, ST_Length(the_geog,false) As length_sphere
FROM (SELECT ST_GeographyFromText( 'SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)') As the_geog)
As foo;
LENGTH_SPHEROID(double precision)      |LENGTH_SPHERE(double precision)      |
----------------------------------------------------------------------------
34310.5703627288                       |34346.2060960742                     |
总数目:1

ST_Length2D

ST_Length2D — 返回一个LINESTRING或MULTILINESTRING类型对象的2维长度,该函数是函数ST_Length的别名。

语法

st_length2d ::=

参数

a_2dlinestring

geometry类型。

返回值

返回值为float类型。

注解

对于地理测量(geography类型),默认为椭球体(spheroid)测量。要使用速度更快、精度较低的球体(sphere),请使用ST_Length(gg,false);

示例

SELECT ST_Length2D(ST_GeomFromText('LINESTRING(743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416)',2249));
ST_LENGTH2D(double precision)      |
-----------------------------------
122.630744000095                   |
总数目:1

ST_3DLength

ST_3DLength — 返回一个LINESTRING或MULTILINESTRING类型对象的3维或2维长度。

语法

st_3dlength ::=

参数

a_3dlinestring

geometry类型。

返回值

返回值为float类型。

返回一个LINESTRING或MULTILINESTRING类型对象的3维或2维长度。对于2维的LINESTRING类型对象,该函数只会返回其2维长度 (与函数ST_Length 和 ST_Length2D返回值一样)

示例

SELECT ST_3DLength(ST_GeomFromText('LINESTRING(743238 2967416 1,743238 2967450 1,743265 
2967450 3,
743265.625 2967416 3,743238 2967416 3)',2249));
ST_3DLENGTH(double precision)      |
-----------------------------------
122.704716741457                   |
总数目:1


SELECT ST_3DLength(ST_GeomFromText('LINESTRING(743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416)',2249));
ST_3DLENGTH(double precision)      |
-----------------------------------
122.630744000095                   |
总数目:1

ST_LengthSpheroid

ST_LengthSpheroid — 计算椭球体上几何图形的二维或三维长度/周长。如果几何体的坐标是经度/纬度,并且需要长度而无需重新投影,则此选项非常有用。

语法

st_lengthspheroid ::=

参数

a_geometry

geometry类型。

a_spheroid

spheroid类型。

返回值

返回值为float类型。

注解

椭球体是一种独立的数据库类型,可以按如下方式构造:

SPHEROID[<NAME>,<SEMI-MAJOR AXIS>,<INVERSE FLATTENING>]

SPHEROID["GRS_1980",6378137,298.257222101]

示例

SELECT ST_LengthSpheroid( the_geom, sph_m ) As tot_len,
ST_LengthSpheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1,
ST_LengthSpheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2
FROM (SELECT ST_GeomFromText('MULTILINESTRING((-118.584 38.374,-118.583 38.5),
(-71.05957 42.3589 , -71.061 43))') As the_geom,
CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m) as foo;
TOT_LEN(double precision)      |LEN_LINE1(double precision)      |LEN_LINE2(double precision)      |
-------------------------------------------------------------------------------------------------
85204.5207711811               |13986.8725282447                 |71217.6482429363                 |
总数目:1

ST_Length2D_Spheroid

ST_Length2D_Spheroid — 在椭圆参考系中计算一个linestring/multilinestring的2D长度,如果几何类型对象的坐标是经纬度形式,并且长度不需要重投影的话,使用该函数很有用。

语法

st_length2d_spheroid ::=

参数

a_geometry

geometry类型。如果输入参数不是MULTILINESTRING或LINESTRING,返回值都是0。

a_spheroid

spheroid类型。

返回值

返回值为float类型。

注解

该函数与函数ST_LengthSpheroid很像,区别在于 ST_Length2D_Spheroid 在计算中会丢弃Z坐标。

示例

SELECT ST_Length2D_Spheroid( the_geom, sph_m ) As tot_len,
ST_Length2D_Spheroid(ST_GeometryN(the_geom,1), sph_m) As len_line1,
ST_Length2D_Spheroid(ST_GeometryN(the_geom,2), sph_m) As len_line2
FROM (SELECT ST_GeomFromEWKT('MULTILINESTRING((-118.584 38.374 20,-118.583 38.5 30),
(-71.05957 42.3589 75, -71.061 43 90))') As the_geom,
CAST('SPHEROID["GRS_1980",6378137,298.257222101]' As spheroid) As sph_m) as foo;
TOT_LEN(double precision)      |LEN_LINE1(double precision)      |LEN_LINE2(double precision)      |
-------------------------------------------------------------------------------------------------
85204.5259256258               |13986.8761030248                 |71217.6498226009                 |
总数目:1

ST_LongestLine

ST_LongestLine — 返回两个几何对象之间的2维最长距离。如果有多个线段都是最长线段,那么返回第一个最长的。该线段的起点在g1,终点在g2.该函数返回的线段的长度与用函数ST_MaxDistance计算g1和g2的距离值一样。

语法

st_longestline ::=

参数

g1 g2

geometry类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(
ST_LongestLine('POINT(100 100)'::geometry,
'LINESTRING (20 80, 98 190, 110 180, 50 75 )'::geometry)
) As lline;
LLINE(text)      |
-----------------
LINESTRING(100 10|
0,98 190)        |
总数目:1

ST_OrderingEquals

ST_OrderingEquals — 如果两个输入的几何对象表示相同的几何对象,并且几何对象的点的顺序也是一致的,那么返回值为TRUE。

语法

st_orderingequals ::=

参数

g1 g2

geometry类型。

返回值

返回值为boolean类型。

示例

SELECT ST_OrderingEquals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),ST_GeomFromText('LINESTRING(0 0, 5 5, 10 10)'));
ST_ORDERINGEQUALS(boolean)      |
--------------------------------
false                           |
总数目:1

SELECT ST_OrderingEquals(ST_GeomFromText('LINESTRING(0 0, 10 10)'),ST_GeomFromText('LINESTRING(0 0, 0 0, 10 10)'));
ST_ORDERINGEQUALS(boolean)      |
--------------------------------
false                           |
总数目:1

ST_Overlaps

ST_Overlaps — 如果几何对象之间有共同的空间,相同的维度,但是互相之间没有相互包含,那么返回TRUE(它们相交,但一个并不完全包含另一个)。

语法

st_overlaps ::=

参数

g1 g2

geometry类型。

返回值

返回值为boolean类型。

注解

该函数使用时候会自动生成一个bounding box,以便充分利用几何对象上的任意一个索引. 如果想避免使用索引,使用函数_ST_Overlaps。

示例

SELECT ST_Overlaps(a,b) As a_overlap_b
FROM (SELECT ST_GeomFromText('POINT(1 0.5)') As a, ST_GeomFromText('LINESTRING(1 0, 1 1, 3 
5)') As b)
As foo;
A_OVERLAP_B(boolean)      |
--------------------------
false                     |
总数目:1

ST_Perimeter

ST_Perimeter — 返回ST_Surface 或 ST_MultiSurface (返回Polygon, Multipolygon类型对象) 值对应的geometry 和 geography类型对象的周长。对于geometry类型对象,返回的长度以空间参考系规定的单位做标准,对于geography类型对象单位是米。

语法

st_perimeter ::=

参数

geom

geometry类型。对于非表面型几何类型对象,返回0。

geog

geography类型。对于非表面型几何类型对象,返回0。

defult_use_spheroid

boolean类型。默认值为true。如果参数use_spheroid值为false,那么该函数会使用地球作为球面参考系,而不是椭圆参考系。

返回值

返回值为float类型。

当前该函数是函数ST_Perimeter2D的别名。

示例

SELECT ST_Perimeter(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))', 2249));
ST_PERIMETER(double precision)      |
------------------------------------
122.630744000095                    |
总数目:1

ST_Perimeter2D

ST_Perimeter2D — 如果输入对象是polygon 或multipolygon对象,则返回2维周长。该函数是函数ST_Perimeter的别名。

语法

st_perimeter2d ::=

参数

geom

geometry类型。

返回值

返回值为float类型。

当前该函数是函数ST_Perimeter的别名。

示例

SELECT ST_Perimeter2D(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))', 2249));
ST_PERIMETER2D(double precision)      |
--------------------------------------
122.630744000095                      |
总数目:1

ST_3DPerimeter

ST_3DPerimeter — 如果输入对象是polygon 或multipolygon对象,则返回3维周长。

语法

st_3dperimeter ::=

参数

geom

geometry类型。如果输入对象是2维的几何对象,那么返回的是2维周长。

返回值

返回值为float类型。

示例

SELECT ST_3DPerimeter(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))', 2249));
ST_3DPERIMETER(double precision)      |
--------------------------------------
122.630744000095                      |
总数目:1

ST_PointOnSurface

ST_PointOnSurface — 返回一个必然在Surface对象上的点。

语法

st_pointonsurface ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_PointOnSurface('POINT(0 5)'::geometry));
ST_ASTEXT(text)      |
---------------------
POINT(0 5)           |
总数目:1

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

SELECT ST_AsText(ST_PointOnSurface('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'::geometry));
ST_ASTEXT(text)      |
---------------------
POINT(2.5 2.5)       |
总数目:1

ST_Project

ST_Project — 返回一个输入类型为距离(单位:米)和方位角(单位:弧度)经投影转换后的Point类型。

语法

st_project ::=

参数

geog

geography类型。

distance

float类型。距离。

azimuth

float类型。方位角。

返回值

返回值为geometry类型。

距离、方位角和投影系统是对两个点操作、描述位置关系的全部要素。方位角有时候被称为航向角。它的值的计算起始轴是正北方向,记为0方位角; 东方的方位角是90度 (π/2),南方的方位角是180度 (π),西方的方位角是270度 (3π/2)。距离单位是米。

示例

SELECT ST_AsText(ST_Project('POINT(0 0)'::geography, 100000, radians(45.0)));
ST_ASTEXT(text)      |
---------------------
POINT(0.6352310291255|
37 0.639472334729198|
)                    |
总数目:1

ST_Relate

ST_Relate — 根据输入参数intersectionMatrixPattern的值,检查两个几何对象的内部、边界、外部是否有相交,如果有,则返回true。如果未传入任何intersectionMatrixPattern,则返回与这两个几何图形相关的最大intersectionMatrixPattern。

语法

st_relate ::=

参数

geomA  geomB

geometry类型。该函数不支持GeometryCollection参数。

BoundaryNodeRule

integer类型。

intersectionMatrixPattern

text类型。允许指定一个边界点规则。

返回值

当指定intersectionMatrixPattern参数时返回值为boolean类型;其余返回值为text类型。

示例

SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2));
ST_RELATE(text)      |
---------------------
0FFFFF212            |
总数目:1

SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2), 1);
ST_RELATE(text)      |
---------------------
0FFFFF212            |
总数目:1

SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2), '0FFFFF212');
ST_RELATE(boolean)      |
------------------------
true                    |
总数目:1

ST_RelateMatch

ST_RelateMatch — 如果参数intersectionMattrixPattern1 满足了 intersectionMatrixPattern2参数对应的空间关系,则返回TRUE(对应的空间关系参考九交模型 Dimensionally Extended 9 Intersection Model( DE-9IM ))。

语法

st_relatematch ::=

参数

intersectionMattrixPattern1

text类型。

intersectionMatrixPattern2

text类型。

返回值

返回值为boolean类型。

示例

SELECT a, b, ST_RelateMatch(a,b) FROM
	( SELECT '101202FFF'::text as a, 'TTTTTTFFF'::text as b) as f;
A(text)      |B(text)      |ST_RELATEMATCH(boolean)      |
-------------------------------------------------------
101202FFF    |TTTTTTFFF    |true                         |
总数目:1

ST_ShortestLine

ST_ShortestLine — 返回两个几何对象之间最短的2维线段。

语法

st_shortestline ::=

参数

geom1 geom1

geometry类型。

返回值

返回值为geometry类型。

返回两个几何对象之间2维最短的线段,如果函数找到这两个几何对象之间不止一条线段,那么只会返回第一条。如果g1和g2只在一个点相交,该函数会返回一条返回起点和终点都在该交点的线段。

如果g1和g2相交不止一个点,该函数会返回起点和终点都在同一点的线段,但该交点可以是g1和g2相交的任意一点。返回的线段起点总是属于g1,终点属于g2。该函数返回的线段的3D长度总是和ST_Distance计算g1和g2之间的距离值是一样的。

示例

select st_astext(st_shortestline('POINT(5 0)', 'POINT(10 12)'));
ST_ASTEXT(text)      |
---------------------
LINESTRING(5 0,10 12)|
总数目:1

select st_astext(st_shortestline('POINT(0 0)', ST_translate('POINT(0 0)', 5, 12, 0)));
ST_ASTEXT(text)      |
---------------------
LINESTRING(0 0,5 12) |
总数目:1

ST_Touches

ST_Touches — 如果两个几何对象最少有一个共同点且他们的内部并不相交,那么返回TRUE。

语法

st_touches ::=

参数

geom1 geom1

geometry类型。该函数不支持GEOMETRYCOLLECTION类型对象作为输入参数。

返回值

返回值为boolean类型。

如果输入几何对象geom1和geom2在他们的边界上面只有一个共同点,那么返回TRUE。该函数适用于如下组合:

Area/Area, Line/Line, Line/Area, Point/Area and Point/Line,但是不适用于geom1和geom2都是点。

注解

该函数会自动生成一个bounding box以便充分利用几何对象上的任意索引。要避免使用索引,请使用_ST_touch。

示例

SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(1 1)'::geometry);
ST_TOUCHES(boolean)      |
-------------------------
false                    |
总数目:1

SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(0 2)'::geometry);
ST_TOUCHES(boolean)      |
-------------------------
true                     |
总数目:1

ST_Within

ST_Within — 如果输入几何对象geom1完全在几何对象geom2范围内,则返回TRUE。

语法

st_within ::=

参数

geom1 geom1

geometry类型。该函数不支持GEOMETRYCOLLECTION类型对象作为输入参数。

返回值

返回值为boolean类型。

该函数的输入对象必须在相同的坐标投影中,有相同的SRID才有意义。如果ST_Within(A,B) 的值是true,同时ST_Within(B,A) 也是true,那么这两个几何对象是完全相同的。

注解

该函数会自动生成一个bounding box以便充分利用几何对象上的任意索引。要避免使用索引,请使用 _ST_Within。

示例

SELECT ST_within('MULTIPOINT(5 5)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry);
ST_WITHIN(boolean)      |
------------------------
true                    |
总数目:1

SELECT ST_within('POINT(0 12)'::geometry, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry);
ST_WITHIN(boolean)      |
------------------------
false                   |
总数目:1