0

我正在 Swift 中构建一个应用程序,用户(可以发布他们在街上目睹的事件的位置。每个事件的生命周期为 45 分钟,然后在该阈值之后它不会出现在地图上。

我像这样构建了我的 Json 树(位置和事件共享相同的 id - 此处未表示):

firebaseapp {
  locations {
    g
    l {
      0: "latitude"
      1: "longitude"
    }
  }
  events {
    timestamp: "UTC timestamp"
    description: "my description"
    user: "id of user"
  }
  users {
    // User data
  }
}

我查询屏幕上显示的区域对应的所有位置,然后查询不到 45 分钟前发生的事件。我这样做:

regionQuery = geoFire.queryWithRegion(mapView.region)
regionQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in

// I query my events based on the key here

})

这种方法的问题在于,对于特定区域,我查询过去发生的事件的所有位置(可能很多),然后我使用传统 Firebase 查询查询不到 45 分钟前发生的事件.

有没有更好的解决方案来解决我的问题,因为如果每次用户移动地图时,我担心我会很快超过带宽阈值,显示的区域的所有位置都被加载......

4

1 回答 1

3

只需将“最近位置”与“历史位置”分开:

recent_locations
   g
      l {
        0: "latitude"
        1: "longitude"
      }
historic_locations
   g
      l {
        0: "latitude"
        1: "longitude"
      }

现在,您可以针对最近的位置或历史位置运行地理查询。

于 2016-04-22T20:32:39.417 回答