假设我需要在vapor中查询两个类之间的距离。这就是我的意思
let distanceBetweenLocations = 5
let CloseLocations = try Locations.query().filter("lat", .distance , .isLessThan , 4)
类似的东西
我不确定您是否理解您的问题在逻辑上是错误的。
很明显,您必须进行某种计算才能实际获得距离。
我建议在您的模型上使用 func 创建扩展,这将计算坐标之间的距离,然后在过滤器 func 中使用 if ....
可能是这样的:
extension Location{
func distance(lat: Double, lon: Double) -> Double {
let R = 6371.0
let dLat = (lat - localLat) * 3.14 / 180
let dLon = (lon - localLon) * 3.14 / 180
let latRad1 = localLat * 3.14 / 180
let latRad2 = lat * 3.14 / 180
let a1 = sin(dLat/2) * sin(dLat/2)
let a2 = sin(dLon/2) * sin(dLon/2) * cos(latRad1) * cos(latRad2)
let a = a1 + a2
let c = 2 * atan2(sqrt(a),sqrt(1-a))
return R * c
}
}
我尽量不要粗鲁,但我希望您只是懒得正确提问,如果您没有正确提问,请参阅这个测试项目阅读所有内容并尝试理解,当您这样做时,您将知道如何实现您所需要的。