我想创建一个简单的距离函数来排序对象,同时从 Swift2 中的 SQLite 数据库中获取。我正在使用很棒的 SQLite.swift 框架。
使用以下内容,我可以获取最近的对象:
db.createFunction("distance") { (args) -> Binding? in
assert(args.count == 4)
if let lat1 = args[0] as? Double, let lon1 = args[1] as? Double, let lat2 = args[2] as? Double, let lon2 = args[3] as? Double {
let deltaLat = lat1 - lat2
let deltaLon = lon1 - lon2
return deltaLat * deltaLat + deltaLon * deltaLon * 0.46512281898705
}
return nil
}
let queryString = "SELECT * FROM objects where lat != \"\" and lng != \"\" ORDER BY distance(lat, lng, \(lat), \(lng)) ASC LIMIT \(fetchLimit)"
let stmt = db.prepare(queryString)
for row in stmt {
print(row)
}
但我想在不使用查询字符串的情况下使用类型安全的 SQL 表达式。如何添加一个函数以使其能够像这样工作(这里 lat 和 lon 值是 Expression 值,表示表中行的位置和 centerLat,centerLon 值表示我正在计算的中心点物体的距离):
for row in db.order(distance(lat, lon, centerLat, centerLon).limit(fetchLimit) {
print(row)
}