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