本節中的函數會傳回 Polygon
或 MultiPolygon
值的屬性。
除非另有說明,否則本節中的函數會依照下列方式處理其幾何引數
如果任何引數為
NULL
或任何幾何引數為空幾何,則傳回值為NULL
。如果任何幾何引數不是語法正確的幾何,則會發生
ER_GIS_INVALID_DATA
錯誤。如果任何幾何引數是在未定義的空間參考系統 (SRS) 中語法正確的幾何,則會發生
ER_SRS_NOT_FOUND
錯誤。對於採用多個幾何引數的函數,如果這些引數不在相同的 SRS 中,則會發生
ER_GIS_DIFFERENT_SRIDS
錯誤。否則,傳回值為非
NULL
。
這些函數可用於取得多邊形屬性
傳回一個雙精度數,表示
Polygon
或MultiPolygon
引數的面積,以其空間參考系統測量。ST_Area()
會依照本節簡介中所述處理其引數,但有以下例外如果幾何在幾何上無效,則結果會是未定義的面積 (也就是說,可以是任何數字),或是發生錯誤。
如果幾何有效,但不是
Polygon
或MultiPolygon
物件,則會發生ER_UNEXPECTED_GEOMETRY_TYPE
錯誤。如果幾何是笛卡爾 SRS 中的有效
Polygon
,則結果是多邊形的笛卡爾面積。如果幾何是笛卡爾 SRS 中的有效
MultiPolygon
,則結果是多邊形的笛卡爾面積總和。如果幾何是地理 SRS 中的有效
Polygon
,則結果是該 SRS 中多邊形的大地測量面積,以平方公尺為單位。如果幾何是地理 SRS 中的有效
MultiPolygon
,則結果是該 SRS 中多邊形的大地測量面積總和,以平方公尺為單位。如果面積計算結果為
+inf
,則會發生ER_DATA_OUT_OF_RANGE
錯誤。如果幾何具有超出範圍的經度或緯度的地理 SRS,則會發生錯誤
如果經度值不在範圍 (−180, 180] 內,則會發生
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
錯誤。如果緯度值不在範圍 [−90, 90] 內,則會發生
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
錯誤。
顯示的範圍以度為單位。由於浮點運算,確切的範圍限制略有偏差。
mysql> SET @poly = 'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))'; mysql> SELECT ST_Area(ST_GeomFromText(@poly)); +---------------------------------+ | ST_Area(ST_GeomFromText(@poly)) | +---------------------------------+ | 4 | +---------------------------------+ mysql> SET @mpoly = 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))'; mysql> SELECT ST_Area(ST_GeomFromText(@mpoly)); +----------------------------------+ | ST_Area(ST_GeomFromText(@mpoly)) | +----------------------------------+ | 8 | +----------------------------------+
傳回
Polygon
或MultiPolygon
引數的數學重心,作為Point
。不保證結果會位於MultiPolygon
上。此函數會藉由計算集合中最高維度元件的重心點來處理幾何集合。這些元件會被擷取並轉換為單一的
MultiPolygon
、MultiLineString
或MultiPoint
以進行重心計算。ST_Centroid()
會依照本節簡介中所述處理其引數,但有以下例外對於引數為空幾何集合的額外條件,傳回值為
NULL
。如果幾何圖形具有地理空間參考系統 (SRS) 的 SRID 值,則會發生
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
錯誤。
mysql> SET @poly = ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))'); mysql> SELECT ST_GeometryType(@poly),ST_AsText(ST_Centroid(@poly)); +------------------------+--------------------------------------------+ | ST_GeometryType(@poly) | ST_AsText(ST_Centroid(@poly)) | +------------------------+--------------------------------------------+ | POLYGON | POINT(4.958333333333333 4.958333333333333) | +------------------------+--------------------------------------------+
以
LineString
形式傳回Polygon
值poly
的外部環。ST_ExteriorRing()
會按照本節引言中所述的方式處理其引數。mysql> SET @poly = 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))'; mysql> SELECT ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly))); +----------------------------------------------------+ | ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly))) | +----------------------------------------------------+ | LINESTRING(0 0,0 3,3 3,3 0,0 0) | +----------------------------------------------------+
以
LineString
形式傳回Polygon
值poly
的第N
個內部環。環的編號從 1 開始。ST_InteriorRingN()
會按照本節引言中所述的方式處理其引數。mysql> SET @poly = 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))'; mysql> SELECT ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)); +-------------------------------------------------------+ | ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)) | +-------------------------------------------------------+ | LINESTRING(1 1,1 2,2 2,2 1,1 1) | +-------------------------------------------------------+
ST_NumInteriorRing(
、poly
)ST_NumInteriorRings(
poly
)傳回
Polygon
值poly
中的內部環數。ST_NumInteriorRing()
和ST_NuminteriorRings()
會按照本節引言中所述的方式處理其引數。mysql> SET @poly = 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))'; mysql> SELECT ST_NumInteriorRings(ST_GeomFromText(@poly)); +---------------------------------------------+ | ST_NumInteriorRings(ST_GeomFromText(@poly)) | +---------------------------------------------+ | 1 | +---------------------------------------------+