LineString
由 Point
值組成。您可以擷取 LineString
的特定點、計算其包含的點數或取得其長度。
本節中的某些函數也適用於 MultiLineString
值。
除非另有說明,否則本節中的函數會如下處理其幾何引數
如果任何引數為
NULL
,或任何幾何引數為空幾何,則傳回值為NULL
。如果任何幾何引數不是語法正確的幾何,則會發生
ER_GIS_INVALID_DATA
錯誤。如果任何幾何引數是未定義空間參考系統 (SRS) 中語法正確的幾何,則會發生
ER_SRS_NOT_FOUND
錯誤。否則,傳回值為非
NULL
。
這些函數可用於取得線串屬性
傳回
Point
,該點是LineString
值ls
的端點。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) | +----------------------------------------------+
對於
LineString
值ls
,如果ls
是封閉的(也就是說,它的ST_StartPoint()
和ST_EndPoint()
值相同),則ST_IsClosed()
會傳回 1。對於
MultiLineString
值ls
,如果ls
是封閉的(也就是說,ls
中每個LineString
的ST_StartPoint()
和ST_EndPoint()
值相同),則ST_IsClosed()
會傳回 1。如果
ls
不是封閉的,則ST_IsClosed()
會傳回 0,如果ls
為NULL
,則傳回NULL
。ST_IsClosed()
依照本節簡介中的說明處理其引數,但此例外情況除外如果幾何具有地理空間參考系統 (SRS) 的 SRID 值,則會發生
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
錯誤。
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 | +------------------------------------+
傳回雙精度數字,表示
LineString
或MultiLineString
值ls
在其相關空間參考系統中的長度。MultiLineString
值的長度等於其元素的長度總和。ST_Length()
計算結果如下如果幾何是笛卡爾 SRS 中的有效
LineString
,則傳回值是幾何的笛卡爾長度。如果幾何是笛卡爾 SRS 中的有效
MultiLineString
,則傳回值是其元素笛卡爾長度的總和。如果幾何是地理 SRS 中的有效
LineString
,則傳回值是該 SRS 中幾何的測地長度,以公尺為單位。如果幾何圖形在地理 SRS 中是有效的
MultiLineString
,則傳回值為其元素在該 SRS 中的測地長度總和,單位為公尺。
ST_Length()
會依照本節簡介中所述處理其引數,但有以下例外情況:如果幾何圖形不是
LineString
或MultiLineString
,則傳回值為NULL
。如果幾何圖形在幾何上無效,則結果為未定義的長度(即可以是任何數字),或發生錯誤。
如果長度計算結果為
+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
錯誤。
顯示的範圍以度為單位。由於浮點運算,確切的範圍限制會略有偏差。
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 | +------------------------+
傳回
LineString
值ls
中Point
物件的數量。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 | +------------------------------------+
傳回
Linestring
值ls
中的第N
個Point
。點的編號從 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) | +----------------------------------------------+
傳回
LineString
值ls
的起始點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) | +------------------------------------------------+