文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁 (TGZ) - 258.2Kb
手冊頁 (Zip) - 365.3Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  支援的空間資料格式

13.4.3 支援的空間資料格式

兩種標準空間資料格式用於表示查詢中的幾何物件

  • 已知文字 (WKT) 格式

  • 已知二進位 (WKB) 格式

在內部,MySQL 以與 WKT 或 WKB 格式都不相同的格式儲存幾何值。(內部格式類似 WKB,但開頭有 4 個位元組來指示 SRID。)

有函數可用於在不同的資料格式之間進行轉換;請參閱 第 14.16.6 節「幾何格式轉換函數」

以下章節描述 MySQL 使用的空間資料格式

已知文字 (WKT) 格式

幾何值的已知文字 (WKT) 表示法旨在以 ASCII 格式交換幾何資料。OpenGIS 規範提供 Backus-Naur 文法,用於指定寫入 WKT 值的正式產生規則(請參閱 第 13.4 節「空間資料類型」)。

幾何物件的 WKT 表示法範例

  • 一個 Point

    POINT(15 20)

    點座標的指定沒有分隔逗號。這與 SQL Point() 函數的語法不同,後者需要在座標之間使用逗號。請注意使用適合給定空間操作的上下文的語法。例如,以下陳述式都使用 ST_X()Point 物件中提取 X 座標。第一個使用 Point() 函數直接產生物件。第二個使用 WKT 表示法,並使用 ST_GeomFromText() 將其轉換為 Point

    mysql> SELECT ST_X(Point(15, 20));
    +---------------------+
    | ST_X(POINT(15, 20)) |
    +---------------------+
    |                  15 |
    +---------------------+
    
    mysql> SELECT ST_X(ST_GeomFromText('POINT(15 20)'));
    +---------------------------------------+
    | ST_X(ST_GeomFromText('POINT(15 20)')) |
    +---------------------------------------+
    |                                    15 |
    +---------------------------------------+
  • 一個具有四個點的 LineString

    LINESTRING(0 0, 10 10, 20 25, 50 60)

    點座標對以逗號分隔。

  • 一個具有一個外部環和一個內部環的 Polygon

    POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))
  • 一個具有三個 Point 值的 MultiPoint

    MULTIPOINT(0 0, 20 20, 60 60)

    空間函數(例如 ST_MPointFromText()ST_GeomFromText())接受 MultiPoint 值的 WKT 格式表示,允許值內的各個點以括號括起來。例如,以下兩個函數呼叫都是有效的

    ST_MPointFromText('MULTIPOINT (1 1, 2 2, 3 3)')
    ST_MPointFromText('MULTIPOINT ((1 1), (2 2), (3 3))')
  • 一個具有兩個 LineString 值的 MultiLineString

    MULTILINESTRING((10 10, 20 20), (15 15, 30 15))
  • 一個具有兩個 Polygon 值的 MultiPolygon

    MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))
  • 一個由兩個 Point 值和一個 LineString 組成的 GeometryCollection

    GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))

已知二進位 (WKB) 格式

幾何值的已知二進位 (WKB) 表示法用於交換以二進位串流表示的幾何資料,這些串流由包含幾何 WKB 資訊的 BLOB 值表示。此格式由 OpenGIS 規範定義(請參閱 第 13.4 節「空間資料類型」)。它也在 ISO SQL/MM 第 3 部分:空間標準中定義。

WKB 使用 1 位元組無號整數、4 位元組無號整數和 8 位元組雙精度數字 (IEEE 754 格式)。一個位元組為八位元。

例如,對應於 POINT(1 -1) 的 WKB 值由以下 21 個位元組的序列組成,每個位元組以兩個十六進位數字表示

0101000000000000000000F03F000000000000F0BF

該序列由下表中顯示的元件組成。

表 13.2 WKB 元件範例

元件 大小
位元組順序 1 個位元組 01
WKB 類型 4 個位元組 01000000
X 座標 8 個位元組 000000000000F03F
Y 座標 8 個位元組 000000000000F0BF

元件表示法如下

  • 位元組順序指示器為 1 或 0,表示小端或大端儲存。小端和大端位元組順序也分別稱為網路資料表示 (NDR) 和外部資料表示 (XDR)。

  • WKB 類型是一個程式碼,指示幾何類型。MySQL 使用 1 到 7 的值來指示 PointLineStringPolygonMultiPointMultiLineStringMultiPolygonGeometryCollection

  • Point 值具有 X 和 Y 座標,每個座標都表示為雙精度值。

更複雜的幾何值的 WKB 值具有更複雜的資料結構,如 OpenGIS 規範中所詳述。

內部幾何儲存格式

MySQL 使用 4 個位元組來指示 SRID,後跟值的 WKB 表示法來儲存幾何值。有關 WKB 格式的說明,請參閱已知二進位 (WKB) 格式

對於 WKB 部分,適用以下 MySQL 特有的考量

  • 位元組順序指示器位元組為 1,因為 MySQL 將幾何圖形儲存為小端值。

  • MySQL 支援 PointLineStringPolygonMultiPointMultiLineStringMultiPolygonGeometryCollection 的幾何類型。不支援其他幾何類型。

  • 只有 GeometryCollection 可以為空。此類值以 0 個元素儲存。

  • 多邊形環可以按順時針和逆時針方向指定。MySQL 在讀取資料時會自動翻轉環。

笛卡爾座標以空間參考系統的長度單位儲存,其中 X 值位於 X 座標中,Y 值位於 Y 座標中。軸方向是空間參考系統指定的方向。

地理座標以空間參考系統的角度單位儲存,其中經度位於 X 座標中,緯度位於 Y 座標中。軸方向和子午線是空間參考系統指定的方向。

LENGTH() 函數會傳回值儲存所需的空間(以位元組為單位)。範例

mysql> SET @g = ST_GeomFromText('POINT(1 -1)');
mysql> SELECT LENGTH(@g);
+------------+
| LENGTH(@g) |
+------------+
|         25 |
+------------+
mysql> SELECT HEX(@g);
+----------------------------------------------------+
| HEX(@g)                                            |
+----------------------------------------------------+
| 000000000101000000000000000000F03F000000000000F0BF |
+----------------------------------------------------+

值長度為 25 個位元組,由以下元件組成(從十六進位值中可以看出)

  • 整數 SRID 的 4 個位元組 (0)

  • 整數位元組順序的 1 個位元組 (1 = 小端)

  • 4 個位元組用於整數類型資訊 (1 = Point)

  • 8 個位元組用於雙精度 X 座標 (1)

  • 8 個位元組用於雙精度 Y 座標 (−1)