本節中的函數會傳回 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 | +---------------------------------------------+