本文主要介绍 PostGIS 中的常用函数。
1、PostGIS 数据类型
数据类型转换可以是显式的,这意味着必须使用 CAST(myval As sometype) 或 myval::sometype 语法指定转换。显式转换避免了歧义转换的问题。所有数据类型都可以转换为 text,因此无需显式指定。
geometry — 表示具有平面坐标系的空间要素的类型。
geography — 表示具有大地(椭球)坐标系的空间要素的类型。
2、表管理函数
2.1、Find_SRID
返回为几何列定义的 SRID。
integer Find_SRID(varchar a_schema_name, varchar a_table_name, varchar a_geomfield_name);
2.2、UpdateGeometrySRID
更新几何列中所有要素的 SRID,并更新 geometry_columns 中的约束和引用。
text UpdateGeometrySRID(varchar table_name, varchar column_name, integer srid); text UpdateGeometrySRID(varchar schema_name, varchar table_name, varchar column_name, integer srid); text UpdateGeometrySRID(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid);
3、几何构造函数
3.1、ST_Point
使用 X、Y 和 SRID 值创建 Point。
geometry ST_Point(float x, float y); geometry ST_Point(float x, float y, integer srid=unknown);
3.2、ST_PointZ
使用 X、Y、Z 和 SRID 值创建 Point。
geometry ST_PointM(float x, float y, float m, integer srid=unknown);
3.3、ST_PointM
使用 X、Y、M 和 SRID 值创建 Point。
geometry ST_PointM(float x, float y, float m, integer srid=unknown);
3.4、ST_PointZM
使用 X、Y、Z、M 和 SRID 值创建 Point。
geometry ST_PointZM(float x, float y, float z, float m, integer srid=unknown);
3.5、ST_MakePoint
创建 2D、3DZ 或 4D Point。
geometry ST_MakePoint(float x, float y); geometry ST_MakePoint(float x, float y, float z); geometry ST_MakePoint(float x, float y, float z, float m);
3.6、ST_MakePointM
从 X、Y 和 M 值创建 Point。
geometry ST_MakePointM(float x, float y, float m);
3.7、ST_LineFromMultiPoint
从 MultiPoint 几何图形创建 LineString。
geometry ST_LineFromMultiPoint(geometry aMultiPoint);
3.8、ST_MakeLine
从 Point、MultiPoint 或 LineString 几何图形创建 LineString。
geometry ST_MakeLine(geometry geom1, geometry geom2); geometry ST_MakeLine(geometry[] geoms_array); geometry ST_MakeLine(geometry set geoms);
如:
SELECT ST_AsText( ST_MakeLine(ST_Point(1,2), ST_Point(3,4)) );SELECT ST_AsEWKT(ST_MakeLine(ARRAY[ST_MakePoint(1,2,3), ST_MakePoint(3,4,5), ST_MakePoint(6,6,6) ]));
3.9、ST_MakePolygon
从外壳和可选的孔列表创建 Polygon。
geometry ST_MakePolygon(geometry 线串); geometry ST_MakePolygon(geometry 外线串, geometry[] 内部线串);
4、几何访问器
4.1、GeometryType
以文本形式返回几何图形的类型。
text GeometryType(geometry geomA);
4.2、ST_CoordDim
返回几何图形的坐标维度,这是 ST_NDims 的兼容别名。
integer ST_CoordDim(geometry geomA);
4.3、ST_Dimension
返回几何图形的拓扑维度,该维度必须小于或等于坐标维度。POINT 返回 0,LINESTRING 返回 1,POLYGON 返回 2,GEOMETRYCOLLECTION 返回其组成部分的最大维度。
integer ST_Dimension(geometry g);
4.4、ST_EndPoint
返回 LineString 或 CircularLineString 的最后一个点。
geometry ST_EndPoint(geometry g);
4.5、ST_GeometryType
以文本形式返回几何图形的 SQL-MM 类型,此函数与 GeometryType(geometry) 的不同之处在于返回的字符串前面带有 ST。
text ST_GeometryType(geometry g1);
4.6、ST_IsClosed
测试 LineString 的起点和终点是否重合。对于 PolyhedralSurface,测试它是否闭合(体积)。
boolean ST_IsClosed(geometry g);
4.7、ST_IsPolygonCCW
测试 Polygon 是否满足:外部环为逆时针方向,内部环为顺时针方向。
boolean ST_IsPolygonCCW ( geometry geom );
4.8、ST_IsPolygonCW
测试 Polygon 是否满足:外部环为顺时针方向,内部环为逆时针方向。
boolean ST_IsPolygonCW ( geometry geom );
4.9、ST_IsRing
测试 LineString 是否闭合且简单。如果此 LINESTRING 既是 ST_IsClosed 又是 ST_IsSimple (不自相交),则返回 TRUE。
boolean ST_IsRing(geometry g);
4.10、ST_IsSimple
测试几何图形是否没有自相交或自相切的点。
boolean ST_IsSimple(geometry geomA);
4.11、ST_MemSize
返回几何图形占用的内存空间量。
integer ST_MemSize(geometry geomA);
4.12、ST_NDims
返回几何图形的坐标维度。
integer ST_NDims(geometry g1);
4.13、ST_X
返回 Point 的 X 坐标。
float ST_X(geometry a_point);
4.14、ST_Y
返回 Point 的 Y 坐标。
float ST_Y(geometry a_point);
4.15、ST_Z
返回 Point 的 Z 坐标。
float ST_Z(geometry a_point);
4.16、ST_M
返回 Point 的 M 坐标。
float ST_M(geometry a_point);
5、几何编辑器
5.1、ST_ForcePolygonCCW
强制(多)多边形的外部环使用逆时针方向,内部环使用顺时针方向。非多边形几何图形将保持不变返回。
geometry ST_ForcePolygonCCW ( geometry geom );
5.2、ST_ForcePolygonCW
强制 (Multi)Polygon 的外部环使用顺时针方向,内部环使用逆时针方向。非多边形几何图形将保持不变返回。
geometry ST_ForcePolygonCW ( geometry geom );
6、几何验证
6.1、ST_IsValid
测试几何图形在 2D 中是否结构良好。
boolean ST_IsValid(geometry g); boolean ST_IsValid(geometry g, integer flags);
可选的 flags 参数是一个位域:
0:使用通常的 OGC SFS 有效性语义。
1:将某些类型的自接触环(反向外壳和外翻孔)视为有效。这也被称为“ESRI 标志”,因为这些工具将其视为有效性模型;在 OGC 模型下是无效的。
6.2、ST_IsValidDetail
测试几何图形是否有效,如果无效,则说明原因和位置。
valid_detail ST_IsValidDetail(geometry geom, integer flags);
flags 参数意义同 ST_IsValid 中一样。
如:
select valid,reason, ST_AsText(location) AS location from ST_IsValidDetail(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) t
6.3、ST_IsValidReason
测试几何图形是否有效,如果无效,则说明无效的原因。
text ST_IsValidReason(geometry geomA); text ST_IsValidReason(geometry geomA, integer flags);
7、空间参考系统函数
7.1、ST_SetSRID
设置几何图形的 SRID。
geometry ST_SetSRID(geometry geom, integer srid);
7.2、ST_SRID
返回几何图形的空间参考标识符。
integer ST_SRID(geometry g1);
7.3、ST_Transform
返回一个新的几何体,其坐标已转换为新的空间参考系统。
geometry ST_Transform(geometry g1, integer srid); geometry ST_Transform(geometry geom, text to_proj); geometry ST_Transform(geometry geom, text from_proj, text to_proj); geometry ST_Transform(geometry geom, text from_proj, integer to_srid);
如:
select st_astext(ST_Transform(st_geometryfromtext('POINT (118.784169 32.041747)',4326),32650))
8、几何输入
8.1、众所周知的文本 (WKT)
8.1.1、ST_GeogFromText
从 EWKT 文本生成地理对象,它是 ST_GeographyFromText 的别名。
geography ST_GeogFromText(text EWKT);
8.1.2、ST_GeographyFromText
从 EWKT 文本生成地理对象。
geography ST_GeographyFromText(text EWKT);
如:
SELECT ST_GeographyFromText('SRID=4327;POINT(-77.0092 38.889588)')
8.1.3、ST_GeomFromEWKT
从 EWKT 文本生成几何图形。
geometry ST_GeomFromEWKT(text EWKT);
如:
SELECT ST_GeomFromEWKT('SRID=4327;POINT(-77.0092 38.889588)')
8.1.4、ST_GeometryFromText
从 WKT 文本生成几何图形,它是 ST_GeomFromText 的别名。
geometry ST_GeometryFromText(text WKT); geometry ST_GeometryFromText(text WKT, integer srid);
8.1.5、ST_GeomFromText
从 WKT 文本生成几何图形。
geometry ST_GeomFromText(text WKT); geometry ST_GeomFromText(text WKT, integer srid);
如:
SELECT ST_GeomFromText('POINT(-77.0092 38.889588)', 4326)
8.2、众所周知的二进制 (WKB)
8.2.1、ST_GeogFromWKB
从 WKB 生成地理对象。
geography ST_GeogFromWKB(bytea wkb);
如:
SELECT ST_GeogFromWKB('\x01010000008fc2f5285c8f5d408fc2f5285c4f4040')
8.2.2、ST_GeomFromEWKB
从 EWKB 生成几何对象。
geometry ST_GeomFromEWKB(bytea EWKB);
如:
SELECT ST_GeomFromEWKB('\x0101000020e61000008fc2f5285c8f5d408fc2f5285c4f4040')
8.2.3、ST_GeomFromWKB
从 WKB 生成几何对象。
geometry ST_GeomFromWKB(bytea geom); geometry ST_GeomFromWKB(bytea geom, integer srid);
如:
SELECT ST_GeomFromWKB('\x0101000020e61000008fc2f5285c8f5d408fc2f5285c4f4040');
9、几何图形输出
9.1、众所周知的文本 (WKT)
9.1.1、ST_AsEWKT
返回几何图形的 EWKT 文本(带有 SRID 元数据)。
text ST_AsEWKT(geometry g1); text ST_AsEWKT(geometry g1, integer maxdecimaldigits=15); text ST_AsEWKT(geography g1); text ST_AsEWKT(geography g1, integer maxdecimaldigits=15);
参数 maxdecimaldigits:表示最大小数位数,默认值为 15。
9.1.2、ST_AsText
返回几何图形的 WKT 文本(不带 SRID 元数据)。
text ST_AsText(geometry g1); text ST_AsText(geometry g1, integer maxdecimaldigits = 15); text ST_AsText(geography g1); text ST_AsText(geography g1, integer maxdecimaldigits = 15);
参数 maxdecimaldigits:表示最大小数位数,默认值为 15。
9.2、众所周知的二进制 (WKB)
9.2.1、ST_AsBinary
返回几何图形的 WKT 二进制标识(不带 SRID 元数据)。
bytea ST_AsBinary(geometry g1); bytea ST_AsBinary(geometry g1, text NDR_or_XDR); bytea ST_AsBinary(geography g1); bytea ST_AsBinary(geography g1, text NDR_or_XDR);
参数 NDR_or_XDR:指定字节序编码,可以使用小端字节序 ('NDR') 或大端字节序 ('XDR')。
9.2.2、ST_AsEWKB
返回几何图形的 EWKT 二进制标识(带有 SRID 元数据)。
bytea ST_AsEWKB(geometry g1); bytea ST_AsEWKB(geometry g1, text NDR_or_XDR);
参数 NDR_or_XDR:指定字节序编码,可以使用小端字节序 ('NDR') 或大端字节序 ('XDR')。
10、运算符
10.1、边界框运算符
10.1.1、&&
如果 A 的 2D 边界框与 B 的 2D 边界框相交,则返回 TRUE。
boolean &&( geometry A , geometry B ); boolean &&( geography A , geography B );
如:
SELECT 'LINESTRING(0 0, 3 3)'::geometry && 'LINESTRING(1 2, 4 6)'::geomet
10.1.2、&&&
如果几何图形 A 的 n 维边界框与几何图形 B 的 n 维边界框相交,则 &&& 操作符返回 TRUE。
boolean &&&( geometry A , geometry B );
10.1.3、&<
如果几何体 A 的边界框与几何体 B 的边界框重叠或位于其左侧,或者更准确地说,重叠或不位于几何体 B 的边界框的右侧,则 &< 运算符返回 TRUE。
boolean &<( geometry A , geometry B );
10.1.4、&<|
如果几何体 A 的边界框与几何体 B 的边界框重叠或位于其下方,或者更准确地说,如果与几何体 B 的边界框重叠或不位于其上方,则 &<| 运算符返回 TRUE。
boolean &<|( geometry A , geometry B );
10.1.5、&>
如果几何体 A 的边界框与几何体 B 的边界框重叠或位于其右侧,或者更准确地说,与几何体 B 的边界框重叠或不位于其左侧,则 &> 运算符返回 TRUE。
boolean &>( geometry A , geometry B );
10.1.6、<<
如果几何 A 的边界框严格位于几何 B 的边界框的左侧,则 << 运算符返回 TRUE。
boolean <<( geometry A , geometry B );
10.1.7、<<|
如果几何图形 A 的边界框严格位于几何图形 B 的边界框下方,则 <<| 操作符返回 TRUE。
boolean <<|( geometry A , geometry B );
10.1.8、=
如果几何/地理 A 的坐标和坐标顺序与几何/地理 B 的坐标和坐标顺序相同,则 = 操作符返回 TRUE。
boolean =( geometry A , geometry B ); boolean =( geography A , geography B );
10.1.9、>>
如果几何图形 A 的边界框严格位于几何图形 B 的边界框的右侧,则 >> 运算符返回 TRUE。
boolean >>( geometry A , geometry B );
10.1.10、@
如果几何体 A 的边界框完全被几何体 B 的边界框包含,则 @ 运算符返回 TRUE。
boolean @( geometry A , geometry B );
10.1.11、|&>
如果几何体 A 的边界框与几何体 B 的边界框重叠或位于其上方,或者更准确地说,如果几何体 A 的边界框与几何体 B 的边界框重叠或不位于其下方,则 |&> 运算符返回 TRUE。
boolean |&>( geometry A , geometry B );
10.1.12、|>>
如果几何图形 A 的边界框严格高于几何图形 B 的边界框,则 |>> 运算符返回 TRUE。
boolean |>>( geometry A , geometry B );
10.1.13、~
如果几何对象 A 的边界框完全包含几何对象 B 的边界框,则 ~ 运算符返回 TRUE。
boolean ~( geometry A , geometry B );
10.1.14、~=
如果几何/地理 A 的边界框与几何/地理 B 的边界框相同,则 ~= 运算符返回 TRUE。
boolean ~=( geometry A , geometry B );
10.2、距离运算符
10.2.1、<->
返回两个几何图形之间的 2D 距离。
double precision <->( geometry A , geometry B ); double precision <->( geography A , geography B );
10.2.2、<#>
返回 A 和 B 边界框之间的 2D 距离。
double precision <#>( geometry A , geometry B );
10.2.3、<<->>
返回 A 和 B 几何体或边界框之间的 n 维距离。
double precision <<->>( geometry A , geometry B );
11、空间关系
11.1、拓扑关系
11.1.1、ST_3DIntersects
测试两个几何体是否在 3D 空间中相交 - 仅适用于点、线串、多边形、多面体表面。重叠、接触、包含都意味着空间相交。
boolean ST_3DIntersects( geometry geomA , geometry geomB );
11.1.2、ST_Contains
如果几何体A包含几何体B,则返回TRUE。当且仅当B的所有点都位于A的内部(即A的内部或边界)时(或者等效地,B的任何点都不位于A的外部),并且A和B的内部至少有一个共同点,则A包含B。
boolean ST_Contains(geometry geomA, geometry geomB);
11.1.3、ST_ContainsProperly
如果 B 的每个点都位于 A 的内部(或者等效地,B 的任何点都不位于 A 的边界或外部),则返回 true。与 ST_Contains 的区别:ST_Contains 允许边界重合,而 ST_ContainsProperly 严格要求没有边界重合。
boolean ST_ContainsProperly(geometry geomA, geometry geomB);
11.1.4、ST_CoveredBy
如果 Geometry/Geography A 中的每个点都位于 Geometry/Geography B 内部(即与 B 的内部或边界相交),则返回 true。
boolean ST_CoveredBy(geometry geomA, geometry geomB);
boolean ST_CoveredBy(geography geogA, geography geogB);
11.1.5、ST_Covers
如果几何/地理 B 中的每个点都位于几何/地理 A 的内部(即与 A 的内部或边界相交),则返回 true。
boolean ST_Covers(geometry geomA, geometry geomB);
boolean ST_Covers(geography geogpolyA, geography geogpointB);
ST_Covers 是 ST_CoveredBy 的逆运算。所以,ST_Covers(A,B) = ST_CoveredBy(B,A)。
11.1.6、ST_Crosses
比较两个几何对象,如果它们的交集“空间交叉”则返回 true;也就是说,几何图形有一些但不完全是内部点重合。几何图形内部的交集必须是非空的,并且其维度必须小于两个输入几何图形的最大维度,并且两个几何图形的交集不能等于任何一个几何图形。否则,返回 false。交叉关系是对称且非自反的。
boolean ST_Crosses(geometry g1, geometry g2);
11.1.7、ST_Disjoint
如果两个几何对象是不相交的,则返回 true。如果两个几何对象没有公共点,则它们是不相交的。
boolean ST_Disjoint( geometry A , geometry B );
11.1.8、ST_Equals
如果给定的几何图形“拓扑相等”,则返回 true。拓扑相等意味着几何图形具有相同的维度,并且它们的点集占据相同的空间。这意味着拓扑相等的几何图形中顶点的顺序可能不同。
boolean ST_Equals(geometry A, geometry B);
11.1.9、ST_Intersects
如果两个几何图形相交,则返回 true。几何图形相交是指它们有任何公共点。
boolean ST_Intersects( geometry geomA , geometry geomB );
boolean ST_Intersects( geography geogA , geography geogB );
11.1.10、ST_OrderingEquals
ST_OrderingEquals 比较两个几何对象,如果几何对象相等且坐标顺序相同,则返回 t(TRUE);否则返回 f(FALSE)。
boolean ST_OrderingEquals(geometry A, geometry B);
11.1.11、ST_Overlaps
测试两个几何体是否具有相同的维度并相交,但每个几何体至少有一个点不在另一个几何体中。
boolean ST_Overlaps(geometry A, geometry B);
11.1.12、ST_Touches
测试两个几何体是否至少有一个公共点,但它们的内部不相交。
boolean ST_Touches(geometry A, geometry B);
11.1.13、ST_Within
测试 A 的每个点是否位于 B 中,并且它们的内部有公共点。与 ST_CoveredBy 的区别:ST_CoveredBy 的关系定义更简单、更包容边界情况;ST_Within 的定义则更严格,区分了内部和边界。
boolean ST_Within(geometry A, geometry B);
within 关系是自反的:每个几何图形都在其自身内部。该关系是反对称的:如果 ST_Within(A,B) = true 且 ST_Within(B,A) = true,则两个几何图形必须在拓扑上相等 (ST_Equals(A,B) = true)。
ST_Within 是 ST_Contains 的逆关系。 因此,ST_Within(A,B) = ST_Contains(B,A)。
11.2、距离关系
11.2.1、ST_3DDWithin
测试两个 3D 几何体是否在给定的 3D 距离内。
boolean ST_3DDWithin(geometry g1, geometry g2, double precision distance_of_srid);
11.2.2、ST_3DDWithin
测试两个 3D 几何体是否完全在给定的 3D 距离内。
boolean ST_3DDFullyWithin(geometry g1, geometry g2, double precision distance);
与 ST_3DDWithin 的区别:ST_3DDWithin 关注的是局部最小距离是否满足条件,只要有一个点足够近就返回 true;ST_3DDFullyWithin 关注的是全局最大距离是否满足条件,要求所有点对都必须足够近。
11.2.3、ST_DFullyWithin
测试一个几何体是否完全在另一个几何体的距离内。
boolean ST_DFullyWithin(geometry g1, geometry g2, double precision distance);
11.2.4、ST_DWithin
测试两个几何体是否在给定的距离内。
boolean ST_DWithin(geometry g1, geometry g2, double precision distance_of_srid); boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid = true);
对于 geometry:距离以几何图形的空间参考系统定义的单位指定。为了使此函数有意义,源几何图形必须在同一坐标系中(具有相同的 SRID)。
对于 geography:单位为米,距离测量默认为 use_spheroid = true。为了更快的评估,可使用 use_spheroid = false 在球面上进行测量。
11.2.5、ST_PointInsideCircle
测试点几何体是否位于由中心和半径定义的圆内。
boolean ST_PointInsideCircle(geometry a_point, float center_x, float center_y, float radius);
12、测量函数
12.1、ST_Area
返回多边形几何的面积。 对于几何类型,计算的是二维笛卡尔(平面)面积,单位由 SRID 指定。 对于地理类型,默认情况下在椭球体上确定面积,单位为平方米。 要使用更快但精度较低的球面模型计算面积,可使用 ST_Area(geog,false)。
float ST_Area(geometry g1); float ST_Area(geography geog, boolean use_spheroid = true);
12.2、ST_Distance
对于 geometry 类型,返回两个几何图形之间的最小 2D Cartesian(平面)距离,单位为投影单位(空间参考单位)。
对于 geography 类型,默认返回两个地理位置之间以米为单位的最小测地线距离,计算基于 SRID 确定的椭球体。 如果 use_spheroid 为 false,则使用更快的球面计算。
float ST_Distance(geometry g1, geometry g2); float ST_Distance(geography geog1, geography geog2, boolean use_spheroid = true);
12.3、ST_3DDistance
返回两个投影几何体之间基于空间参考的 3D 笛卡尔最小距离。
float ST_3DDistance(geometry g1, geometry g2);
12.4、ST_DistanceSphere
使用球面地球模型返回两个经纬度几何体之间的最小距离(以米为单位)。
float ST_DistanceSphere(geometry geomlonlatA, geometry geomlonlatB, float8 radius=6371008);
12.5、ST_DistanceSpheroid
使用椭球地球模型返回两个经纬度几何体之间的最小距离。
float ST_DistanceSpheroid(geometry geomlonlatA, geometry geomlonlatB, spheroid measurement_spheroid=WGS84);
12.6、ST_Length
对于几何类型:如果几何类型为 LineString、MultiLineString、ST_Curve、ST_MultiCurve,则返回几何的 2D 笛卡尔长度。
对于地理类型:计算使用逆大地测量计算。长度单位为米。
float ST_Length(geometry a_2dlinestring); float ST_Length(geography geog, boolean use_spheroid = true);
12.7、ST_Length2D
返回线性几何体的 2D 长度,它是 ST_Length 的别名。
float ST_Length2D(geometry a_2dlinestring);
12.8、ST_3DLength
返回线性几何体的 3D 长度。
float ST_3D长度(geometry a_3dlinestring);
12.9、ST_LongestLine
返回两个几何体点之间最长的二维线段。返回的线段起始于 g1,结束于 g2。
最长线段始终出现在两个顶点之间。如果找到多条最长线段,则该函数返回第一条。该线段的长度等于 ST_MaxDistance 返回的距离。
geometry ST_LongestLine(geometry g1, geometry g2);
12.10、ST_3DLongestLine
返回两个几何体之间的 3 维最长线。如果有多条最长线,则该函数返回第一条。返回的线从 g1 开始,到 g2 结束。该线的 3D 长度等于 ST_3DMaxDistance 返回的距离。
geometry ST_3DLongestLine(geometry g1, geometry g2);
12.11、ST_MaxDistance
返回两个投影几何体之间最大的 2D 距离。
float ST_MaxDistance(geometry g1, geometry g2);
12.12、ST_3DMaxDistance
返回两个投影几何体之间最大的 3D 距离。
float ST_3DMaxDistance(geometry g1, geometry g2);
12.13、ST_Perimeter
返回多边形几何或地理的边界长度。
如果几何类型是 ST_Surface、ST_MultiSurface (Polygon, MultiPolygon),则返回其 2D 周长。对于非面状几何类型,返回 0。对于线性几何类型,请使用 ST_Distance。
对于地理类型,计算使用逆大地测量计算,其单位为米。
float ST_Perimeter(geometry g1); float ST_Perimeter(geography geog, boolean use_spheroid = true);
12.14、ST_Perimeter2D
返回多边形几何的 2D 周长,它是 ST_Perimeter 的别名。
float ST_Perimeter2D(geometry geomA);
12.15、ST_3DPerimeter
返回多边形几何的 3D 周长。
float ST_3DPerimeter(geometry geomA);
12.16、ST_ShortestLine
返回两个几何图形之间的 2 维最短线。返回的线起点在 geom1,终点在 geom2。如果 geom1 和 geom2 相交,则结果是一条起点和终点都在交点上的线。线的长度与 ST_Distance 为 g1 和 g2 返回的长度相同。
geometry ST_ShortestLine(geometry geom1, geometry geom2); geography ST_ShortestLine(geography geom1, geography geom2, boolean use_spheroid = true);
12.17、ST_3DShortestLine
返回两个几何体之间的 3 维最短线。如果找到多条最短线,该函数将只返回第一条最短线。如果 g1 和 g2 仅在一个点相交,该函数将返回一条起点和终点都在该交点的线上。如果 g1 和 g2 在多个点相交,该函数将返回一条起点和终点在同一点的线,但它可以是任何一个相交点。返回的线将始终以 g1 为起点,g2 为终点。此函数返回的线的 3D 长度始终与 ST_3DDistance 对 g1 和 g2 返回的长度相同。
geometry ST_3DShortestLine(geometry g1, geometry g2);
13、叠加函数
13.1、ST_Difference
返回一个几何图形,表示几何图形 A 中不与几何图形 B 相交的部分。这等价于 A - ST_Intersection(A,B)。
geometry ST_Difference(geometry geomA, geometry geomB, float8 gridSize = -1);
13.2、ST_Intersection
返回一个表示两个几何图形的点集交集的几何图形。换句话说,它是几何 A 和几何 B 之间共享的部分。
geometry ST_Intersection( geometry geomA , geometry geomB , float8 gridSize = -1 ); geography ST_Intersection( geography geogA , geography geogB );
13.3、ST_MemUnion
一个聚合函数,它联合输入几何体,合并它们以生成一个没有重叠的结果几何体。输出可能是一个单一几何体、一个多几何体或一个几何体集合。产生与 ST_Union 相同的结果,但使用更少的内存和更多的处理器时间。
geometry ST_MemUnion(geometry set geomfield);
13.4、ST_SymDifference
返回一个几何对象,表示几何对象 A 和 B 中不相交的部分。这等价于 ST_Union(A,B) - ST_Intersection(A,B)。它被称为对称差,因为 ST_SymDifference(A,B) = ST_SymDifference(B,A)。
geometry ST_SymDifference(geometry geomA, geometry geomB, float8 gridSize = -1);
13.5、ST_Union
合并输入几何图形,生成一个没有重叠的几何图形。输出可能是一个几何图形、一个 MultiGeometry 或一个 Geometry Collection。
geometry ST_Union(geometry g1, geometry g2); geometry ST_Union(geometry g1, geometry g2, float8 gridSize); geometry ST_Union(geometry[] g1_array); geometry ST_Union(geometry set g1field); geometry ST_Union(geometry set g1field, float8 gridSize);
14、几何处理
14.1、ST_Buffer
计算一个 POLYGON 或 MULTIPOLYGON,表示所有与几何/地理对象距离小于或等于给定距离的点。
对于几何对象,距离以几何对象的空间参考系统的单位指定。对于地理对象,距离以米为单位指定。
geometry ST_Buffer(geometry g1, float radius_of_buffer, text buffer_style_parameters = ''); geometry ST_Buffer(geometry g1, float radius_of_buffer, integer num_seg_quarter_circle); geography ST_Buffer(geography g1, float radius_of_buffer, text buffer_style_parameters); geography ST_Buffer(geography g1, float radius_of_buffer, integer num_seg_quarter_circle);
14.2、ST_Centroid
计算几何图形的质心。
geometry ST_Centroid(geometry g1); geography ST_Centroid(geography g1, boolean use_spheroid = true);
转自:https://postgis.net.cn/docs/manual-3.5/reference.html。