本節描述用於在 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 的幾何圖形 (geometry)、特徵 (feature) 和特徵集合 (feature collection) 物件可能具有
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) | +-------------------------------------------------+