PostGIS 介绍(2)--PostGIS 参考

news/2025/9/20 17:14:23/文章来源:https://www.cnblogs.com/wuyongyin/p/18987802

本文主要介绍 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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java编译全过程解密:从源码到机器码的奇幻之旅

引言:Java程序的诞生与成长 当我们编写完一个Java程序,从点击"运行"到看到结果,背后发生了什么?这个看似简单的过程,实际上经历了一场精彩的编译之旅。Java的编译过程分为前端编译和后端编译两个阶段,…

第一节计算机硬件基本组成

随机存储器可以按地址访问存储器的任一单元。 顺序存储器访问时按顺序查找目标地址,访问数据所需时间与数据存储位置相关。 直接存储器按照数据块所在位置访问,介于上述两者之间,磁道寻址随机,磁道内寻址顺序。 相…

PyTorch深度学习实战【11】之神经网络的学习和训练 - 详解

PyTorch深度学习实战【11】之神经网络的学习和训练 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

深搜广搜(DFS、BFS)

DFS:广度优先搜索 DFS所使用的数据结构为栈,每次都需要遍历到最底层,无法遍历后回溯到上一层,然后寻找其他分支,直到所有分支都遍历后,再回溯上一层。以此循环。BFS需要记录从开始到结束结点的元素值,以树为例,…

android studio发现设备立刻就掉

安卓9,usb连接之后,androidstudio会短暂的显示设备名,但几秒钟就掉了,变成no device found. which adb查看到adb位于/usr/bin/adb ls -lah /usr/bin/adb查看指向../lib/android-sdk/platform-tools/adb* 经常会出现…

见证语音领域 GPT-3 时刻!小米开源端到端语音模型 MiMo Audio;Xbox上线游戏助手,实时游戏理解+语音交互丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度…

go语言学习之基本数据类型转字符串

package mainimport ("fmt""strconv" )func main() {res := fmt.Sprintf("%s %d %c %t", "萧海", 2025, A, true)fmt.Println(res)var num int = 10res = strconv.FormatInt(…

DeepLearning-LoRA 及其先进变体技术指南

LoRALoRA 及其先进变体技术指南 1. 引言 1.1 背景:大模型微调的挑战 大型深度学习模型(如 LLMs、扩散模型)的参数规模已达到万亿级别,对其进行全量微调(Full Fine-Tuning)面临巨大挑战:存储灾难:每个任务都需存…

成功没有奇迹,只有积累----Bruce Lee

目标 “目标并不是一定要达到的,它通常只是努力的方向。” 目标是努力的方向,不要为达成目标而停滞不前。把注意力放在享受这个旅程和过程上。如果你在一处风景胜地徒步旅行,你的目标是到达最后的目的地,但那并不意…

strtol() 函数 - 字符串转长整数(long int)

1.引言 strtol() 是 C 语言标准库中的一个字符串转长整数(long int) 的函数,定义在 <stdlib.h> 头文件中。 #include <stdlib.h> long int strtol(const char *str, char **endptr, int base);二、参数…

详细介绍:【最新版】SolidWorks2025安装包下载与安装图文教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

华为eNSP防火墙综合网络结构训练.docx - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

对Transformer的个人理解

本人非AI方向,本文内容不保真。 Transformer工作原理 分词 文本进来之后,首先经过Tokenizer(分词器)分割成很多个token。每个token都会赋予一个从0开始的ID,用于后续索引。 然后通过一个embedding层,将token转换…

第二节中央处理单元CPU知识点

1.在CPU内外常需设置多级高速缓存(Cache),其主要目的是提高CPU访问主存数据或指令的效率 2.CPU中的程序计数器PC用于保存要执行的指令的地址,访问内存时,需先将内存地址送入存储器地址寄存器MAR中,向内存写入数据…

day08 课程

day08 课程课程:https://www.bilibili.com/video/BV1o4411M71o?spm_id_from=333.788.videopod.episodes&p=168 8.1 公共操作之运算符加号------------------------------------------------ 执行后8.2 公共操作之…

最小生成树MST-07 - jack

目录概念Kruskal算法(克鲁斯卡尔算法)Prim算法(普里姆算法)比较MST应用场景MST与 最短距离MST与 TSP 参考链接 https://cloud.tencent.com/developer/article/1480529 概念 最小生成树MST 应该叫最小总间距树 Min…

Java基础语法1

Java基础语法1 标识符 关键字 Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。 所有的标识符都应该以字母(A-Z或a-z),美元符($),或者下划线(_)开始 首字符之后可以是字母(A-Z或a-z),…

makefile 入门2(变量赋值)

makefile 入门2(变量赋值)makefile 变量赋值 GNU make中赋值语法分为:= 将右侧的值赋值给左侧。延迟赋值 := 将右侧的值赋值给左侧。立即赋值 ::= 将右侧的值赋值给左侧。立即赋值 :::= 转义立即赋值运算符,右侧的…

JS复制并气泡提示

JS复制并气泡提示//气泡提示,仅css文件,不需要js文件 <link rel="stylesheet" href="css/tooltip.css" /> //复制内容,仅js文件,不需要css文件 <script src="js/clipboard.min.…

不定高元素动画实现方案(上)

最近接了一个需求,需要实现一个列表,列表可展开收起,展开收起需要有一个动画效果,而列表个数不定且每项内容高度也不固定,所以是一个不定高的收起展开效果,于是特意抽时间尝试了一些动画实现方案,特此记录前情 …