Ignite 仅搜索边界框

Ignite only searches bounding box

我正在尝试使用 apache ignite 的几何搜索,应用几乎与 https://github.com/dmagda/geospatial/blob/master/src/main/java/org/geospatial/SpatialQueryExample.java

中给出的示例相同

然而,搜索看起来并没有考虑多边形,而是多边形的边界框。

我正在申请:

SqlQuery<Long, EndDevicePosition> query = new SqlQuery<>(EndDevicePosition.class, "devEUI=? and geoCoordinates && ?");
    query.setArgs(devEUI, "POLYGON(("+long1+" "+lat1+", "+long2+" "+lat2+", "+long3+" "+lat3+", "+long4+" "+lat4+", "+long1+" "+lat1+"))");

    Collection<Entry<Long, EndDevicePosition>> entries = endDevicePosition.query(query).getAll();

关于数据:

lat1    48.93677638153757
lat2    48.935514830810355
lat3    48.9355007350914
lat4    48.93569455087813
long1   2.242525877426105
long2   2.2392808748500586
long3   2.240080057302674
long4   2.241281512801883

虽然是WGS84投影,应该不会影响结果。

Visual example of results

我做错了吗?有什么办法可以得到实际的多边形吗? 谢谢

这是预期的行为:运算符 && 正好表示 bounding box intersection。这是最通用的空间操作,可以使用空间索引。

您需要在如下查询中添加一个过滤器:

geoCoordinates && ? AND my_custom_geo_filter(geoCoordinates, ?)

my_custom_geo_filter 函数中,您可以使用 JTS 库的所有功能。

默认情况下,Ignite 不会在 SQL 中定义任何与地理相关的函数,因此您必须使用 QuerySqlFunction[1] 注释手动完成。看 https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/annotations/QuerySqlFunction.html