本節中的函數會傳回 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 | +----------------------------------+
以
Point
的形式傳回Polygon
或MultiPolygon
引數的數學質心。結果不保證位於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 | +---------------------------------------------+