动态

详情 返回 返回

PostGIS 介紹(2)--PostGIS 參考 - 动态 详情

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

user avatar hdwang 头像
点赞 1 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.