在mysql中,我使用hasrsine公式来查询附近的对象.
使用这个公式
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance
FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
Run Code Online (Sandbox Code Playgroud)
哪一个
在Firebase中,我可以像在mysql中一样存储用户吗?创建标记表.id,lat,lng列然后使用公式进行查询
更新
我应该问一下,在firebase中使用这个公式查询附近的方法是什么.
简短的回答,不像你想要的那样.
Firebase本质上有两种查询数据的方法:按路径和优先级.这比SQL更有限,并且有一个很好的理由 - 我们的API经过精心设计,只允许我们可以保证快速运行.Firebase是一个实时且可扩展的后端,我们希望您能够构建出色的应用程序,可以为数百万用户提供服务,而不会影响响应速度.
看看什么是firebase和deNormalizing数据 另外,这个SO问题是类似的.
对评论的回复:Firebase不会sin( radians(X) )
为您计算.这是一个"缓慢"的操作.因此,您需要在保存时将该信息存储到数据中.我不是100%肯定,但你可以存储标记,并且还将经度/纬度存储在单独的父级中.
Root
-> Markers
-> longitude (Use the value as priority) -> MarkerId
-> latitude (Use the value as priority) -> MarkerId
Run Code Online (Sandbox Code Playgroud)
然后你应该能够使用边界来找到最大和最小经度和纬度.用它来按优先级查询经度和纬度路径.如果两者都存在MarkerId,则使用它.
一篇快速的研究发现了这篇关于纬度经度边界坐标的文章