我在做雨燕蒸汽计划。我需要过滤和排序用户的距离(它不应该超过100公里,第一个用户应该是最近的)。我有经纬度坐标。我需要专门对查询方法、过滤器和排序进行优化。我该怎么办?
我用的是PostgreSQL db。
func getAll(_ req: Request, arguments: UserFilter) async throws -> [User] {
let user = try req.auth.require(User.self)
var query = User.query(on: req.db)
arguments. filter(&query)
if let lat = user.latitude, let lon = user.longtitude {
query. filter(
User.self,
field: KeyPath<Schema, QueryableProperty>, // not yet provided
method: DatabaseQuery.Filter.Method, // not yet provided
value: Decodable & Encodable) // not yet provided
)
}
}
return try await query.all()
个字符
1条答案
按热度按时间vlju58qv1#
我在Vapor官方GitHub上问了同样的问题。我推荐了brokenhandsio/fluent-postgis framework。它为FluentPostgreSQL和Vapor提供了Swift PostGIS支持,这对我很有帮助。
这是FluentPostGIS包的一个分支,它增加了对地理查询的支持。FluentPostGIS为fluent-postgres-driver和Vapor 4提供PostGIS支持。