文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man 頁面 (TGZ) - 258.5Kb
Man 頁面 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  空間 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 的幾何圖形 (geometry)、特徵 (feature) 和特徵集合 (feature collection) 物件可能具有 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)                                    |
    +-------------------------------------------------+