使用 Postgis + Rails 在模型上设置距离属性

Setting distance attribute on model using Postgis + Rails

我正在使用 postgis 根据与用户的距离对数据进行排序。由于 postgis 在返回信息之前计算距离,有没有办法在返回信息时将值设置为距离属性?我不想将其存储在数据库中,只希望在检索时对其进行设置。这就是我用来在我的模型中进行排序的方法。提前致谢。

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])
}

不,如果值是由 Postgres 计算的,那么 Postgres 显然必须在排序期间计算它。如果您坚决不使用距离计算作为字段对数据库进行非规范化,那么您可以制作一个数据库视图并将您的模型置于其之上。

create view properties_distance as 
  select ST_Distance_Sphere(
    ST_GeomFromEWKT(
      'SRID=4326;POINT(' || properties.lng || ' ' || properties.lat || ')'
    ),
    ST_GeomFromEWKT('SRID=4326;POINT(%f %f)')
  ) as distance, lng, lat from properties;