地理围栏:使用 oracle 空间查找多边形内的要素数量(点/线/多边形)

Posted

技术标签:

【中文标题】地理围栏:使用 oracle 空间查找多边形内的要素数量(点/线/多边形)【英文标题】:Geo Fence: Find number of features (points/lines/polygons) inside a polygon using oracle spatial 【发布时间】:2011-01-06 05:11:21 【问题描述】:

如何编写 SQL 查询(使用 Oracle Spatial)来查找多边形(地理围栏)内可用要素的数量;

特征可以是点、线或多边形本身。

谢谢。

【问题讨论】:

【参考方案1】:

试试这个说法:

select count(*) from geometry_table t where SDO_RELATE(t.geom_column, geofence, 'mask=INSIDE') = 'TRUE'
/

SDO_RELATE的第一个参数必须是带空间索引的几何列。

【讨论】:

感谢蒂姆的回复。我下班了很长一段时间,无法回应您的回答。这完美执行。 您可以使用更简单的语法:SDO_INSIDE(t.geom_column, geofence) = 'TRUE'。效果完全一样,只是写起来更简单。【参考方案2】:

更新:完全无视这个建议,Albert Godfrind 说这是在重复内部已经在做的事情。所以效率低且慢:

要添加到 Tims 答案,出于性能原因,结合 SDO_FILTER 和 SDO_RELATE 是一种很好的做法。 SDO_FILTER 速度很快,但返回的几何图形太多,它会为您提供最小边界矩形 (MBR) 与栅栏几何图形相交的所有几何图形。 SDO_RELATE 准确但缓慢。 所以将两者结合起来:

select count(*) 
from geometry_table t 
where SDO_FILTER(t.geom_column, geofence) = 'TRUE' and SDO_RELATE(t.geom_column, geofence, 'mask=INSIDE') = 'TRUE' 

问候,克里斯

【讨论】:

抱歉,这是完全错误的。执行您的建议只会使查询运行速度变慢。 SDO_RELATE 运算符自动应用“主要过滤器”(即 SDO_FILTER 运算符的等效项)。 糟糕,我还不知道,一直都是这样吗?在这种情况下,我很抱歉,我会编辑我的评论,所以没有人使用我的低效查询。

以上是关于地理围栏:使用 oracle 空间查找多边形内的要素数量(点/线/多边形)的主要内容,如果未能解决你的问题,请参考以下文章

Android 地理围栏(多边形)

如何创建一个嵌入多边形以进行地理围栏的圆形地理围栏区域?

如何检查给定坐标是不是属于多边形? (离线地理围栏)

使用半径内的设备添加地理围栏时从未收到地理围栏停留事件

地理围栏精度

定义地理围栏并查看点是不是在其内部/外部的算法