wl# 14126:椭球形ST_Buffer的点
ST_Buffer目前只支持笛卡尔空间参考系统(sss)中的计算。这个WL扩展了ST_Buffer,以检测它的参数在一个地理(椭球)SRS中,并计算椭球上的缓冲区。椭球型缓冲仅用于点。
预估SRSs和SRID 0中的缓冲区仍将返回与以前相同的结果。如果几何图形是一个点,并且SRID引用地理SRS,函数现在将返回一个值而不是引发错误。
函数ST_Buffer(geometry, distance[, strategy1[, strategy2[, strategy3]]])返回一个几何图形,它表示与几何图形任意点在指定距离内的所有点,使用指定的策略,如果没有指定策略,则使用默认策略。
一般要求
- f - 1
- 如果函数的任何参数为NULL,则函数必须返回NULL。
- f - 2
- 如果几何参数不是语法形式良好的几何,函数在求值时必须引发ER_GIS_INVALID_DATA。
- F-3
- 如果几何参数在未定义的SRS中是一个格式良好的几何,函数在求值时必须引发ER_SRS_NOT_FOUND。
笛卡儿的缓冲区
本节旨在描述笛卡尔sss中缓冲区的现有行为。它并不打算改变现有的行为。
- F-4a
- 如果几何参数在笛卡尔SRS中是一个结构良好但几何无效的几何,函数必须返回一个几何结果或引发一个错误。如果返回一个几何图形,则该值为未定义,即它可以是任何几何图形。返回值也可能在几何上无效。结果必须在与几何参数相同的SRS中。
- F-4b
- 如果几何参数是一个结构良好的几何,它是一个空几何集合(这是目前唯一支持的空几何),在笛卡尔SRS中,函数必须返回一个空几何集合。(注意:这是为了向后兼容而保留的非标准行为。SQL/MM指定返回值必须为NULL。)结果必须在与几何参数相同的SRS中。
- F-4c
- 如果几何参数在笛卡尔SRS中是一个格式良好、有效且非空的几何,则距离为正且缓冲策略有效(参见请求。F-4f),函数必须返回几何的笛卡尔缓冲区。距离参数必须在SRS距离单位中(如果SRID为0则不指定)。结果必须在与几何参数相同的SRS中。
- F-4d
- 如果几何参数在笛卡尔SRS中是一个形式良好、有效且非空的几何不包含任何点,线串,多点或多线串,距离为负且缓冲策略有效(参见req F-4f),函数必须返回几何图形的笛卡尔缓冲。结果必须在与几何参数相同的SRS中。其结果是一个缩小了指定距离的几何图形。如果几何图形减少到消失的程度,结果将变成一个空的几何图形集合。
- F-4e
- 如果几何参数在包含任何点、线串、多点或多线串的笛卡尔SRS中是一个格式良好、有效且非空的几何,且距离为负,则函数必须引发ER_WRONG_ARGUMENTS。
- F-4f
- 如果几何参数在笛卡尔SRS中是一个格式良好的几何,并且缓冲策略无效,函数在函数求值时必须引发ER_WRONG_ARGUMENTS。无效的缓冲区策略发生1)当两个或多个相同类型的策略(点,加入或结束)中指定调用ST_Buffer相同,2)时的值不是一个策略(例如,一个任意的二进制字符串或数字)作为战略传递参数,3)当一个策略是通过和几何不包含任何点或测点,或4)当结束或加入战略传递和几何不包含任何线、多边形,multilinestrings或多多边形。
地理缓冲区
- F-5a
- 如果几何参数是地理SRS中的一个格式良好的点,距离参数不为负且没有指定策略,则函数必须返回该SRS中的点的地理缓冲区。距离参数必须在SRS距离单位中(目前总是米)。结果必须在与几何参数相同的SRS中。
- F-5b
- 如果几何参数是地理SRS中的一个格式良好的点(点总是几何上有效的),并且距离为负值或任何策略(除了NULL,请参阅req。如果指定F-1),则函数在求值时必须引发ER_WRONG_ARGUMENTS。
- F-5c
- 如果几何参数是地理SRS中格式良好的非点几何,则函数在函数求值期间必须引发er_not_implemented_for_geography SRS。
- F-5d
- 如果几何参数是地理SRS中的几何,且经度值不在(-180,180)范围内(以度为单位——其他单位的其他限制),则函数必须引发er_geometry_param_longitude de_out_of_range。(*)
- F-5e
- 如果几何参数是地理SRS中的几何,并且纬度值不在范围[-90,90](以度为单位——其他单位的其他限制),则函数必须引发ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE。(*)
(*)由于浮点运算,精确的极限会有轻微偏差。
- 张
- 没有新的语法。
- 我2
- 接口SQL01的语义被改变了:如果几何图形是地理SRS中的一个点,ST_Buffer将返回一个多边形(或者如果距离为0则返回一个点)。其他计算将保持当前的状态。
- 我
- 没有新的错误。
- 我
- 没有新的警告。
ST_Buffer的旧实现依赖于过时的(仅限笛卡尔)旧几何数据类型。这个WL基于gis::Geometry类型层次结构从头重新实现了ST_Buffer。
Item_func_st_buffer
Item_func_st_buffer类实现了SQL级别的ST_Buffer函数。
SQL级函数接口在mysql-test/suite/gis/t/st_buffer.test中进行了MTR测试。
缓冲和gis地理信息系统::::缓冲区
gis::Buffer函数(sql/gis/buffer_functor.{h,cc})和gis::Buffer函数(sql/gis/ Buffer .{h,cc})实现了Boost Geometry缓冲函数的接口。函子可能抛出异常,而函数声明为nothrow,并将函子包装在try-catch中,并将异常转换为my_error调用。
该函数通过unittest/gunit/gis_buffer-t.cc中的测试进行单元测试。这些测试处理不影响SQL级接口的边界测试。
清理
旧的函数实现在sql/item_geofunc_buffer中。cc及相关文件已被此WL删除。