暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的函数和运算符 - 空间分析函数 - 空间 GeoJSON 函数

数据库杂货铺 2021-08-26
1411
空间 GeoJSON 函数
本部分描述用于在 GeoJSON 文档和空间值之间转换的函数。GeoJSON 是一个用于编码几何/地理特征的开放标准。
 
GeoJSON 支持与 MySQL 相同的几何/地理数据类型。不支持 Feature 和 FeatureCollection 对象,除非从它们中提取出几何对象。CRS 支持仅限于标识 SRID 的值。
 
MySQL 还支持原生 JSON 数据类型和一组 SQL 函数,以支持对 JSON 值的操作。
 
● ST_AsGeoJSON(g [, max_dec_digits [, options]])
 
从几何值 g 生成一个 GeoJSON 对象。对象字符串具有连接的字符集和排序规则。
 
如果任何参数为 NULL,则返回值为 NULL。如果任何非 NULL 参数无效,则会发生错误。
 
如果指定了 max_dec_digits,将限制坐标的小数位数,会对输出进行四舍五入。如果未指定,此参数默认为其最大值2^32−1。最小值是0。
 
options 为位掩码。下表显示了允许的标志值。如果几何参数的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]} |
    +-------------------------------------------------------------+
    复制
     
    ● ST_GeomFromGeoJSON(str [, options [, srid]])
     
    解析一个表示 GeoJSON 对象的字符串 str 并返回一个几何值。
     
    如果任何参数为 NULL,则返回值为 NULL。如果任何非 NULL 参数无效,则会发生错误。
     
    如果指定了 options,选项描述如何处理包含坐标维度大于2的几何值的 GeoJSON 文档。下表显示了允许的选项值。
     
    选项值
    含义
    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 几何值、特征和特征收集对象可能具有 crs 属性。解析函数在 urn:ogc:def:crs:EPSG::srid  EPSG: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 成员(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) |
      +-------------------------------------------------+
      复制
       
       
       
       
      官方网址:
      https://dev.mysql.com/doc/refman/8.0/en/spatial-geojson-functions.html
      文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论