使用地理编码器对特定半径内的帖子进行 ActiveRecord 查询?
ActiveRecord query for posts within a certain radius using geocoder?
我有以下 MYSQL table 架构,其中包含 post 个记录了纬度和经度的数据:
+------------+--------------+------+-----+---------+----------------+
| 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)
我想从 table 中检索一组记录。我知道我可以获得 10 条记录的批次,使用以下查询按时间排序:
record = Post.order(:timestamp).offset(10 * @var.to_i).first(10)
如何修改此查询,以便我获取特定半径内的所有 post? IE。只显示坐标在当前用户位置 5 公里以内的 posts?
如果重要的话,我正在使用 Sinatra 而不是 Rails。
您可以使用地理编码器提供的 near
方法:
Post.near([lat, lon], 5)
如他们的文档中所述,您需要将其添加到您的模型中:
extend Geocoder::Model::ActiveRecord
参考:https://github.com/alexreisner/geocoder#for-activerecord-models
我有以下 MYSQL table 架构,其中包含 post 个记录了纬度和经度的数据:
+------------+--------------+------+-----+---------+----------------+
| 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)
我想从 table 中检索一组记录。我知道我可以获得 10 条记录的批次,使用以下查询按时间排序:
record = Post.order(:timestamp).offset(10 * @var.to_i).first(10)
如何修改此查询,以便我获取特定半径内的所有 post? IE。只显示坐标在当前用户位置 5 公里以内的 posts?
如果重要的话,我正在使用 Sinatra 而不是 Rails。
您可以使用地理编码器提供的 near
方法:
Post.near([lat, lon], 5)
如他们的文档中所述,您需要将其添加到您的模型中:
extend Geocoder::Model::ActiveRecord
参考:https://github.com/alexreisner/geocoder#for-activerecord-models