Firestore双字段查询请求(以及GeoPoint)

时间:2020-04-10 13:48:33

标签: firebase google-cloud-firestore

我收集了两个字段的文档:位置(Geopoint)和距离(Number)。 用户输入的是另一个位置(Geopoint)。

我必须返回所有文档位置与输入位置之间的距离小于文档距离的文档。

tutorial显示了如何执行附近的位置查询,但是如果用户未给出距离但每个文档都不同,如何在距离中插入距离?

2 个答案:

答案 0 :(得分:3)

我想出了一个解决方案。

我可以存储外接正方形,而不是保存一个地理点和一个半径(表示一个圆),所以我将存储两个经度(geopoint经度+和-半径)和两个纬度(geopoint纬度+和-半径)。 然后,我可以进行4部分的复合查询,以查看用户地理位置是否在正方形中。

无论如何,这不是一个完美的解决方案,因为圆/平方近似值缺乏精确度,但是在我的特定情况下,这并不重要。因此,如果您的精度很重要,则可以保存半径(或从平方宽计算),然后对查询的对象进行过滤。

概括,该方法可以轻松地应用于任何多边形:

  1. 将多边形坐标和外接矩形保存在Firestore文档中。
  2. 使用四个矩形坐标在Firestore中查询文档
  3. 使用原始多边形过滤结果。

答案 1 :(得分:1)

您需要根据用户输入的位置以及要为其返回结果的最大距离来计算查询的边界框。使用地理哈希(如本教程所述)时,实际上需要计算四个边界框:在每个象限中,从用户输入的结果中心算起一个边界框。

如果您从未做过,那么自己做起来可能会有些困难,这可能就是教程作者不介绍它的原因。但是有多个Geo-libraries for Firestore为您执行此操作,强烈建议您将它们检出。

如果您想了解有关整个搜索过程如何工作的更多信息,我建议您查看一下我的演讲视频:Querying Firebase and Firestore based on geographic location or distance