Java 谷歌云数据存储上的地理空间查询

Java 谷歌云数据存储上的地理空间查询,java,google-cloud-datastore,geospatial,objectify,Java,Google Cloud Datastore,Geospatial,Objectify,谷歌云数据存储的文档详细说明了地理点数据类型[1]。虽然Java库中没有严格对应的类,但有一个LatLngclass[2]似乎是规范等价物 虽然我可以很好地存储值,但我可以通过提供一个完整构造的LatLng实例来查询精确位置,如下所示: ofy.load().type(Site.class) // Site is a custom class, whose latLng field is a LatLng-type .filter("latLng", LatLng.of(26.3

谷歌云数据存储的文档详细说明了地理点数据类型[1]。虽然Java库中没有严格对应的类,但有一个
LatLng
class[2]似乎是规范等价物

虽然我可以很好地存储值,但我可以通过提供一个完整构造的
LatLng
实例来查询精确位置,如下所示:

ofy.load().type(Site.class) // Site is a custom class, whose latLng field is a LatLng-type
        .filter("latLng", LatLng.of(26.329,127.744))
        .first()
        .now()
我似乎无法在本机上执行不精确的查询,至少在控制台上不行。虽然我可以在Objectify中做一些类似的事情:

ofy.load().type(Site.class)
        .filter("latLng >", LatLng.of(26.0,127.0))
        .filter("latLng <", LatLng.of(90,127.750))
        .first()
        .now()
y.load()类型(Site.class)的

.filter(“latLng>”,latLng.of(26.0127.0))

.filter(“latLng根据下面的文档,GQL有两种风格。Python NDB/DB中使用的风格有GEOPT函数来执行空间查询。但是控制台中使用的风格没有这个和其他一些功能

上述参考资料的准确陈述


Python GQL支持函数DATETIME、DATE、TIME、KEY、USER和GEOPT。云数据存储GQL支持函数DATETIME和KEY,但参数不同。云数据存储GQL支持函数BLOB。云数据存储GQL不支持GEOPT。“

所以看起来数据存储实际上是以本机方式处理
LatLng
类型,允许您对其进行不精确查询。不精确查询的所有限制都适用(只能有一个不精确查询的属性,必须对其进行索引等),以及该类型的索引大小(16字节)建议一对
double
s的内部表示,实验似乎表明该查询首先过滤纬度,然后过滤经度

但是,当前处理不正确,边界框查询(如开始问题中的查询)也返回仅满足一个约束的点(在我的示例中,某些点的纬度满足约束,但不满足经度)


我已经通过问题跟踪器向谷歌报告了这个问题,他们已经在内部复制了这个问题,并将其转发给数据存储团队进行解决。我会在收到他们的回复后更新这个答案。

你能分享这个问题链接吗?问题解决了吗?@Tom,问题是:他们最终决定它按预期工作,不过。。。