java对于解决方案的几何体类,Oracle的ANYINTERACT+TOUCH空间操作符的等价物是什么?
我正在用Java编写一个旧的Oracle PL/SQL过程,其中一个查询包含以下where子句:
WHERE SDO_RELATE(shape, v_retrv_geo,'MASK=ANYINTERACT+TOUCH') = 'TRUE'
shape
和v_retrv_geo
都是类型SDO_GEOMETRY
。具体地说shape
是由边界定义的区域v_retrv_geo
是从lat/lon对创建的点
Oracle's docs说ANYINTERACT
表示对象不相交(不相交定义为边界和内部不相交),而TOUCH
表示边界相交但内部不相交。我认为掩码的+TOUCH
部分是多余的,但是现有查询根据业务人员返回正确的结果
使用Java流的同一查询的我的版本如下所示:
.filter(area -> area.getShape().intersects(p) || area.getShape().touches(p))
其中p
和area.getShape()
的结果都是com.vividsolutions.jts.geom.Geometry
p
是表示v_retrv_geo
的点,area.getShape()
是从旧查询中使用的shape
列创建的Geometry
对象
Vividsolution's docs说intersects
表示两个几何体至少有一个公共点,touches
表示几何体至少有一个公共点,但它们的内部不相交
在某些情况下,Java版本在使用相同表中的数据时返回的区域比旧的PL/SQL版本多
共 (0) 个答案