仅点燃搜索边界框

时间:2018-09-04 10:05:56

标签: ignite jts

我尝试使用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

我做错了吗,有没有办法制作一个实际的多边形? 谢谢。

1 个答案:

答案 0 :(得分:0)

这是预期的行为:运算符Firestore.collection('posts').document(unique id).update()的意思恰好是&&。这是最通用的空间操作,可以使用空间索引。

在查询中您需要一个附加过滤器,如下所示:

bounding box intersection

geoCoordinates && ? AND my_custom_geo_filter(geoCoordinates, ?)函数中,您可以使用JTS库的所有功能。

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