蒸汽查询类的距离

时间:2016-11-24 06:02:54

标签: swift xcode server vapor

让我们说我需要查询两个类之间的距离。这就是我的意思

let distanceBetweenLocations = 5
let CloseLocations = try Locations.query().filter("lat", .distance , .isLessThan , 4)

像这样的东西

1 个答案:

答案 0 :(得分:1)

我不确定您是否理解您的问题在逻辑上是错误的。

很明显,您必须进行某种计算以实际获得距离。

我建议在你的模型上使用func创建扩展,它将计算坐标之间的距离,然后在filter 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
  }
}

我尽量不要粗鲁 我希望你只是懒得正确地询问,如果你不是,请看this测试项目阅读全部尝试理解,当你这样做时,你将知道如何实现你所需要的。