Ios 查找用户位置周围具有不同半径的点

Ios 查找用户位置周围具有不同半径的点,ios,firebase,firebase-realtime-database,gis,geofire,Ios,Firebase,Firebase Realtime Database,Gis,Geofire,我正在为我的一个项目使用Firebase,我想知道使用Geofire是否可以实现以下目标 我有一个半径可用的点列表(纬度、液化天然气、半径)。在所附图像中,蓝色圆由点及其半径创建 我想找到所有到达用户位置的圆圈(红色圆圈-只是一个点)。我想要达到的最终效果类似于看到你周围的所有wifi网络——其中一些可能有更强的信号 可以使用Geofire完成吗?如果是,我应该如何处理查询 Firebase无法处理这样的查询,因为orderBy中没有逻辑。我不确定geofire能否绕过这个限制(从我浏览过的文档

我正在为我的一个项目使用Firebase,我想知道使用Geofire是否可以实现以下目标

我有一个半径可用的点列表(纬度、液化天然气、半径)。在所附图像中,蓝色圆由点及其半径创建

我想找到所有到达用户位置的圆圈(红色圆圈-只是一个点)。我想要达到的最终效果类似于看到你周围的所有wifi网络——其中一些可能有更强的信号

可以使用Geofire完成吗?如果是,我应该如何处理查询


Firebase无法处理这样的查询,因为orderBy中没有逻辑。我不确定geofire能否绕过这个限制(从我浏览过的文档来看,它无法做到),因此我们必须想出另一种方法。如果你知道其中一个圆的最大尺寸,我们也许可以大致计算出要选择的圆

(旁注,我假设你只想要上半球的东西,如果你想同时处理这两个问题,会有更多的数学知识,但我不会在这里详述)

我将大致描述如何做到这一点,当你靠近两极时,纬度/经度是很棘手的,半径并不总是在赤道附近用一个圆平移1-1,因为它在更远的北方。在大多数情况下,这个想法是可行的,但确定最小/最大值的数学以及循环的最后一步都会发生变化

  • 基于红点和最大圆半径创建以下变量
    • 最小纬度:(红色圆圈纬度)-(最大圆圈半径)
    • 最大纬度:(红色圆圈纬度)+(最大圆圈半径)
    • 最小经度:(红色圆圈经度)-(最大圆圈半径)
    • 最大经度:(红色圆圈经度)+(最大圆圈半径)
  • 您必须更新您的数据库,以获得一个索引,该索引可以搜索包含纬度和经度的每个蓝色圆圈,并具有一定的十进制精度。
    • 有点像经纬度
  • 执行如下查询:
    orderByChild(“\u latitude\u latitude”).startAt(minLatitude+'\u'+minLatitude).endAt(maxLatitude+'\u'+MaxLongitude)
    (别忘了确保这些都具有相同的精度)
  • 这将返回到红色圆圈最大半径范围内的所有圆圈
  • 然后,您必须遍历返回的所有圆,并根据它们自己的半径查看是否包含红色圆(这里有非常简单的数学公式,网上有大量示例)

  • 这是我能想到的唯一没有服务器端处理的方法。

    谢谢您的回答!随着额外需求的增加,问题越来越严重,我最终采用了Firebase+PostGIS的混合方法。