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