• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 通用几何属性函数

    本节中列出的函数不限制其参数,并且接受任何类型的几何值。

    除非另有说明,否则本节中的函数将按以下方式处理其参数:

    • 如果有任何参数NULL,则返回值为NULL
    • 如果任何几何参数都不是语法上格式正确的几何,ER_GIS_INVALID_DATA则会发生错误。
    • 如果任何几何参数的SRID值都引用未定义的空间参考系统(SRS),ER_SRS_NOT_FOUND则会发生错误。
    • 如果任何SRID参数不在32位无符号整数的范围内,ER_DATA_OUT_OF_RANGE则会发生错误。
    • 如果任何SRID参数引用未定义的SRS,ER_SRS_NOT_FOUND则会发生错误。
    • 否则,返回值为non-NULL

    这些函数可用于获取几何属性:

    • ST_Dimension(g)

      返回几何值的固有尺寸g。维数可以为-1、0、1或2。这些值的含义在“几何类别”中给出。

      ST_Dimension()按照本节简介中所述处理其参数。

      mysql> SELECT ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)'));
      +------------------------------------------------------	+
      | ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)')) 	|
      +------------------------------------------------------	+
      |                                                    1 	|
      +------------------------------------------------------	+
      
    • ST_Envelope(g)

      返回几何值的最小边界矩形(MBR)g。返回的结果是Polygon由边界框的角点定义的值:

      POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
      
      mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)')));
      +----------------------------------------------------------------	+
      | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)'))) 	|
      +----------------------------------------------------------------	+
      | POLYGON((1 1,2 1,2 2,1 2,1 1))                                 	|
      +----------------------------------------------------------------	+
      

      如果参数是点或垂直或水平线段,ST_Envelope()则将点或线段作为其MBR返回,而不是返回无效的多边形:

      mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)')));
      +----------------------------------------------------------------	+
      | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)'))) 	|
      +----------------------------------------------------------------	+
      | LINESTRING(1 1,1 2)                                            	|
      +----------------------------------------------------------------	+
      

      ST_Envelope()如本节简介中所述处理其参数,但有以下例外:

      • 如果几何图形具有用于地理空间参考系统(SRS)的SRID值,ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS则会发生错误。
    • ST_GeometryType(g)

      返回一个二进制字符串,该字符串指示几何实例所属的几何类型的名称g。该名称对应于可实例化子Geometry类之一。

      ST_GeometryType()按照本节简介中所述处理其参数。

      mysql> SELECT ST_GeometryType(ST_GeomFromText('POINT(1 1)'));
      +------------------------------------------------	+
      | ST_GeometryType(ST_GeomFromText('POINT(1 1)')) 	|
      +------------------------------------------------	+
      | POINT                                          	|
      +------------------------------------------------	+
      
    • ST_IsEmpty(g)

      此函数是一个占位符,它为空的几何集合值返回1,否则返回0。

      唯一有效的空几何以空几何集合值的形式表示。MySQL不支持GIS EMPTY值,例如POINT EMPTY

      ST_IsEmpty()按照本节简介中所述处理其参数。

    • ST_IsSimple(g)

      如果几何值g根据ISO SQL / MM第3部分:空间标准简单,则返回1 。ST_IsSimple()如果参数不简单,则返回0。

      “ OpenGIS几何模型”中给出的可实例化几何类的描述包括导致类实例被分类为非简单类的特定条件。

      ST_IsSimple()如本节简介中所述处理其参数,但有以下例外:

      • 如果几何图形的经度或纬度超出范围,则将发生错误:

        • 如果任何经度参数不在范围内(-180,180],ER_LONGITUDE_OUT_OF_RANGE则会发生错误。
        • 如果任何纬度参数不在[-90,90]范围内,ER_LATITUDE_OUT_OF_RANGE则会发生错误。

        显示的范围以度为单位。精确的范围限制由于浮点运算而略有不同。

    • ST_SRID(g[,srid])

      使用一个表示有效几何对象的单个参数gST_SRID()返回一个整数,该整数指示与关联的空间参考系统(SRS)的ID g

      使用可选的第二个参数表示有效的SRID值,ST_SRID()返回与第一个参数具有相同类型且对象的SRID值等于第二个参数的对象。这仅设置对象的SRID值。它不执行任何坐标值转换。

      ST_SRID()如本节简介中所述处理其参数,但有以下例外:

      • 对于单参数语法,ST_SRID()即使它引用了未定义的SRS ,也将返回几何SRID。一个ER_SRS_NOT_FOUND不会发生错误。

      ST_SRID(g,target_srid)并区别如下:ST_Transform(g,target_srid)

      • ST_SRID()更改几何SRID值而不更改其坐标。
      • ST_Transform()除了更改其SRID值之外,还变换几何坐标。
      mysql> SET @g = ST_GeomFromText('LineString(1 1,2 2)', 0);
      mysql> SELECT ST_SRID(@g);
      +-------------	+
      | ST_SRID(@g) 	|
      +-------------	+
      |           0 	|
      +-------------	+
      mysql> SET @g = ST_SRID(@g, 4326);
      mysql> SELECT ST_SRID(@g);
      +-------------	+
      | ST_SRID(@g) 	|
      +-------------	+
      |        4326 	|
      +-------------	+
      

      通过传递给ST_SRID()特定于MySQL的用于创建空间值的特定函数之一的结果以及SRID值,可以在特定SRID中创建几何。例如:

      SET @g1 = ST_SRID(Point(1, 1), 4326);
      

      但是,该方法在SRID 0中创建几何,然后将其强制转换为SRID 4326(WGS 84)。一个较好的替代方法是使用正确的空间参照系创建几何。例如:

      SET @g1 = ST_PointFromText('POINT(1 1)', 4326);
      SET @g1 = ST_GeomFromText('POINT(1 1)', 4326);
      

      包含两个参数的形式ST_SRID()对于诸如校正或更改具有错误SRID的几何的SRS之类的任务很有用。