0
我使用postgis根据距离用户的距离对数据进行排序。由于postgis在返回信息之前计算距离,有没有办法在返回信息时将值设置为距离属性?我不希望它被存储在数据库中,只是想在检索时设置它。这就是我用来在我的模型中进行排序的东西。提前致谢。使用Postgis + Rails在模型上设置距离属性
scope :distance, ->(userLat, userLng) {
order(
%{
ST_Distance_Sphere(
ST_GeomFromEWKT(
'SRID=4326;POINT(' || properties.lng || ' ' || properties.lat || ')'
),
ST_GeomFromEWKT('SRID=4326;POINT(%f %f)')
)
} % [userLng, userLat])
}
你是什么意思反规范化?我试图避免保存字段,因为每个查询应根据用户位置有不同的距离结果。而且因为我使用rails,因为我的api是另一种方法而不是视图? –
视图基本上是你的数据库的非规范化视图。由于你必须在数据库中使用Postgres GEO来计算它,所以你可以像你一样在你的select子句中计算它,或者利用db视图来为你做。它们都是几乎相同的东西。视图方法看起来更干净但不会更快 –