12.16.11 空间 GeoJSON 函数

本节介绍在 GeoJSON 文档和空间值之间转换的函数。 GeoJSON 是用于编码几何/地理 Feature 的开放标准。有关更多信息,请参见http://geojson.org。此处讨论的功能遵循 GeoJSON 规范修订版 1.0.

GeoJSON 支持与 MySQL 支持相同的几何/地理数据类型。不支持 Feature 和 FeatureCollection 对象,只是从它们中提取几何对象。 CRS 支持仅限于标识 SRID 的值。

MySQL 还支持本机JSON数据类型和一组 SQL 函数,以启用对 JSON 值的操作。有关更多信息,请参见第 11.5 节“ JSON 数据类型”第 12.17 节“ JSON 函数”

ST_AsGeoJSON(g [, max_dec_digits [, options]])

从几何* g *生成一个 GeoJSON 对象。对象字符串具有连接字符集和排序规则。

如果任何参数为NULL,则返回值为NULL。如果任何非NULL参数无效,则会发生错误。

  • max_dec_digits *,如果指定,则限制坐标的小数位数,并导致输出舍入。如果未指定,则此参数默认为其最大值 232-1.最小值为 0.

  • options *(如果已指定)是位掩码。下 table 显示了允许的标志值。如果 geometry 参数的 SRID 为 0,则即使请求那些标志值的那些标志值也不会生成 CRS 对象。

Flag ValueMeaning
0没有选择。如果未指定* options *,则为默认设置。
1在输出中添加一个边界框。
2将简短格式的 CRS URN 添加到输出中。默认格式是短格式(EPSG:srid)。
4添加长格式的 CRS URN(urn:ogc:def:crs:EPSG::srid)。该标志覆盖标志 2.例如,选项值 5 和 7table 示相同(添加边界框和长格式 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]])

解析代 tableGeoJSON 对象的字符串* str *并返回几何。

如果任何参数为NULL,则返回值为NULL。如果任何非NULL参数无效,则会发生错误。

  • options (如果提供)描述了如何处理包含坐标尺寸大于 2 的几何的 GeoJSON 文档。下 table 显示了允许的 options *值。
Option ValueMeaning
1拒绝文档并产生错误。如果未指定* options *,则为默认设置。
2, 3, 4接受文档并去除坐标以获取更高的坐标尺寸。
  • options *值 2、3 和 4 当前产生相同的效果。如果将来支持坐标尺寸大于 2 的几何,这些值将产生不同的效果。

  • srid *参数(如果提供)必须是 32 位无符号整数。如果未给出,则几何返回值的 SRID 为 4326.

GeoJSON 几何,要素和要素集合对象可能具有crs属性。解析函数解析urn:ogc:def:crs:EPSG::sridEPSG:srid名称空间中的命名 CRS URN,但不解析作为链接对象给出的 CRS。另外,urn:ogc:def:crs:OGC:1.3:CRS84被识别为 SRID4326.如果对象具有不被理解的 CRS,则会发生错误,但如果给出了可选的* srid *参数,则任何 CRS 都将被忽略,即使它无效。

根据 GeoJSON 规范中的规定,对于 GeoJSONImporting 的type成员(PointLineString等),解析是区分大小写的。该规范没有提及其他解析的大小写敏感性,而在 MySQL 中则不区分大小写。

此示例显示了一个简单的 GeoJSON 对象的解析结果:

mysql> SET @json = '{ "type": "Point", "coordinates": [102.0, 0.0]}';
mysql> SELECT ST_AsText(ST_GeomFromGeoJSON(@json));
+--------------------------------------+
| ST_AsText(ST_GeomFromGeoJSON(@json)) |
+--------------------------------------+
| POINT(102 0)                         |
+--------------------------------------+