【问题标题】:firebase search and create listfirebase 搜索和创建列表
【发布时间】:2021-07-30 13:01:24
【问题描述】:

请帮我写这个函数 我有这个列表,其中列出了每个驱动程序 1 当前纬度经度 2 值班与否 3 车型 4 司机详情

每当用户启动搜索 函数搜索 1 个车辆类型用户已选择 2 如果司机值班 3 AND 如果司机在 10 公里半径内(使用纬度和经度)

并将所有符合条件的驱动程序复制到 -> availableDriverList

距离计算代码

function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
  var R = 6371; // Radius of the earth in km
  var dLat = deg2rad(lat2-lat1);  // deg2rad below
  var dLon = deg2rad(lon2-lon1); 
  var a = 
    Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
    Math.sin(dLon/2) * Math.sin(dLon/2)
    ; 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var d = R * c; // Distance in km
  return d;
}

function deg2rad(deg) {
  return deg * (Math.PI/180)
}

【问题讨论】:

  • Firebase 实时数据库和 Cloud Firestore 是两个独立的数据库。请仅使用相关标签标记您的问题,不要同时使用两者。
  • 是的,它有帮助,知道 fb rt db 的局限性有帮助,我的应用程序需要一些额外的搜索和过滤,任何方法都可以通过一些调整得到它
  • 完美。我也刚刚将此链接添加到我的答案中,上周我不知何故忘记了:youtube.com/watch?v=mx1mMdHBi5Q

标签: firebase google-cloud-firestore


【解决方案1】:

搜索点周围的半径需要您对每个文档的经度和纬度进行范围比较。在 Firestore 查询中,您只能对单个字段执行范围比较,因此您当前的数据结构无法执行您想要的查询。

有一种方法可以将经度和纬度编码为可用于此类比较的单个值,称为 Geohash。如果您将 Geohash 添加到每个文档,则可以执行查询。要了解如何执行此操作,请查看 performing Geoqueries 上的 Firestore 文档。

我也推荐阅读:Query for nearby locations。而对于不同的数据库,限制和解决方案是相同的。如果你有时间,我还建议你看看我几年前关于how to add geoqueries to Firestore 的演讲。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2019-08-08
    • 2015-01-10
    • 2017-02-20
    • 2012-05-20
    相关资源
    最近更新 更多