【问题标题】:ActiveRecord query for posts within a certain radius using geocoder?ActiveRecord 使用地理编码器查询特定半径内的帖子?
【发布时间】:2018-12-29 17:28:37
【问题描述】:

我有以下 MYSQL 表架构,其中包含记录其纬度和经度的帖子:

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| user       | varchar(128) | NO   |     | NULL    |                |
| content    | varchar(512) | NO   |     | NULL    |                |
| timestamp  | varchar(128) | NO   |     | NULL    |                |
| longtitude | double       | NO   |     | NULL    |                |
| latitude   | double       | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

使用geocoder gem,我可以使用一种方法来计算两个经纬度坐标之间的距离。

find the distance between two arbitrary points
Geocoder::Calculations.distance_between([47.858205,2.294359], [40.748433,-73.985655])
 => 3619.77359999382 # in configured units (default miles)

我想从表中检索一组记录。我知道我可以获得 10 条记录的批次,使用以下查询按时间排序:

  record = Post.order(:timestamp).offset(10 * @var.to_i).first(10)

如何修改此查询以获取特定范围内的所有帖子? IE。只显示坐标在当前用户位置 5 公里范围内的帖子?

如果重要的话,我会使用 Sinatra 而不是 Rails。

【问题讨论】:

    标签: mysql ruby activerecord geolocation rails-geocoder


    【解决方案1】:

    你可以使用geocoder提供的near方法:

    Post.near([lat, lon], 5)
    

    如他们的文档中所述,您需要将其添加到您的模型中:

    extend Geocoder::Model::ActiveRecord
    

    参考:https://github.com/alexreisner/geocoder#for-activerecord-models

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多