空间运算符功能
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()为Polygon和MultiPolygon值以及包含Polygon或MultiPolygon值的几何图形集合支持负距离。结果可能是空的几何。ST_Buffer()在distance参数之后最多允许三个可选的策略参数。策略影响缓冲区的计算。这些参数是ST_Buffer_Strategy()函数产生的字节字符串值,用于点,联接和结束策略:- 点策略适用于
Point和MultiPoint几何。如果未指定任何策略,则默认值为ST_Buffer_Strategy('point_circle', 32)。 - 加入策略适用于
LineString,MultiLineString,Polygon,和MultiPolygon几何形状。如果未指定连接策略,则默认值为ST_Buffer_Strategy('join_round', 32)。 - 最终策略适用于
LineString和MultiLineString几何。如果未指定最终策略,则默认值为ST_Buffer_Strategy('end_round', 32)。
每种类型最多可以指定一种策略,并且可以以任何顺序给出它们。
ST_Buffer()如本节简介中所述处理其参数,但以下情况除外:- 用于为负的距离
Point,MultiPoint,LineString,和MultiLineString的值,而对于不包含任何几何形状的集合Polygon或MultiPolygon值时,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_circle是max_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)
