ActiveRecord запрос для сообщений в пределах определенного радиуса, используя геокодер?

0

У меня есть следующая таблица таблиц 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 я могу использовать метод для определения расстояния между двумя длинными координатами lat.

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)

Как я могу изменить этот запрос, чтобы получить все сообщения в определенном радиусе? Т.е. отображаются только сообщения, которые имеют координаты в пределах 5 км от текущего местоположения пользователя?

Я использую Sinatra вместо Rails, если это имеет значение.

Теги:
geolocation
activerecord
rails-geocoder

1 ответ

1
Лучший ответ

Вы можете использовать метод near предоставляемый геокодером:

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

Как указано в их документации, вам нужно добавить это в свою модель:

extend Geocoder::Model::ActiveRecord

Ссылка: https://github.com/alexreisner/geocoder#for-activerecord-models

Ещё вопросы

Сообщество Overcoder
Наверх
Меню