【发布时间】:2016-08-11 04:54:57
【问题描述】:
我在 ES 中有两个 geo_shapes。我需要弄清楚的是了解其中一个形状(绿色)是否包含或与另一个(红色)相交的最佳方法。 请看下面三种不同情况的直观表示:
案例 I:易于检测 - 使用绿色形状坐标进行 Geoshape 查询,“relation” = “within”
案例二:也不是问题 - 使用绿色形状坐标进行 Geoshape 查询,“relation” = “INTERSECTS”
案例 III:是一个真正的问题 - 使用绿色形状坐标我尝试使用“relation”=“INTERSECTS”进行 Geoshape 查询,结果返回红色形状......这是错误的 - 这个形状不相交彼此(我想是的)即使其中一方相互接触......
这里有什么方法可以避免误报结果吗?还有其他如何解决此任务的建议吗?
附:坐标是精确的(例如:13.335594692338)。没有额外的映射,比如 tree_levels 或precision...
【问题讨论】:
-
我不明白为什么案例 1 使用内部,当红色/绿色多边形彼此相邻(并接触边界的一侧)时。此外,根据定义,案例 3 相交。它们正在接触
-
案例 1 - 抱歉,我应该让红色变得有点透明......但它在绿色矩形内(绿色矩形与案例 2-3 相同......)关于交叉点 - 同意,但也不同意 - 交叉点是“交叉”......成为某物的边界并不意味着交叉它;)无论如何,一些解决方案将很好地定义交叉和接触)))
-
很遗憾,ES 不支持通过 'touch' 进行匹配。它只提供 intersect (根据定义,这意味着共享一个共同点,无论它是否交叉。您可能不同意这一点,但这是官方定义。)如果您想要一种解决方法,您可以从 elasticsearch 中获取结果,并且使用 JTS 库,它确实提供了一种触摸方法
-
这里引用我提到的JTS库:docs.geotools.org/stable/userguide/library/jts/…
-
@coffeeaddict 同意...必须先尝试使用 ES,如果运气不好,可能不得不使用外部工具)))谢谢你的帮助!
标签: elasticsearch elasticsearch-geo-shape