gpt4 book ai didi

swift - 使用 swift 按位置从 firebase 获取帖子

转载 作者:行者123 更新时间:2023-11-28 07:36:38 24 4
gpt4 key购买 nike

我正在尝试获取帖子并在用户进入帖子的某种半径时将它们打印到控制台。我怎样才能 swift 做到这一点。 Firebase Database

最佳答案

这是我在 Swift 中编写的一个小结构,让您使用 Haversine formula 计算两个坐标之间的距离(以公里为单位) .

例子

let london = Coordinate(long: -0.118092, lat: 51.509865)
let paris = Coordinate(long: 2.3522219, lat: 48.856614)

print(london.distance(to: paris)) // ~343.43km
print(london == paris) // false
print(london) // 51.509865,-0.118092
print(paris) // 48.856614,2.3522219

代码

import Foundation

public struct Coordinate: CustomStringConvertible, Equatable {
// Earth radius in km
private static let radiusEarth = 6371.0

public typealias Distance = Double

public let lon: Double
public let lat: Double

public init(long: Double, lat: Double) {
self.lon = long
self.lat = lat
}

public static func == (lhs: Coordinate, rhs: Coordinate) -> Bool {
return lhs.lon == rhs.lon && lhs.lat == rhs.lat
}

public var description: String {
return "\(lat),\(lon)"
}

// Haversine formula
public func distance(to other: Coordinate) -> Distance {
let dLat = deg2rad(other.lat - lat)
let dLon = deg2rad(other.lon - lon)
let a =
sin(dLat / 2) * sin(dLat / 2) +
cos(deg2rad(lat)) * cos(deg2rad(other.lat)) *
sin(dLon / 2) * sin(dLon / 2)
let c = 2 * atan2(sqrt(a), sqrt(1 - a))
return Coordinate.radiusEarth * c
}

private func deg2rad(_ deg: Double) -> Double {
return deg * (.pi / 180.0)
}
}

关于swift - 使用 swift 按位置从 firebase 获取帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53110772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com