使用firebase找到附近的latlng

时间:2016-02-23 17:51:04

标签: firebase firebase-realtime-database

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

firebase中有1000条这样的记录,我想找到最接近特定long / lat的唯一ID。我开始使用startAt()和endAt()但没有成功。我们如何实现条件子句和多个查询。查询我在寻找是

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

2 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:7)

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

{x: 2, y: 4}

enter image description here

然后,您可以返回区域和邻居区域中的所有位置,方法是返回可在数据调用中调整的特定范围内的所有内容。例如,如果您想要返回{x: 2, y: 4}的1个区域内的所有内容,则会返回:

{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}

enter image description here

这将返回您所在地区周围的方格以及该方格中的所有位置。如果您需要它是圆形的,那么您可以在前端修剪您的选择。这不是一个完美的解决方案,但它可能是一种方法来做我认为你想要完成的事情,这是回报较少的数据。