首页 > 解决方案 > Firestore 双字段查询请求(和 GeoPoint)

问题描述

我有一个包含两个字段的文档集合:位置(Geopoint)和距离(数字)。用户输入是另一个位置(Geopoint)。

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

教程展示了如何执行附近的位置查询,但是如果距离不是由用户给出但对于每个文档都不同,我该如何在方程中插入距离?

标签: firebasegoogle-cloud-firestore

解决方案


我想出了一个解决方案。

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

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

概括起来,这种方法可以很容易地应用于任何多边形:

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

推荐阅读