比较具有不同精度打字稿火力的两个数字

问题描述 投票:0回答:2

我正在使用Firebase,我想检索具有特定地址坐标的用户。

为此,我使用此方法

 showPopUpInfo(longitude:any, latitude:any){
    return this.afs.collection('Utilizador',ref=>ref.where('morada.Coordenadas.latitude', '==', latitude).where('morada.Coordenadas.longitude', '==' , longitude)).get()
}

变量纬度和经度的值是:

经度:-8.364

纬度:41.237

我的firebase“ Utilizador”文档:

enter image description here

查询的输出是:

enter image description here

我认为找不到用户是因为尽管纬度和经度的值相同,但是纬度和经度的精度不同,但是我不知道如何解决此问题

typescript firebase google-cloud-firestore
2个回答
1
投票

实际上,文档的纬度和经度值存储为字符串,如此屏幕截图所示。您可以说出来,因为它们周围都有引号。如果将鼠标悬停在该字段上,您还将在右侧看到“(字符串)”。

如果您在查询中使用数字值,则查询将从不与此文档匹配,因为Firebase认为任何数字都不等于任何字符串。

如果您的查询实际上使用的是完全相同的字符串,则会得出一个匹配项。但是通常不建议将数字存储为字符串,因为字符串的排序方式不同于数字,因此您将无法正确地对这些数字值执行范围查询。

一点建议-不要在函数中使用TypeScript类型any。具体而言,根据查询的要求仅接受stringnumber。如果您传递了错误的类型,这将有助于在代码中引发错误。


0
投票

在特定位置查找对象的最典型方法是使用基于范围的地理查询。在足够小的范围内,您可以准确地获得所需的结果。不幸的是,此类地理位置目前尚未内置到Firestore中。

而且,由于Firestore只能在单个字段上包含查询范围,因此您不能直接对其进行经度和纬度。相反,大多数开发人员使用基于Geohashes的解决方案。地理哈希将纬度和经度合并为一个(字母数字)值,可以在范围上对其进行过滤。

要了解有关在Firestore上运行地理位置查询的更多信息,建议您观看video of my talk on the topic。但绝对也可以查看涵盖Firestore上地理查询主题的其他问题:

© www.soinside.com 2019 - 2024. All rights reserved.