使用 firebase 查找附近的 latlng

Finding nearby latlng using firebase

-uniqueid1
            latitude: 30.7188235
            longitude: 76.810132
-uniqueid2
            latitude: 30.7188235
            longitude: 76.810132

firebase 中有 1000 条这样的记录,我想找到最接近特定 long/lat 的 uniqueids。我开始使用 startAt() 和 endAt() 但没有 success.How 我们是否实施条件子句和多个 queries.The 查询我寻找是

SELECT uniqueids from table where (lon-specific_lon)^2+(lat-specific_lat)^2<CONSTANT.

我不相信有内置的方法可以做到这一点,但一种方法可能是创建一个正方形网格并将每个位置分配给一个区域 - 例如,区域

{x: 2, y: 4}

然后您可以 return 通过 return 可以在您的数据调用中调整的特定范围内的所有内容来 return 该区域和邻近区域的所有位置。例如,如果您想 return {x: 2, y: 4} 的 1 个区域内的所有内容,您将 return:

{x: 1, y: 3}
{x: 1, y: 4}
{x: 1, y: 5}
{x: 2, y: 3}
{x: 2, y: 4} // The region you're in right now
{x: 2, y: 5}
{x: 3, y: 3}
{x: 3, y: 4}
{x: 3, y: 5}

这将 return 围绕您所在区域的一个正方形以及该正方形中的所有位置。如果你需要它是圆形的,你可以在前端 trim 你的选择。这不是一个完美的解决方案,但它可能是一种完成我认为您正在尝试完成的事情的方法,即 return 更少的数据。

您正在寻找的是 Firebase Geofire 库的一部分。它使用 Geohashes 巧妙地解决了 Firebase 只能查询单个值的限制。

Geohashes 是一种将经度和纬度填充为适合范围查询的单个值的方法。

有关详细信息,请参阅 Github repo for Geofire