文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 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 參考手冊  /  ...  /  空間 GeoJSON 函數

14.16.11 空間 GeoJSON 函數

本節描述在 GeoJSON 文件與空間值之間轉換的函數。GeoJSON 是一種用於編碼幾何/地理特徵的開放標準。如需更多資訊,請參閱 http://geojson.org。此處討論的函數遵循 GeoJSON 規格修訂版 1.0。

GeoJSON 支援 MySQL 支援的相同幾何/地理資料類型。不支援 Feature 與 FeatureCollection 物件,但會從其中擷取幾何物件。CRS 支援僅限於識別 SRID 的值。

MySQL 也支援原生 JSON 資料類型以及一組 SQL 函數,以啟用 JSON 值上的操作。如需更多資訊,請參閱 第 13.5 節,「JSON 資料類型」第 14.17 節,「JSON 函數」

  • ST_AsGeoJSON(g [, max_dec_digits [, options]])

    從幾何 g 產生 GeoJSON 物件。物件字串具有連線字元集與排序。

    如果有任何引數為 NULL,則傳回值為 NULL。如果有任何非 NULL 引數無效,則會發生錯誤。

    如果指定 max_dec_digits,則會限制座標的小數位數,並導致輸出捨入。如果未指定,則此引數預設為其最大值 232 − 1。最小值為 0。

    如果指定 options,則為位元遮罩。下表顯示允許的旗標值。如果幾何引數的 SRID 為 0,則即使是那些要求 CRS 物件的旗標值,也不會產生 CRS 物件。

    旗標值 意義
    0 無選項。如果未指定 options,則這是預設值。
    1 將邊界框新增至輸出。
    2 將短格式 CRS URN 新增至輸出。預設格式為短格式 (EPSG:srid)。
    4 新增長格式 CRS URN (urn:ogc:def:crs:EPSG::srid)。此旗標會覆寫旗標 2。例如,選項值 5 和 7 表示相同 (新增邊界框和長格式 CRS URN)。
    mysql> SELECT ST_AsGeoJSON(ST_GeomFromText('POINT(11.11111 12.22222)'),2);
    +-------------------------------------------------------------+
    | ST_AsGeoJSON(ST_GeomFromText('POINT(11.11111 12.22222)'),2) |
    +-------------------------------------------------------------+
    | {"type": "Point", "coordinates": [11.11, 12.22]}            |
    +-------------------------------------------------------------+
  • ST_GeomFromGeoJSON(str [, options [, srid]])

    剖析表示 GeoJSON 物件的字串 str,並傳回幾何。

    如果有任何引數為 NULL,則傳回值為 NULL。如果有任何非 NULL 引數無效,則會發生錯誤。

    如果指定 options,則描述如何處理包含座標維度大於 2 之幾何的 GeoJSON 文件。下表顯示允許的 options 值。

    選項值 意義
    1 拒絕文件並產生錯誤。如果未指定 options,則這是預設值。
    2, 3, 4 接受文件並移除較高座標維度的座標。

    options 值 2、3 和 4 目前會產生相同的效果。如果未來支援座標維度大於 2 的幾何,您可以預期這些值會產生不同的效果。

    如果指定 srid 引數,則必須為 32 位元不帶正負號的整數。如果未指定,則幾何傳回值的 SRID 為 4326。

    如果 srid 參照未定義的空間參考系統 (SRS),則會發生 ER_SRS_NOT_FOUND 錯誤。

    對於地理 SRS 幾何引數,如果有任何引數的經度或緯度超出範圍,則會發生錯誤

    顯示的範圍以度為單位。如果 SRS 使用其他單位,則該範圍會使用其單位中對應的值。由於浮點算術,精確的範圍限制會略有偏差。

    GeoJSON 幾何、特徵和特徵集合物件可能具有 crs 屬性。解析函數會解析 urn:ogc:def:crs:EPSG::sridEPSG:srid 名稱空間中的具名 CRS URN,但不解析以連結物件形式提供的 CRS。此外,urn:ogc:def:crs:OGC:1.3:CRS84 會被識別為 SRID 4326。如果物件具有無法識別的 CRS,則會發生錯誤,但如果提供了可選的 srid 引數,則會忽略任何 CRS,即使它是無效的。

    如果在 GeoJSON 文件較低層級找到指定與頂層物件 SRID 不同的 SRID 的 crs 成員,則會發生 ER_INVALID_GEOJSON_CRS_NOT_TOP_LEVEL 錯誤。

    如 GeoJSON 規格中所指定,對於 GeoJSON 輸入的 type 成員(PointLineString 等),解析是區分大小寫的。該規格對於其他解析的區分大小寫保持沉默,而在 MySQL 中是不區分大小寫的。

    此範例顯示簡單 GeoJSON 物件的解析結果。請注意,座標的順序取決於使用的 SRID。

    mysql> SET @json = '{ "type": "Point", "coordinates": [102.0, 0.0]}';
    mysql> SELECT ST_AsText(ST_GeomFromGeoJSON(@json));
    +--------------------------------------+
    | ST_AsText(ST_GeomFromGeoJSON(@json)) |
    +--------------------------------------+
    | POINT(0 102)                         |
    +--------------------------------------+
    mysql> SELECT ST_SRID(ST_GeomFromGeoJSON(@json));
    +------------------------------------+
    | ST_SRID(ST_GeomFromGeoJSON(@json)) |
    +------------------------------------+
    |                               4326 |
    +------------------------------------+
    mysql> SELECT ST_AsText(ST_SRID(ST_GeomFromGeoJSON(@json),0));
    +-------------------------------------------------+
    | ST_AsText(ST_SRID(ST_GeomFromGeoJSON(@json),0)) |
    +-------------------------------------------------+
    | POINT(102 0)                                    |
    +-------------------------------------------------+