文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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})

    傳回 PolygonMultiPolygon 引數的數學重心,作為 Point。不保證結果會位於 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 |
    +---------------------------------------------+