# 12.17.11 空间 GeoJSON 函数
本节介绍用于在 GeoJSON 文档和空间值之间进行转换的函数。GeoJSON 是一种用于编码几何/地理特征的开放标准。有关详细信息,请参阅http://geojson.org (opens new window).此处讨论的函数遵循 GeoJSON 规范修订版 1.0。
GeoJSON 支持 MySQL 支持的相同几何/地理数据类型。不支持 Feature 和 FeatureCollection 对象,除了从中提取几何对象。CRS 支持仅限于标识 SRID 的值。
MySQL 还支持原生JSON
数据类型和一组 SQL 函数以启用对 JSON 值的操作。有关详细信息,请参阅第 11.5 节,“JSON 数据类型”, 和第 12.18 节,“JSON 函数”.
-
ST_AsGeoJSON(*
g* [, *
max_dec_digits* [, *
选项*]])
从几何生成 GeoJSON 对象*
g
*.对象字符串具有连接字符集和排序规则。如果有任何论据
空值
,返回值为空值
.如果有任何非无效的
参数无效,出现错误。最大数字
,如果指定,将限制坐标的小数位数,并导致输出四舍五入。如果未指定,此参数默认为其最大值232− 1.最小值为0。选项
,如果指定,则为位掩码。下表显示了允许的标志值。如果geometry参数的SRID为0,则即使对于那些请求CRS对象的标志值,也不会生成CRS对象。标志值 意思 0 别无选择。这是默认值,如果* 选项
*未指定。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]} | +-------------------------------------------------------------+
-
圣约翰(*
str* [, *
选项* [, *
srid*]])
解析字符串*
str
*表示GeoJSON对象并返回几何体。如果有任何论据
无效的
,返回值为无效的
.如果有的话-无效的
参数无效,出现错误。选项
,如果给定,描述如何处理包含坐标维度大于2的几何图形的GeoJSON文档。下表显示了允许的*选项
*价值观期权价值 意思 1. 拒绝文档并产生错误。这是默认值,如果* 选项
*未指定。2, 3, 4 接受文档并去除坐标以获得更高的坐标尺寸。 *
选项
*值2、3和4当前会产生相同的效果。如果将来支持坐标标注大于2的几何图形,可以预期这些值会产生不同的效果。这个*
srid
*参数(如果给定)必须是32位无符号整数。如果未给定,几何体返回值的SRID为4326。如果*
srid
*指未定义的空间参考系(SRS),即ER_SRS_未找到
(opens new window)发生错误。对于地理SRS几何参数,如果任何参数的经度或纬度超出范围,则会发生错误:
如果经度值不在范围内(−180,180],一个
呃经度超出范围
(opens new window)发生错误。如果纬度值不在范围内[−90, 90]一
ER_纬度_超出范围
(opens new window)发生错误。显示的范围以度为单位。如果SRS使用另一个单位,则范围使用其单位中的相应值。由于采用浮点运算,精确的范围限制略有偏差。
GeoJSON几何体、要素和要素集合对象可能具有
crs
所有物解析函数解析urn:ogc:def:crs:EPSG::*
srid*
和EPSG:*
srid*
名称空间,但不是作为链接对象提供的CRS。而且urn:ogc:def:crs:OGC:1.3:CRS84
被识别为SRID 4326。如果一个对象有一个不可理解的CRS,则会发生错误,除非*srid
*参数给定时,即使CRS无效,也会忽略任何CRS。如果
crs
指定不同于顶级对象SRID的SRID的成员位于GeoJSON文档的较低级别,即ER_无效_GEOJSON_CRS_非顶级
(opens new window)发生错误。正如GeoJSON规范中所规定的,解析对
类型
GeoJSON输入的成员(指向
,线绳
,等等)。该规范对其他解析的大小写敏感度没有说明,而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) | +-------------------------------------------------+