文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  多邊形和多重多邊形屬性函數

14.16.7.4 多邊形和多重多邊形屬性函數

本節中的函數會傳回 PolygonMultiPolygon 值的屬性。

除非另有說明,否則本節中的函數會依照下列方式處理其幾何引數

  • 如果任何引數為 NULL,或任何幾何引數為空的幾何,則傳回值為 NULL

  • 如果任何幾何引數不是語法上格式正確的幾何,則會發生 ER_GIS_INVALID_DATA 錯誤。

  • 如果任何幾何引數是未定義空間參考系統 (SRS) 中語法上格式正確的幾何,則會發生 ER_SRS_NOT_FOUND 錯誤。

  • 對於採用多個幾何引數的函數,如果這些引數不在相同的 SRS 中,則會發生 ER_GIS_DIFFERENT_SRIDS 錯誤。

  • 否則,傳回值不是 NULL

這些函數可用於取得多邊形屬性

  • ST_Area({poly|mpoly})

    傳回雙精度數字,表示以其空間參考系統測量的 PolygonMultiPolygon 引數的面積。

    ST_Area() 處理其引數的方式如本節簡介中所述,但有以下例外

    • 如果幾何在幾何上無效,則結果為未定義的面積 (也就是說,它可以是任何數字),或者會發生錯誤。

    • 如果幾何有效,但不是 PolygonMultiPolygon 物件,則會發生 ER_UNEXPECTED_GEOMETRY_TYPE 錯誤。

    • 如果幾何是笛卡爾 SRS 中的有效 Polygon,則結果為多邊形的笛卡爾面積。

    • 如果幾何是笛卡爾 SRS 中的有效 MultiPolygon,則結果為多邊形的笛卡爾面積總和。

    • 如果幾何是地理 SRS 中的有效 Polygon,則結果為該 SRS 中多邊形的大地測量面積,以平方公尺為單位。

    • 如果幾何是地理 SRS 中的有效 MultiPolygon,則結果為該 SRS 中多邊形的大地測量面積總和,以平方公尺為單位。

    • 如果面積計算結果為 +inf,則會發生 ER_DATA_OUT_OF_RANGE 錯誤。

    • 如果幾何具有超出範圍的經度或緯度的地理 SRS,則會發生錯誤

      顯示的範圍以度為單位。由於浮點算術,確切的範圍限制會略有偏差。

    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 |
    +----------------------------------+
  • ST_Centroid({poly|mpoly})

    Point 的形式傳回 PolygonMultiPolygon 引數的數學質心。結果不保證位於 MultiPolygon 上。

    此函數處理幾何集合,方法是計算集合中最高維度元件的質心點。這些元件會被提取出來,並組成單一的 MultiPolygonMultiLineStringMultiPoint 以進行質心計算。

    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) |
    +------------------------+--------------------------------------------+
  • ST_ExteriorRing(poly)

    LineString 形式傳回 Polygonpoly 的外環。

    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)                    |
    +----------------------------------------------------+
  • ST_InteriorRingN(poly, N)

    LineString 形式傳回 Polygonpoly 的第 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)

    傳回 Polygonpoly 中的內環數量。

    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 |
    +---------------------------------------------+