• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 空间运算符功能

    OpenGIS提出了许多可以产生几何形状的功能。它们旨在实现空间算子。

    这些函数支持所有参数类型组合,但根据Open Geospatial Consortium规范不适用的除外。

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

    • 如果有任何参数NULL,则返回值为NULL
    • 如果任何几何参数都不是语法上格式正确的几何,ER_GIS_INVALID_DATA则会发生错误。
    • 如果任何几何参数的SRID值都引用未定义的空间参考系统(SRS),ER_SRS_NOT_FOUND则会发生错误。
    • 对于带有多个几何参数的函数,如果这些参数不具有相同的SRID,ER_GIS_DIFFERENT_SRIDS则会发生错误。
    • 如果任何几何参数都具有地理SRS的SRID值,ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS则会发生错误。
    • 否则,返回值为non-NULL

    这些空间运算符功能可用:

    • ST_Buffer(g,d[,strategy1[,strategy2[,strategy3]]])

      返回一个几何图形,该几何图形表示与几何值的距离g小于或等于的所有点d

      如果geometry参数为空,则ST_Buffer()返回一个空的几何。

      如果距离为0,则ST_Buffer()返回几何参数不变:

      mysql> SET @pt = ST_GeomFromText('POINT(0 0)');
      mysql> SELECT ST_AsText(ST_Buffer(@pt, 0));
      +------------------------------	+
      | ST_AsText(ST_Buffer(@pt, 0)) 	|
      +------------------------------	+
      | POINT(0 0)                   	|
      +------------------------------	+
      

      ST_Buffer()PolygonMultiPolygon值以及包含PolygonMultiPolygon值的几何图形集合支持负距离。结果可能是空的几何。

      ST_Buffer()在distance参数之后最多允许三个可选的策略参数。策略影响缓冲区的计算。这些参数是ST_Buffer_Strategy()函数产生的字节字符串值,用于点,联接和结束策略:

      • 点策略适用于PointMultiPoint几何。如果未指定任何策略,则默认值为ST_Buffer_Strategy('point_circle', 32)
      • 加入策略适用于LineStringMultiLineStringPolygon,和MultiPolygon几何形状。如果未指定连接策略,则默认值为ST_Buffer_Strategy('join_round', 32)
      • 最终策略适用于LineStringMultiLineString几何。如果未指定最终策略,则默认值为ST_Buffer_Strategy('end_round', 32)

      每种类型最多可以指定一种策略,并且可以以任何顺序给出它们。

      ST_Buffer()如本节简介中所述处理其参数,但以下情况除外:

      • 用于为负的距离PointMultiPointLineString,和MultiLineString的值,而对于不包含任何几何形状的集合PolygonMultiPolygon值时,ER_WRONG_ARGUMENTS会出现误差。
      • 如果指定了给定类型的多个策略,ER_WRONG_ARGUMENTS则会发生错误。
      mysql> SET @pt = ST_GeomFromText('POINT(0 0)');
      mysql> SET @pt_strategy = ST_Buffer_Strategy('point_square');
      mysql> SELECT ST_AsText(ST_Buffer(@pt, 2, @pt_strategy));
      +--------------------------------------------	+
      | ST_AsText(ST_Buffer(@pt, 2, @pt_strategy)) 	|
      +--------------------------------------------	+
      | POLYGON((	-2 	-2,2 	-2,2 2,	-2 2,	-2 	-2))       	|
      +--------------------------------------------	+
      
      mysql> SET @ls = ST_GeomFromText('LINESTRING(0 0,0 5,5 5)');
      mysql> SET @end_strategy = ST_Buffer_Strategy('end_flat');
      mysql> SET @join_strategy = ST_Buffer_Strategy('join_round', 10);
      mysql> SELECT ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))
      +---------------------------------------------------------------	+
      | ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))   	|
      +---------------------------------------------------------------	+
      | POLYGON((5 5,5 10,0 10,	-3.5355339059327373 8.535533905932738, 	|
      | 	-5 5,	-5 0,0 0,5 0,5 5))                                       	|
      +---------------------------------------------------------------	+
      
    • ST_Buffer_Strategy(strategy[,points_per_circle])

      此函数返回一个策略字节字符串,用于ST_Buffer()影响缓冲区计算。

      有关策略的信息可从 Boost.org获得。

      第一个参数必须是指示策略选项的字符串:

      • 对于点策略,允许的值为'point_circle''point_square'
      • 对于联接策略,允许的值为'join_round''join_miter'
      • 对于最终策略,允许的值为'end_round''end_flat'

      如果第一个参数是'point_circle''join_round''join_miter',或'end_round',该points_per_circle参数必须被给定为正的数值。最大值points_per_circlemax_points_in_geometry系统变量的值。

      有关示例,请参见的说明ST_Buffer()

      ST_Buffer_Strategy()如本节简介中所述处理其参数,但以下情况除外:

      • 如果任何参数无效,ER_WRONG_ARGUMENTS则会发生错误。
      • 如果第一个参数是'point_square''end_flat',则points_per_circle不能给出该参数,否则会ER_WRONG_ARGUMENTS发生错误。
    • ST_ConvexHull(g)

      返回表示几何值的凸包的几何g

      该函数通过首先检查几何体的顶点是否共线来计算几何体的凸包。如果是这样,函数将返回线性外壳,否则返回多边形外壳。此函数通过提取集合所有组件的所有顶点,MultiPoint从它们中创建一个值并计算其凸包来处理几何集合。

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

      • NULL对于该参数是空几何集合的附加条件,返回值。
      mysql> SET @g = 'MULTIPOINT(5 0,25 0,15 10,15 25)';
      mysql> SELECT ST_AsText(ST_ConvexHull(ST_GeomFromText(@g)));
      +-----------------------------------------------	+
      | ST_AsText(ST_ConvexHull(ST_GeomFromText(@g))) 	|
      +-----------------------------------------------	+
      | POLYGON((5 0,25 0,15 25,5 0))                 	|
      +-----------------------------------------------	+
      
    • ST_Difference(g1,g2)

      返回表示几何值g1和的点集差异的几何g2

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

      mysql> SET @g1 = Point(1,1), @g2 = Point(2,2);
      mysql> SELECT ST_AsText(ST_Difference(@g1, @g2));
      +------------------------------------	+
      | ST_AsText(ST_Difference(@g1, @g2)) 	|
      +------------------------------------	+
      | POINT(1 1)                         	|
      +------------------------------------	+
      
    • ST_Intersection(g1,g2)

      返回表示几何值g1与的点集交集的几何g2

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

      mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');
      mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');
      mysql> SELECT ST_AsText(ST_Intersection(@g1, @g2));
      +--------------------------------------	+
      | ST_AsText(ST_Intersection(@g1, @g2)) 	|
      +--------------------------------------	+
      | POINT(2 2)                           	|
      +--------------------------------------	+
      
    • ST_SymDifference(g1,g2)

      返回表示几何值g1和的点集对称差异的几何g2,其定义为:

      g1 symdifference g2 := (g1 union g2) difference (g1 intersection g2)
      

      或者,在函数调用表示法中:

      ST_SymDifference(g1, g2) = ST_Difference(ST_Union(g1, g2), ST_Intersection(g1, g2))
      

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

      mysql> SET @g1 = Point(1,1), @g2 = Point(2,2);
      mysql> SELECT ST_AsText(ST_SymDifference(@g1, @g2));
      +---------------------------------------	+
      | ST_AsText(ST_SymDifference(@g1, @g2)) 	|
      +---------------------------------------	+
      | MULTIPOINT((1 1),(2 2))               	|
      +---------------------------------------	+
      
    • ST_Transform(g,target_srid)

      将几何图形从一个空间参考系统(SRS)转换为另一个。返回值是与输入几何类型相同的几何,所有坐标都转换为目标SRID ,target_srid。除非几何参数的SRID与目标SRID值相同,否则转换支持仅限于地理SRS,在这种情况下,返回值是任何有效SRS的输入几何。

      ST_Transform()如本节简介中所述处理其参数,但以下情况除外:

      • 具有地理SRS的SRID值的几何参数不会产生错误。
      • 如果几何或目标SRID自变量具有引用未定义空间参考系统(SRS)的SRID值,ER_SRS_NOT_FOUND则会发生错误。
      • 如果几何位于ST_Transform()无法转换的SRS中,ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED则会发生错误。
      • 如果目标SRID在ST_Transform()无法转换到的SRS中,ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED则会发生错误。
      • 如果几何图形位于不是WGS 84且没有TOWGS84子句的SRS中,ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84则会发生错误。
      • 如果目标SRID在不是WGS 84且没有TOWGS84子句的SRS中,ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84则会发生错误。

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

      • ST_SRID()更改几何SRID值而不更改其坐标。
      • ST_Transform()除了更改其SRID值之外,还变换几何坐标。
      mysql> SET @p = ST_GeomFromText('POINT(52.381389 13.064444)', 4326);
      mysql> SELECT ST_AsText(@p);
      +----------------------------	+
      | ST_AsText(@p)              	|
      +----------------------------	+
      | POINT(52.381389 13.064444) 	|
      +----------------------------	+
      mysql> SET @p = ST_Transform(@p, 4230);
      mysql> SELECT ST_AsText(@p);
      +---------------------------------------------	+
      | ST_AsText(@p)                               	|
      +---------------------------------------------	+
      | POINT(52.38208611407426 13.065520672345304) 	|
      +---------------------------------------------	+
      
    • ST_Union(g1,g2)

      返回表示几何值g1和的点集并集的几何g2

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

      mysql> SET @g1 = ST_GeomFromText('LineString(1 1, 3 3)');
      mysql> SET @g2 = ST_GeomFromText('LineString(1 3, 3 1)');
      mysql> SELECT ST_AsText(ST_Union(@g1, @g2));
      +--------------------------------------	+
      | ST_AsText(ST_Union(@g1, @g2))        	|
      +--------------------------------------	+
      | MULTILINESTRING((1 1,3 3),(1 3,3 1)) 	|
      +--------------------------------------	+
      

    另外,“几何特性函数”讨论了几个从现有几何构造新几何的函数。有关这些功能的说明,请参见该部分:

    • ST_Envelope(g)
    • ST_StartPoint(ls)
    • ST_EndPoint(ls)
    • ST_PointN(ls,N)
    • ST_ExteriorRing(poly)
    • ST_InteriorRingN(poly,N)
    • ST_GeometryN(gc,N)