地理围栏:使用 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 空间查找多边形内的要素数量(点/线/多边形)的主要内容,如果未能解决你的问题,请参考以下文章