文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式 Letter) - 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 參考手冊  /  ...  /  幾何格式轉換函數

14.16.6 幾何格式轉換函數

MySQL 支援本節列出的函數,用於將幾何值從內部幾何格式轉換為 WKT 或 WKB 格式,或用於交換 X 和 Y 座標的順序。

還有一些函數可以將字串從 WKT 或 WKB 格式轉換為內部幾何格式。請參閱章節 14.16.3,「從 WKT 值建立幾何值的函數」章節 14.16.4,「從 WKB 值建立幾何值的函數」

接受 WKT 幾何集合引數的函數,例如ST_GeomFromText(),可以理解 OpenGIS 'GEOMETRYCOLLECTION EMPTY' 標準語法和 MySQL 'GEOMETRYCOLLECTION()' 非標準語法。產生空幾何集合的另一種方法是呼叫不帶引數的GeometryCollection()。產生 WKT 值的函數,例如ST_AsWKT(),會產生'GEOMETRYCOLLECTION EMPTY' 標準語法。

mysql> SET @s1 = ST_GeomFromText('GEOMETRYCOLLECTION()');
mysql> SET @s2 = ST_GeomFromText('GEOMETRYCOLLECTION EMPTY');
mysql> SELECT ST_AsWKT(@s1), ST_AsWKT(@s2);
+--------------------------+--------------------------+
| ST_AsWKT(@s1)            | ST_AsWKT(@s2)            |
+--------------------------+--------------------------+
| GEOMETRYCOLLECTION EMPTY | GEOMETRYCOLLECTION EMPTY |
+--------------------------+--------------------------+
mysql> SELECT ST_AsWKT(GeomCollection());
+----------------------------+
| ST_AsWKT(GeomCollection()) |
+----------------------------+
| GEOMETRYCOLLECTION EMPTY   |
+----------------------------+

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

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

  • 如果任何幾何引數不是語法上格式良好的幾何,則會發生ER_GIS_INVALID_DATA錯誤。

  • 如果任何幾何引數位於未定義的空間參考系統中,則軸會以它們在幾何中出現的順序輸出,並且會發生ER_WARN_SRS_NOT_FOUND_AXIS_ORDER警告。

  • 預設情況下,地理座標(緯度、經度)的解讀順序與幾何引數的空間參考系統指定的順序相同。可以提供選用的options引數來覆寫預設軸順序。options由以逗號分隔的key=value列表組成。唯一允許的key值為axis-order,允許的值為lat-longlong-latsrid-defined(預設值)。

    如果options引數為NULL,則傳回值為NULL。如果options引數無效,則會發生錯誤以指示原因。

  • 否則,傳回值為非NULL

這些函數可用於格式轉換或座標交換

  • ST_AsBinary(g [, options])ST_AsWKB(g [, options])

    將內部幾何格式的值轉換為其 WKB 表示法,並傳回二進位結果。

    函數傳回值具有地理座標(緯度、經度),其順序由適用於幾何引數的空間參考系統指定。可以提供選用的options引數來覆寫預設軸順序。

    ST_AsBinary()ST_AsWKB()會按照本節引言中的說明處理其引數。

    mysql> SET @g = ST_LineFromText('LINESTRING(0 5,5 10,10 15)', 4326);
    mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g)));
    +-----------------------------------------+
    | ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g))) |
    +-----------------------------------------+
    | LINESTRING(5 0,10 5,15 10)              |
    +-----------------------------------------+
    mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=long-lat')));
    +----------------------------------------------------------------+
    | ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=long-lat'))) |
    +----------------------------------------------------------------+
    | LINESTRING(0 5,5 10,10 15)                                     |
    +----------------------------------------------------------------+
    mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=lat-long')));
    +----------------------------------------------------------------+
    | ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=lat-long'))) |
    +----------------------------------------------------------------+
    | LINESTRING(5 0,10 5,15 10)                                     |
    +----------------------------------------------------------------+
  • ST_AsText(g [, options])ST_AsWKT(g [, options])

    將內部幾何格式的值轉換為其 WKT 表示法,並傳回字串結果。

    函數傳回值具有地理座標(緯度、經度),其順序由適用於幾何引數的空間參考系統指定。可以提供選用的options引數來覆寫預設軸順序。

    ST_AsText()ST_AsWKT()會按照本節引言中的說明處理其引數。

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

    MultiPoint值的輸出包含每個點周圍的括號。例如

    mysql> SELECT ST_AsText(ST_GeomFromText(@mp));
    +---------------------------------+
    | ST_AsText(ST_GeomFromText(@mp)) |
    +---------------------------------+
    | MULTIPOINT((1 1),(2 2),(3 3))   |
    +---------------------------------+
  • ST_SwapXY(g)

    接受內部幾何格式的引數,交換幾何內每個座標對的 X 和 Y 值,並傳回結果。

    ST_SwapXY()會按照本節引言中的說明處理其引數。

    mysql> SET @g = ST_LineFromText('LINESTRING(0 5,5 10,10 15)');
    mysql> SELECT ST_AsText(@g);
    +----------------------------+
    | ST_AsText(@g)              |
    +----------------------------+
    | LINESTRING(0 5,5 10,10 15) |
    +----------------------------+
    mysql> SELECT ST_AsText(ST_SwapXY(@g));
    +----------------------------+
    | ST_AsText(ST_SwapXY(@g))   |
    +----------------------------+
    | LINESTRING(5 0,10 5,15 10) |
    +----------------------------+