OpenGIS 提出了许多可以生成几何图形的函数。它们旨在实现空间运算符。
这些函数支持所有参数类型组合,但根据Open Geospatial Consortium规范 不适用的除外 。
此外,第 12.17.7 节“几何属性函数”讨论了几个从现有几何构造新几何的函数。有关这些功能的说明,请参阅该部分:
这些空间运算符函数可用:
Buffer(
g
,d
[,strategy1
[,strategy2
[,strategy3
]]])ST_Buffer()
并且Buffer()
是同义词。有关详细信息,请参阅 的说明ST_Buffer()
。Buffer()
已弃用;希望在未来的 MySQL 版本中将其删除。改用ST_Buffer()
。ST_ConvexHull()
并且ConvexHull()
是同义词。有关详细信息,请参阅 的说明ST_ConvexHull()
。ConvexHull()
已弃用;希望在未来的 MySQL 版本中将其删除。改用ST_ConvexHull()
。ST_Buffer(
g
,d
[,strategy1
[,strategy2
[,strategy3
]]])返回一个几何,该几何表示与几何值的距离
g
小于或等于 的距离的所有点d
,或者NULL
如果任何参数为NULL
。geometry 参数的 SRID 必须为 0,因为ST_Buffer()
仅支持笛卡尔坐标系。如果任何几何参数不是语法上格式正确的几何,ER_GIS_INVALID_DATA
则会发生错误。如果几何参数为空,则
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
值的几何集合。结果可能是一个空几何体。对于、 、和值 的负距离,以及不包含任何或值的几何集合,会发生ER_WRONG_ARGUMENTS
错误 。ST_Buffer()
Point
MultiPoint
LineString
MultiLineString
Polygon
MultiPolygon
ST_Buffer()
在距离参数之后最多允许三个可选的策略参数。策略影响缓冲区计算。这些参数是由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)
.
每种类型最多可以指定一个策略,并且它们可以以任何顺序给出。如果指定了给定类型的多个策略,
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()
并且Buffer()
是同义词。ST_Buffer_Strategy(
strategy
[,points_per_circle
])此函数返回一个策略字节字符串,用于
ST_Buffer()
影响缓冲区计算。如果任何参数是NULL
,则返回值为NULL
。如果任何参数无效,ER_WRONG_ARGUMENTS
则会发生错误。有关策略的信息可在 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
系统变量的值。如果第一个参数是'point_square'
or'end_flat'
,则points_per_circle
不能给出该参数 ,否则会ER_WRONG_ARGUMENTS
发生错误。有关示例,请参阅 的说明
ST_Buffer()
。返回表示几何值的凸包的几何图形
g
。如果参数是NULL
,则返回值为NULL
。此函数通过首先检查几何的顶点是否共线来计算几何的凸包。如果是,该函数返回线性外壳,否则返回多边形外壳。此函数通过提取集合所有组件的所有顶点、
MultiPoint
从中创建值并计算其凸包来处理几何集合。如果参数是一个空的几何集合,则返回值为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_ConvexHull()
并且ConvexHull()
是同义词。返回表示几何值
g1
和 的点集差的几何g2
。如果任何参数是NULL
,则返回值为NULL
。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) | +------------------------------------+
返回表示几何值
g1
和 的点集交集的几何g2
。如果任何参数是NULL
,则返回值为NULL
。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) | +--------------------------------------+
返回表示几何值
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))
如果任何参数是
NULL
,则返回值为NULL
。mysql> SET @g1 = ST_GeomFromText('MULTIPOINT(5 0,15 10,15 25)'); mysql> SET @g2 = ST_GeomFromText('MULTIPOINT(1 1,15 10,15 25)'); mysql> SELECT ST_AsText(ST_SymDifference(@g1, @g2)); +---------------------------------------+ | ST_AsText(ST_SymDifference(@g1, @g2)) | +---------------------------------------+ | MULTIPOINT((1 1),(5 0)) | +---------------------------------------+
返回表示几何值
g1
和 的点集并集的几何g2
。如果任何参数是NULL
,则返回值为NULL
。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)) | +--------------------------------------+