文件首頁
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.1 一般幾何屬性函數

本節列出的函數不限制其引數,並接受任何類型的幾何值。

除非另有指定,否則本節中的函數會依以下方式處理其幾何引數

  • 如果任何引數為 NULL,則傳回值為 NULL

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

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

  • 如果任何 SRID 引數不在 32 位元不帶正負號的整數範圍內,則會發生 ER_DATA_OUT_OF_RANGE 錯誤。

  • 如果任何 SRID 引數參照未定義的 SRS,則會發生 ER_SRS_NOT_FOUND 錯誤。

  • 否則,傳回值為非 NULL

這些函數可用於取得幾何屬性

  • ST_Dimension(g)

    傳回幾何值 g 的固有維度。維度可以是 -1、0、1 或 2。這些值的意義在 第 13.4.2.2 節,「幾何類別」中說明。

    ST_Dimension() 會依照本節簡介中所述的方式處理其引數。

    mysql> SELECT ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)'));
    +------------------------------------------------------+
    | ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)')) |
    +------------------------------------------------------+
    |                                                    1 |
    +------------------------------------------------------+
  • ST_Envelope(g)

    傳回幾何值 g 的最小邊界矩形 (MBR)。結果會以 Polygon 值傳回,該值由邊界框的角點定義

    POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
    mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)')));
    +----------------------------------------------------------------+
    | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)'))) |
    +----------------------------------------------------------------+
    | POLYGON((1 1,2 1,2 2,1 2,1 1))                                 |
    +----------------------------------------------------------------+

    如果引數是點或垂直或水平線段,則 ST_Envelope() 會將點或線段傳回為其 MBR,而不是傳回無效的多邊形

    mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)')));
    +----------------------------------------------------------------+
    | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)'))) |
    +----------------------------------------------------------------+
    | LINESTRING(1 1,1 2)                                            |
    +----------------------------------------------------------------+

    ST_Envelope() 會依照本節簡介中所述的方式處理其引數,但此例外狀況除外

  • ST_GeometryType(g)

    傳回一個二進位字串,指出幾何執行個體 g 所屬的幾何類型名稱。該名稱對應於可執行個體化的 Geometry 子類別之一。

    ST_GeometryType() 會依照本節簡介中所述的方式處理其引數。

    mysql> SELECT ST_GeometryType(ST_GeomFromText('POINT(1 1)'));
    +------------------------------------------------+
    | ST_GeometryType(ST_GeomFromText('POINT(1 1)')) |
    +------------------------------------------------+
    | POINT                                          |
    +------------------------------------------------+
  • ST_IsEmpty(g)

    此函數是一個預留位置,針對空的幾何集合值傳回 1,否則傳回 0。

    唯一有效的空幾何是以空的幾何集合值形式表示。MySQL 不支援 GIS EMPTY 值,例如 POINT EMPTY

    ST_IsEmpty() 會依照本節簡介中所述的方式處理其引數。

  • ST_IsSimple(g)

    如果幾何值 g 依照 ISO SQL/MM Part 3: Spatial 標準為簡單的,則傳回 1。ST_IsSimple() 如果引數不簡單,則傳回 0。

    第 13.4.2 節,「OpenGIS 幾何模型」下給定的可執行個體化的幾何類別說明包含導致類別執行個體被歸類為不簡單的特定條件。

    ST_IsSimple() 會依照本節簡介中所述的方式處理其引數,但此例外狀況除外

    • 如果幾何圖形的地理空間參考系統 (SRS) 的經度或緯度超出範圍,則會發生錯誤。

      顯示的範圍以度為單位。由於浮點數運算的關係,精確的範圍限制會稍微偏差。

  • ST_SRID(g [, srid])

    當使用單一參數表示有效的幾何物件 g 時,ST_SRID() 會傳回一個整數,表示與 g 相關聯的空間參考系統 (SRS) 的 ID。

    當使用可選的第二個參數表示有效的 SRID 值時,ST_SRID() 會傳回一個與第一個參數類型相同的物件,且其 SRID 值等於第二個參數。這僅設定物件的 SRID 值;它不會執行任何座標值的轉換。

    ST_SRID() 會按照本節簡介中所述處理其參數,但有以下例外

    • 對於單一參數語法,即使幾何圖形的 SRID 指向未定義的 SRS,ST_SRID() 仍會傳回幾何圖形的 SRID,不會發生 ER_SRS_NOT_FOUND 錯誤。

    ST_SRID(g, target_srid)ST_Transform(g, target_srid) 的差異如下:

    • ST_SRID() 會變更幾何圖形的 SRID 值,而不會轉換其座標。

    • ST_Transform() 除了變更 SRID 值外,還會轉換幾何圖形的座標。

    mysql> SET @g = ST_GeomFromText('LineString(1 1,2 2)', 0);
    mysql> SELECT ST_SRID(@g);
    +-------------+
    | ST_SRID(@g) |
    +-------------+
    |           0 |
    +-------------+
    mysql> SET @g = ST_SRID(@g, 4326);
    mysql> SELECT ST_SRID(@g);
    +-------------+
    | ST_SRID(@g) |
    +-------------+
    |        4326 |
    +-------------+

    可以透過將 MySQL 特定函數之一 (用於建立空間值) 的結果,連同 SRID 值傳遞給 ST_SRID(),以在特定的 SRID 中建立幾何圖形。例如:

    SET @g1 = ST_SRID(Point(1, 1), 4326);

    然而,該方法會先在 SRID 0 中建立幾何圖形,然後將其轉換為 SRID 4326 (WGS 84)。較好的替代方法是從一開始就使用正確的空間參考系統建立幾何圖形。例如:

    SET @g1 = ST_PointFromText('POINT(1 1)', 4326);
    SET @g1 = ST_GeomFromText('POINT(1 1)', 4326);

    ST_SRID() 的雙參數形式對於修正或變更具有不正確 SRID 的幾何圖形的 SRS 等任務很有用。