Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Spatial GeoJSON Functions

14.16.11 空间 GeoJSON 函数

本节描述了将 GeoJSON 文档转换为空间值的函数。GeoJSON 是一种开放标准,用于编码几何学/地理学特征。有关更多信息,请见http://geojson.org。本节讨论的函数遵循 GeoJSON 规范第 1.0 版本。

GeoJSON 支持与 MySQL 支持的相同的几何学/地理学数据类型。Feature 和 FeatureCollection 对象除外,仅从中提取 geometry 对象。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 对象。

    Flag Value Meaning
    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]])

    解析字符串 str,表示 GeoJSON 对象,并返回一个几何学对象。

    如果任何参数为 NULL,则返回值为 NULL。如果任何非 NULL 参数无效,出现错误。

    options,如果给定,描述了如何处理包含高维度坐标的GeoJSON文档。以下表格显示了允许的options值。

    Option Value Meaning
    1 拒绝文档并产生错误。这是默认行为,如果不指定options
    2, 3, 4 接受文档并删除高维度坐标。

    options值2、3和4当前产生相同的效果。如果将来支持高维度坐标,期望这些值产生不同的效果。

    srid参数,如果给定,必须是32位无符号整数。如果不给定,几何返回值的SRID为4326。

    如果srid引用了未定义的空间参考系统(SRS),将发生ER_SRS_NOT_FOUND错误。

    对于地理SRS几何参数,如果任何参数的经度或纬度超出范围,发生错误:

    显示的范围是度。使用其他单位的SRS将使用相应的值。实际范围略有不同,因为使用浮点数进行了算术。

    GeoJSON几何、特征和特征集合对象可能具有crs属性。解析函数将URN命名CRS在urn:ogc:def:crs:EPSG::sridEPSG:srid命名空间中解析,但不是作为链接对象给定的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规范,解析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)                                    |
    +-------------------------------------------------+