我尝试使用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投影,但不应影响结果。
我做错了吗,有没有办法制作一个实际的多边形? 谢谢。
答案 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