文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  空间 GeoJSON 函数

14.16.11 空间 GeoJSON 函数

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

GeoJSON 支持与 MySQL 支持的相同的几何/地理数据类型。不支持要素和要素集合对象,但会从它们中提取几何对象。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,即使对于那些请求 SRID 的标志值,也不会生成 CRS 对象。

    标志值 意义
    0 无选项。如果未指定 options,则为默认值。
    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]}            |
    +-------------------------------------------------------------+
  • 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 几何参数,如果任何参数的经度或纬度超出范围,则会发生错误

    显示的范围以度为单位。如果 SRS 使用其他单位,则范围使用其单位中的对应值。由于浮点数运算,确切的范围限制略有偏差。

    GeoJSON 几何体、要素和要素集合对象可能具有 crs 属性。解析函数解析 urn:ogc:def:crs:EPSG::sridEPSG:srid 命名空间中的命名 CRS URN,但不解析作为链接对象给出的 CRS。此外,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 成员 (PointLineString 等) 区分大小写。规范对其他解析不区分大小写,而在 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)                                    |
    +-------------------------------------------------+