本節描述在 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:)。srid4 新增長格式 CRS URN ( urn:ogc:def:crs:EPSG::)。此旗標會覆寫旗標 2。例如,選項值 5 和 7 表示相同 (新增邊界框和長格式 CRS URN)。sridmysql> 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 幾何引數,如果有任何引數的經度或緯度超出範圍,則會發生錯誤
如果經度值不在範圍 (−180, 180] 中,則會發生
ER_LONGITUDE_OUT_OF_RANGE錯誤。如果緯度值不在 [−90, 90] 範圍內,則會發生
ER_LATITUDE_OUT_OF_RANGE錯誤。
顯示的範圍以度為單位。如果 SRS 使用其他單位,則該範圍會使用其單位中對應的值。由於浮點算術,精確的範圍限制會略有偏差。
GeoJSON 幾何、特徵和特徵集合物件可能具有
crs屬性。解析函數會解析urn:ogc:def:crs:EPSG::和sridEPSG:名稱空間中的具名 CRS URN,但不解析以連結物件形式提供的 CRS。此外,sridurn: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成員(Point、LineString等),解析是區分大小寫的。該規格對於其他解析的區分大小寫保持沉默,而在 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) | +-------------------------------------------------+