本節列出的函數不限制其引數,並且接受任何類型的幾何值。
除非另有指定,本節中的函數會以下列方式處理其幾何引數:
如果任何引數為
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
。
這些函數可用於取得幾何屬性
傳回幾何值
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 | +------------------------------------------------------+
傳回幾何值
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()
會依照本節簡介中的說明處理其引數,但有此例外:如果幾何具有地理空間參考系統 (SRS) 的 SRID 值,則會發生
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
錯誤。
傳回一個二進位字串,指示幾何實例
g
所屬的幾何類型名稱。該名稱對應於可實例化的Geometry
子類別之一。ST_GeometryType()
會依照本節簡介中的說明處理其引數。mysql> SELECT ST_GeometryType(ST_GeomFromText('POINT(1 1)')); +------------------------------------------------+ | ST_GeometryType(ST_GeomFromText('POINT(1 1)')) | +------------------------------------------------+ | POINT | +------------------------------------------------+
此函數是一個預留位置,對於空幾何集合值傳回 1,否則傳回 0。
唯一有效的空幾何以空幾何集合值的形式表示。MySQL 不支援 GIS
EMPTY
值,例如POINT EMPTY
。ST_IsEmpty()
會依照本節簡介中的說明處理其引數。如果幾何值
g
根據 ISO SQL/MM Part 3: Spatial 標準是簡單的,則傳回 1。ST_IsSimple()
如果引數不簡單,則傳回 0。第 13.4.2 節,「OpenGIS 幾何模型」下給出的可實例化幾何類別描述包含將類別實例歸類為不簡單的特定條件。
ST_IsSimple()
會依照本節簡介中的說明處理其引數,但有此例外:如果幾何具有超出範圍的經度或緯度的地理 SRS,則會發生錯誤
如果經度值不在範圍 (−180, 180] 內,則會發生
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
錯誤。如果緯度值不在範圍 [−90, 90] 內,則會發生
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
錯誤。
顯示的範圍以度為單位。由於浮點運算,精確的範圍限制會略有偏差。
使用單一引數,代表有效的幾何物件
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 等任務非常有用。