如何在 AngularFire2 中按距当前位置最近的距离进行排序?

2023-12-10

我在用AngularFire2在 firebase 中查询的库。在我的火力基地中,我有data集合,其中有很多行latitude and longitude像下面这样:

- data
    - 1404033346513076_1998422263740845
        - location
           - latitude: 23.7907795
           - longitude: 90.403898
    - 1404033346513076_1998422263740888
        - location
           - latitude: 23.9907795
           - longitude: 91.403898

我有latitude and longitude我当前位置的数据,我有一个辅助函数,可以确定当前位置与 firebase 数据中的位置之间的距离(以米为单位)。假设,该函数如下所示:

calculateDistance(currentLoc, destLoc) {
  return routeDistance(currentLoc, destLoc); // It return in meters
}

现在,我需要一个查询,该查询将从 firebase 返回 10 行,这些行与当前位置的距离最远。

我知道,我可以在 firebase 中像下面这样查询:

  constructor(private firebaseDBProvider: AngularFireDatabase) {
  }

  getDatas(): any {
    return this.firebaseDBProvider.list('data', ref => ref.orderByChild("location").startAt(0).endAt(3));
  }

但是,它不会为我提供我想要的确切数据。

我注意到的另一件事是,当我运行下面的查询时,它返回前 10 行。

return this.firebaseDBProvider.list('data', ref => ref.limitToFirst(10));

但是,如果想执行以下查询,它会返回我0 rows.

this.firebaseDBProvider.list('data', ref => ref.startAt(0).endAt(10));

这是为什么?startAt and endAt应该与限制到第一个(10).

那么,查询应该是什么,以便我可以返回 10 行,这些行是最短距离从我当前的位置?


你的帖子里有两个问题。让我们尝试逐一回答。

Q1:“我需要一个查询,该查询将从 firebase 返回 10 行,这些行与当前 locationList 项的距离最远”

A1:正如您所知,您将无法让“Firebase 数据库查询引擎”触发您的calculateDistance()查询时的函数,即 Firebase 只能根据此处详述的方法进行排序https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data.

换句话说,您将必须循环遍历来自data可以执行您的函数的环境中的节点:在前端或可能在云函数中(例如通过 HTTPS 调用,作为 REST API)


Q2:“这是为什么?startAt 和 endAt 应该与 limitToFirst(10) 一样工作。”

A2:不,它们是不同的。

正如文档中所解释的,“startAt() 返回大于或等于指定值的项目键或值, 取决于所选的排序方法."

所以首先,你必须在这一行包含一个 order-by-method

this.firebaseDBProvider.list('data', ref => ref.startAt(0).endAt(10));

其次,根据 order-by 方法,此行不一定返回 10 条记录,而是返回 order-by 参数在 0 到 10 之间的所有记录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 AngularFire2 中按距当前位置最近的距离进行排序? 的相关文章

  • 如何找到在SQL Server中注册的程序集?

    我在 SQL Server 中注册了一个程序集 CREATE ASSEMBLY CLRFunctions AUTHORIZATION dbo FROM 0x4D5A90000300000 WITH PERMISSION SET SAFE 我
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • 什么是 Android DecorView?

    http developer android com reference android view Window html getDecorView http developer android com reference android
  • 如何修复 Mapbox GL 中的画布大小?

    我正在使用 Mapbox GL 显示地图并从其中心裁剪固定大小的图像 它非常适合我设计的特定分辨率 1920x1080 但是当我开始使页面响应时 地图样式width and height变化了 画布尺寸也开始变化了 因此 当我裁剪图像时 大
  • 亚马逊 CloudFront 延迟

    我正在为我正在开发的 Web 应用程序尝试使用 AWS S3 和 CloudFront 在应用程序中 我允许用户将文件上传到 S3 存储桶 使用 AWS SDK 并通过 CloudFront CDN 提供该文件 但问题是 即使文件已上传并在
  • 为什么在 data.frame 中预先指定类型会比较慢?

    我预先分配了一个大 data frame 以便稍后填写 我通常这样做NA是这样的 n lt 1e6 a lt data frame c1 1 n c2 NA c3 NA 我想知道如果我预先指定数据类型是否会让事情变得更快 所以我测试了 f1
  • 检查 FTP 文件夹是否存在任何与掩码匹配的文件的批处理文件

    我需要创建一个批处理文件来访问受保护的 FTP 站点 检查文件类型 txt 存在 如果存在则进行下一步 如果不存在则返回0并结束作业 我进行了广泛的搜索 但找不到任何解决方案 这不是一项简单的任务 特别是当您需要检查与掩码匹配的文件 而不是
  • 文件和目录条目 API 在 Chrome 中损坏?

    我正在尝试使用文件和目录条目 API 创建一个文件上传器工具 该工具允许我将文件和目录的任意组合放入浏览器窗口中 以供读取和上传 我完全意识到 可以通过使用文件输入元素来实现类似的功能webkitdirectory已启用 但我正在测试一个用
  • python:日志记录:我们可以向记录器添加多个过滤器吗?考虑哪一个

    我试图了解 Python 日志记录中的多个过滤器 一个在配置中定义 另一个在代码中定义 如何工作 我正在开发一个 Django 项目 下面是我在 settings py 中的记录器配置 我的目标是switch on and switch o
  • 错误“RESOURCE_EXHAUSTED”的原因是什么?

    我有一个 WordPress 博客 当我登录到仪表板时 顶部突出显示了以下异常 Ga Lib Api Request Exception There was an error while contacting Google API erro
  • 如何在 flutter 中获取应用内购买的唯一标识符,该标识符始终保持不变

    我正在使用在应用程序内购买 https pub dev packages in app purchase我的 Flutter 应用程序的包 我的应用程序中有一项非消耗性应用内购买 每个用户创建一个用户帐户 使用 Firebase 身份验证
  • 应用非限定名称查找而不是依赖于参数的名称查找

    考虑标准 sec 3 4 1 3 中的一个示例 typedef int f namespace N struct A friend void f A operator int void g A a int i f a f is the ty
  • 如何在Python中捕获打印机事件

    我想在打印机开始打印时捕获信号 如果你告诉我如何获取将要打印的文档的路径 那就太好了 pywin32print看起来很有用 但不知道怎么用 要获得新打印作业的通知 您可以使用FindFirstPrinterChangeNotificatio
  • ASP.NET API:尚未为此 DbContext 配置数据库提供程序

    我正在尝试从我的 Net Core API 项目连接到 MySql 数据库 这是我的上下文类 public class MyContext DbContext public MyContext public MyContext DbCont
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr
  • 在本地调试 Azure Functions

    我在 Net 标准 2 0 中有一个函数 FunctionName A Test public static async Task
  • Android:如何获取所有可用意图过滤器的列表?

    我搜索了 Android 文档 但由于某些疯狂的原因 我无法找到所有可用意图过滤器的列表 我正在寻找一个意图过滤器 它可以执行诸如通过广播接收器通知我特定活动 例如浏览器或电子邮件 已启动或位于前台之类的操作 有人能帮我吗 PackageE
  • MVC3 中定义路由的文件

    我有这个文件
  • NPM 如何处理版本冲突?

    由于 NPM 版本 3 节点模块和依赖项都安装在同一根级别 但是 如果我安装两个依赖于同一模块的两个不同版本的模块怎么办 例如 如果我安装异步npm i email protected cdn cgi l email protection
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然

随机推荐