空间运算符功能
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)