• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 空间GeoJSON函数

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

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

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

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

      从geometry生成一个GeoJSON对象g。对象字符串具有连接字符集和校验规则。

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

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

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

      标记值含义
      0没有选择。如果options未指定,则为默认值。
      1个在输出中添加一个边界框。
      2将简短格式的CRS URN添加到输出中。默认格式是短格式()。EPSG:srid
      4添加长格式的CRS URN()。此标志将覆盖标志2。例如,选项值5和7表示相同(添加边界框和长格式CRS URN)。urn:ogc:def:crs:EPSG::srid
      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(如果提供的话)描述了如何处理包含坐标尺寸大于2的几何的GeoJSON文档。下表显示了允许的options值。

      期权价值含义
      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属性。解析函数解析和名称空间中的命名CRS URN ,但不解析作为链接对象给出的CRS。另外,被识别为SRID4326。如果对象具有不被理解的CRS,则会发生错误,但如果给出了可选参数,则任何CRS都将被忽略,即使该CRS无效。urn:ogc:def:crs:EPSG::sridEPSG:sridurn:ogc:def:crs:OGC:1.3:CRS84srid

      如果crs在GeoJSON文档的较低级别找到了指定与顶级对象SRID不同的SRID 的成员,ER_INVALID_GEOJSON_CRS_NOT_TOP_LEVEL则会发生错误。

      根据GeoJSON规范中的规定,对于typeGeoJSON输入的成员(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)                         	|
      +--------------------------------------	+