文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 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 參考手冊  /  ...  /  LineString 和 MultiLineString 屬性函數

14.16.7.3 LineString 和 MultiLineString 屬性函數

LineStringPoint 值組成。您可以擷取 LineString 的特定點、計算其包含的點數或取得其長度。

本節中的某些函數也適用於 MultiLineString 值。

除非另有說明,否則本節中的函數會如下處理其幾何引數

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

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

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

  • 否則,傳回值為非 NULL

這些函數可用於取得線串屬性

  • ST_EndPoint(ls)

    傳回 Point,該點是 LineStringls 的端點。

    ST_EndPoint() 依照本節簡介中的說明處理其引數。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_AsText(ST_EndPoint(ST_GeomFromText(@ls)));
    +----------------------------------------------+
    | ST_AsText(ST_EndPoint(ST_GeomFromText(@ls))) |
    +----------------------------------------------+
    | POINT(3 3)                                   |
    +----------------------------------------------+
  • ST_IsClosed(ls)

    對於 LineStringls,如果 ls 是封閉的(也就是說,它的 ST_StartPoint()ST_EndPoint() 值相同),則 ST_IsClosed() 會傳回 1。

    對於 MultiLineStringls,如果 ls 是封閉的(也就是說,ls 中每個 LineStringST_StartPoint()ST_EndPoint() 值相同),則 ST_IsClosed() 會傳回 1。

    如果 ls 不是封閉的,則 ST_IsClosed() 會傳回 0,如果 lsNULL,則傳回 NULL

    ST_IsClosed() 依照本節簡介中的說明處理其引數,但此例外情況除外

    mysql> SET @ls1 = 'LineString(1 1,2 2,3 3,2 2)';
    mysql> SET @ls2 = 'LineString(1 1,2 2,3 3,1 1)';
    
    mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls1));
    +------------------------------------+
    | ST_IsClosed(ST_GeomFromText(@ls1)) |
    +------------------------------------+
    |                                  0 |
    +------------------------------------+
    
    mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls2));
    +------------------------------------+
    | ST_IsClosed(ST_GeomFromText(@ls2)) |
    +------------------------------------+
    |                                  1 |
    +------------------------------------+
    
    mysql> SET @ls3 = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
    
    mysql> SELECT ST_IsClosed(ST_GeomFromText(@ls3));
    +------------------------------------+
    | ST_IsClosed(ST_GeomFromText(@ls3)) |
    +------------------------------------+
    |                                  0 |
    +------------------------------------+
  • ST_Length(ls [, unit])

    傳回雙精度數字,表示 LineStringMultiLineStringls 在其相關空間參考系統中的長度。MultiLineString 值的長度等於其元素的長度總和。

    ST_Length() 計算結果如下

    • 如果幾何是笛卡爾 SRS 中的有效 LineString,則傳回值是幾何的笛卡爾長度。

    • 如果幾何是笛卡爾 SRS 中的有效 MultiLineString,則傳回值是其元素笛卡爾長度的總和。

    • 如果幾何是地理 SRS 中的有效 LineString,則傳回值是該 SRS 中幾何的測地長度,以公尺為單位。

    • 如果幾何圖形在地理 SRS 中是有效的 MultiLineString,則傳回值為其元素在該 SRS 中的測地長度總和,單位為公尺。

    ST_Length() 會依照本節簡介中所述處理其引數,但有以下例外情況:

    • 如果幾何圖形不是 LineStringMultiLineString,則傳回值為 NULL

    • 如果幾何圖形在幾何上無效,則結果為未定義的長度(即可以是任何數字),或發生錯誤。

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

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

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

    ST_Length() 允許使用選用的 unit 引數,該引數指定傳回長度值的線性單位。適用以下規則:

    • 如果指定了 MySQL 不支援的單位,則會發生 ER_UNIT_NOT_FOUND 錯誤。

    • 如果指定了支援的線性單位且 SRID 為 0,則會發生 ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT 錯誤。

    • 如果指定了支援的線性單位且 SRID 不為 0,則結果會以該單位表示。

    • 如果未指定單位,則結果會以幾何圖形的 SRS 單位表示,無論是笛卡爾或地理座標。目前,所有 MySQL SRS 都以公尺表示。

    如果可以在 INFORMATION_SCHEMA ST_UNITS_OF_MEASURE 表格中找到單位,則支援該單位。請參閱第 28.3.37 節,「INFORMATION_SCHEMA ST_UNITS_OF_MEASURE 表格」

    mysql> SET @ls = ST_GeomFromText('LineString(1 1,2 2,3 3)');
    mysql> SELECT ST_Length(@ls);
    +--------------------+
    | ST_Length(@ls)     |
    +--------------------+
    | 2.8284271247461903 |
    +--------------------+
    
    mysql> SET @mls = ST_GeomFromText('MultiLineString((1 1,2 2,3 3),(4 4,5 5))');
    mysql> SELECT ST_Length(@mls);
    +-------------------+
    | ST_Length(@mls)   |
    +-------------------+
    | 4.242640687119286 |
    +-------------------+
    
    mysql> SET @ls = ST_GeomFromText('LineString(1 1,2 2,3 3)', 4326);
    mysql> SELECT ST_Length(@ls);
    +-------------------+
    | ST_Length(@ls)    |
    +-------------------+
    | 313701.9623204328 |
    +-------------------+
    mysql> SELECT ST_Length(@ls, 'metre');
    +-------------------------+
    | ST_Length(@ls, 'metre') |
    +-------------------------+
    |       313701.9623204328 |
    +-------------------------+
    mysql> SELECT ST_Length(@ls, 'foot');
    +------------------------+
    | ST_Length(@ls, 'foot') |
    +------------------------+
    |     1029205.9131247795 |
    +------------------------+
  • ST_NumPoints(ls)

    傳回 LineStringlsPoint 物件的數量。

    ST_NumPoints() 會依照本節簡介中所述處理其引數。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_NumPoints(ST_GeomFromText(@ls));
    +------------------------------------+
    | ST_NumPoints(ST_GeomFromText(@ls)) |
    +------------------------------------+
    |                                  3 |
    +------------------------------------+
  • ST_PointN(ls, N)

    傳回 Linestringls 中的第 NPoint。點的編號從 1 開始。

    ST_PointN() 會依照本節簡介中所述處理其引數。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_AsText(ST_PointN(ST_GeomFromText(@ls),2));
    +----------------------------------------------+
    | ST_AsText(ST_PointN(ST_GeomFromText(@ls),2)) |
    +----------------------------------------------+
    | POINT(2 2)                                   |
    +----------------------------------------------+
  • ST_StartPoint(ls)

    傳回 LineStringls 的起始點 Point

    ST_StartPoint() 會依照本節簡介中所述處理其引數。

    mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_AsText(ST_StartPoint(ST_GeomFromText(@ls)));
    +------------------------------------------------+
    | ST_AsText(ST_StartPoint(ST_GeomFromText(@ls))) |
    +------------------------------------------------+
    | POINT(1 1)                                     |
    +------------------------------------------------+