【问题标题】:Finding nearby latlng using firebase使用firebase查找附近的latlng
【发布时间】:2016-03-26 05:40:18
【问题描述】:
-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.

【问题讨论】:

    标签: firebase firebase-realtime-database


    【解决方案1】:

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

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

    请参阅Github repo for Geofire 了解更多信息。

    【讨论】:

    • @Frank 这似乎比我自己的答案更好。我应该删除我的,还是您认为在某些情况下它可能仍然有用?
    • 我觉得你的也很有趣,所以请离开。有更好/更简单的答案这一事实并不会使您的答案无效。 OP 可能会通过投票来承认这一点(当前的投票是我的)。
    【解决方案2】:

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

    {x: 2, y: 4}

    然后,您可以返回该区域和相邻区域的所有位置,方法是返回特定范围内可以在数据调用中调整的所有内容。例如,如果您想返回 {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}
    

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

    【讨论】:

      猜你喜欢
      • 2019-11-28
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2022-10-08
      相关资源
      最近更新 更多