Dav*_*tin 6 location filter firebase swift firebase-realtime-database
我有以下Firebase数据库结构,
"-KSupX7CppMD1zbqIy0y" : {
"addedByUser" : "zQpb7o18VzYsSoTQtT9DNhOqTUn2",
"content" : "Post 1",
"cost" : "20",
"duration" : "Weekly",
"latitude" : "40.7594479995956",
"longitude" : "-73.9838934062393",
"timestamp" : "Fri 30 Sep"
},
"-KSuphuqO6a0lnrJYUkt" : {
"addedByUser" : "zQpb7o18VzYsSoTQtT9DNhOqTUn2",
"content" : "Post 2",
"cost" : "10",
"duration" : "Daily",
"latitude" : "40.7594329996462",
"longitude" : "-73.9846261181847",
"timestamp" : "Fri 30 Sep"
}
Run Code Online (Sandbox Code Playgroud)
我需要在一定的距离参数(小于50米,100米,150米和200米)内过滤帖子.我可以从"经度"和"纬度"获得坐标,但我很难过滤帖子.任何帮助将不胜感激.
提前谢谢了.新手到Firebase和Swift.
以下是您可以尝试的解决方案。这假设您已将所有帖子从 Firebase 下载到应用程序并存储在数组中。您还可以考虑使用我个人没有使用过的 GeoFire(但愿意)。我相信它允许您按位置查询 Firebase,因此您不必首先将所有帖子下载到用户的设备并在客户端进行过滤。
// assumes you have set up the app to get the user's current location
var currentLocation: CLLocation?
// Your array of posts downloaded from Firebase
var postArray = [post]()
let metersInTwentyFiveMiles = 40233.6
// You could put this in viewDidAppear after you load the post array from Firebase
for post in postArray {
var distanceInMeters: CLLocationDistance = 0
let postLocation = CLLocation(latitude: post.latitude, longitude: post.longitude)
if let currentLocation = self.currentLocation {
// Set distanceInMeters to the distance between the user's current location and the location of the post.
distanceInMeters = currentLocation.distanceFromLocation(postLocation)
// If this distance is not within 25 miles, remove this post from the array
if self.metersInTwentyFiveMiles < distanceInMeters {
self.posts = self.posts.filter{ $0 != post }
}
}
}
Run Code Online (Sandbox Code Playgroud)