2

我想在App Engine上使用Datastore和Objectify存储位置(在Java中)构建后端应用程序。在objectify附近搜索

一个地方有经度和纬度坐标。现在我想查询“靠近”(方圆100公里)用户位置的地方。

在SQL中,我将计算SELECT语句中的距离。 但是像这样的东西是不可能在Datastore使用Objectify的权利?

从我在其他项目中看到

因此是制造类似的地理区右哈希和哈希作为字符串存储在一个列表,检查两个地理坐标具有相同的地理散列的aread ...

比如我发现这个项目称为java geo model但似乎这个项目不再维护和Im寻找的东西,可以在生产中使用,在真实世界中的应用

有谁知道这样的库或教程关于这个话题的网站?

回答

4

如前所述,最佳答案是使用Search API。然而,你可以在这里找到一个使用Objectify和地理杂志的例子:http://www.motomapia.com/

它使用javageomodel代码。由于geohashing的算法没有改变,所以我不会太在意代码老旧。然而,它本质上不会产生非常准确的结果 - 至少不会像使用搜索API那样准确。

地理索引不是一个简单的问题。在您的SELECT中计算距离不是一个可扩展的解决方案,即使在RDBMS中,除非您有专门的索引ala PostGIS。

1

Search API允许基于距离进行搜索。

+1

恩,好点!谢谢!但是有些观点并不清楚:我可以使用Search API查询Datastore吗?从我从文档中看到的搜索API与文档(com.google.appengine.api.search.Document,索引和字段) 一起工作所以我必须将我的数据从数据存储/对象化“镜像”到Search in API中的文档通过Search API搜索它? – sockeqwe

+1

_“因此,我必须将我的数据从数据存储/对象化”镜像“到Search API中的Documents,以使其可通过Search API进行搜索?”_正确。他们是独立的地方来存储数据,他们不直接相互沟通。您需要手动浏览您的数据存储并将数据添加到Search API调用“文档”的内容中。基本功能是[这里](https://developers.google.com/appengine/docs/java/search/) – user3058197

+1

您可以使用任务队列(和事务排队任务)来确保搜索系统中的数据保持一致与数据存储中的数据。 – stickfigure