Typescript 比较两个精度不同的数字
我正在使用firebase,我想检索具有特定地址坐标的用户 为此,我使用这种方法Typescript 比较两个精度不同的数字,typescript,firebase,google-cloud-firestore,Typescript,Firebase,Google Cloud Firestore,我正在使用firebase,我想检索具有特定地址坐标的用户 为此,我使用这种方法 showPopUpInfo(longitude:any, latitude:any){ return this.afs.collection('Utilizador',ref=>ref.where('morada.Coordenadas.latitude', '==', latitude).where('morada.Coordenadas.longitude', '==' , longitude)
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”文档:
查询的输出为:
我认为找不到用户是因为,尽管纬度和经度的值相同,但纬度和经度的精度不同,但我不知道如何解决这个问题。实际上,文档的纬度和经度值存储为字符串,如此屏幕截图所示。你可以说,因为他们周围有引号。如果将鼠标悬停在该字段上,您还会看到右侧的“(字符串)”
如果您在查询中使用数值,则查询将永远不会匹配此文档,因为FielBASE不认为任何数字等于任何字符串。
如果您的查询实际上使用的是完全相同的字符串,那么您将找到一个匹配项。但通常不建议将数字存储为字符串,因为字符串排序与数字排序不同,因此您将无法对这些数字值正确执行范围查询一点建议-不要在函数中使用TypeScript类型
any
。要具体,并根据查询要求仅接受字符串
或数字
。如果传递的内容类型错误,这将有助于在代码中引发错误。实际上,文档的纬度和经度值存储为字符串,如此屏幕截图所示。你可以说,因为他们周围有引号。如果将鼠标悬停在该字段上,您还会看到右侧的“(字符串)”
如果您在查询中使用数值,则查询将永远不会匹配此文档,因为FielBASE不认为任何数字等于任何字符串。
如果您的查询实际上使用的是完全相同的字符串,那么您将找到一个匹配项。但通常不建议将数字存储为字符串,因为字符串排序与数字排序不同,因此您将无法对这些数字值正确执行范围查询一点建议-不要在函数中使用TypeScript类型
any
。要具体,并根据查询要求仅接受字符串
或数字
。如果传递错误类型的内容,这将有助于在代码中引发错误。在特定位置查找对象的更典型方法是使用基于范围的地理查询。在足够小的范围内,您可以精确地获得所需的结果。不幸的是,目前Firestore中没有内置这样的地理查询
由于Firestore can查询只能在单个字段上包含范围过滤器,所以不能直接使用该字段进行经度和纬度查询。相反,大多数开发人员使用的解决方案是建立在这个基础之上的,基于。地理哈希将纬度和经度组合成一个单一(字母数字)值,可以根据范围进行过滤
要了解有关在Firestore上运行地理查询的更多信息,我建议观看。当然,也可以看看Firestore上地理查询主题涉及的其他问题:
- 再来一些
- 再来一些