以较小的代价检测两个几何彼此之间的距离是否在指定范围内。
geometry-expression.ST_WithinDistanceFilter(geo2,distance[, unit-name])
名称 | 类型 | 说明 |
---|---|---|
geo2 |
ST_Geometry |
要测量与 geometry-expression 的距离的另一个几何值。 |
distance |
DOUBLE |
两个几何应处于其范围内的距离。 |
unit-name |
VARCHAR(128) |
解释 distance 参数时应使用的单位。缺省值为空间参照系的单位。单位名称必须与 ST_UNITS_OF_MEASURE 视图中 UNIT_TYPE 为 'LINEAR' 的行的 UNIT_NAME 列匹配。 |
BIT 如果 geometry-expression 和 geo2 间的距离可能在指定范围内,则返回 1,否则返回 0。
可使用 ST_WithinDistanceFilter 方法进行有效测试,以确定两个几何彼此之间的距离是否在指定范围内(确定方式与 ST_WithinDistance 方法相同)。如果 geometry-expression 与 geo2 之间的距离在给定范围内,则返回 1,否则返回 0。
与 ST_WithinDistance 相比,此测试成本较低,但可能在两个几何之间的最小距离实际上大于指定距离的情况下返回 1。因此,在通过进一步处理来确定几何间的真正距离时,可将此方法用作初步过滤器。
ST_WithinDistanceFilter 的实现依赖于与存储的几何相关联的元数据。由于可用元数据可能因服务器版本而发生变化(取决于数据的装载方式),或者因 ST_WithinDistanceFilter 在查询中的使用位置而发生变化,所以表达式 geometry-expression.ST_WithinDistanceFilter(geo2, distance [, unit_name ]) 可以在 geometry-expression 与 geo2 之间的距离不在指定范围内时返回不同的结果。但只要 geometry-expression 与 geo2 之间的距离在指定范围内,ST_WithinDistanceFilter 就始终返回 1。
缺省情况下,ST_WithinDistanceFilter 使用几何的原始格式(如果可用)。否则使用内部格式。有关内部和原始格式的详细信息,请参见STORAGE FORMAT 子句,CREATE SPATIAL REFERENCE SYSTEM 语句。
SQL/MM (ISO/IEC 13249-3: 2006) 服务商扩充
以下示例返回一个排序结果集,其中每行对应于一个与点 (2,3) 的距离在 1.4 之内的 shape。此结果包含实际上不在指定距离范围内的 shape。
SELECT ShapeID, ROUND( Shape.ST_Distance( NEW ST_Point( 2, 3 ) ), 2 ) AS dist FROM SpatialShapes WHERE ShapeID < 17 AND Shape.ST_WithinDistanceFilter( NEW ST_Point( 2, 3 ), 1.4 ) = 1 ORDER BY dist |
该示例返回以下结果集:
ShapeID | dist |
---|---|
2 |
0.0 |
3 |
0.0 |
5 |
1.0 |
6 |
1.21 |
16 |
1.41 |
以下示例创建分别表示加拿大诺瓦斯克提亚省哈利法克斯市和安大略省滑铁卢市的两个点,然后使用 ST_WithinDistanceFilter 证明这两个点之间的距离可能在 850 英里内,而一定不在 750 英里内。该示例假设已通过 sa_install_feature 系统过程安装了 st_geometry_predefined_uom 功能。请参见sa_install_feature 系统过程。
SELECT NEW ST_Point( -63.573566, 44.646244, 4326 ) .ST_WithinDistanceFilter( NEW ST_Point( -80.522372, 43.465187, 4326 ) , 850, 'Statute mile' ) within850, NEW ST_Point( -63.573566, 44.646244, 4326 ) .ST_WithinDistanceFilter( NEW ST_Point( -80.522372, 43.465187, 4326 ) , 750, 'Statute mile' ) within750 |
该示例返回以下结果集:
within850 | within750 |
---|---|
1 |
0 |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |