本文主要介绍 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、&</h4p如果几何体 A 的边界框与几何体 B 的边界框重叠或位于其左侧,或者更准确地说,重叠或不位于几何体 B 的边界框的右侧,则 &< 运算符返回 TRUE。/p- boolean &<( geometry A , geometry B );
复制代码 h410.1.4、&|/h4p如果几何体 A 的边界框与几何体 B 的边界框重叠或位于其下方,或者更准确地说,如果与几何体 B 的边界框重叠或不位于其上方,则 &| 运算符返回 TRUE。/p- boolean &<|( geometry A , geometry B );
复制代码 h410.1.5、&/h4p如果几何体 A 的边界框与几何体 B 的边界框重叠或位于其右侧,或者更准确地说,与几何体 B 的边界框重叠或不位于其左侧,则 & 运算符返回 TRUE。/p- boolean &<( geometry A , geometry B );
复制代码 h410.1.6、/h4p如果几何 A 的边界框严格位于几何 B 的边界框的左侧,则 < 运算符返回 TRUE。/p- boolean <<( geometry A , geometry B );
复制代码 h410.1.7、|/h4p如果几何图形 A 的边界框严格位于几何图形 B 的边界框下方,则 | 操作符返回 TRUE。/p- boolean <<|( geometry A , geometry B );
复制代码 h410.1.8、=/h4p如果几何/地理 A 的坐标和坐标顺序与几何/地理 B 的坐标和坐标顺序相同,则 = 操作符返回 TRUE。/p- boolean =( geometry A , geometry B );
- boolean =( geography A , geography B );
复制代码 h410.1.9、/h4p如果几何图形 A 的边界框严格位于几何图形 B 的边界框的右侧,则 运算符返回 TRUE。/p- boolean <<( geometry A , geometry B );
复制代码 h410.1.10、@/h4p如果几何体 A 的边界框完全被几何体 B 的边界框包含,则 @ 运算符返回 TRUE。/p- boolean @( geometry A , geometry B );
复制代码 h410.1.11、|&/h4p如果几何体 A 的边界框与几何体 B 的边界框重叠或位于其上方,或者更准确地说,如果几何体 A 的边界框与几何体 B 的边界框重叠或不位于其下方,则 |& 运算符返回 TRUE。/p- boolean |&>( geometry A , geometry B );
复制代码 h410.1.12、|/h4p如果几何图形 A 的边界框严格高于几何图形 B 的边界框,则 |> 运算符返回 TRUE。</p>- 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。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |