геокит - использование сырых лат в рельсах - PullRequest
2 голосов
/ 28 июля 2011

Я использую GeoKit для Rails, и он отлично работает.Однако я заметил, что при извлечении большого количества списков загрузка ОЧЕНЬ медленная.

Интересно, так ли это, потому что он запрашивает Google или какой-либо внешний источник перед возвратом результатов.Если это так, есть ли способ использовать необработанные координаты широты (которые у меня есть), чтобы просто рассчитать расстояние внутри?

Или просто рубиновая формула, которая сделает это для меня?

Ответы [ 2 ]

6 голосов
/ 28 июля 2011

Расстояние мудро:

Geokit-gem предоставляет метод для расчета расстояния между двумя точками:

# model has acts_as_mappable
Model.distance_between obj1, obj2, :units => :kms, :formula => :sphere

Искатель-накрест:

Geokit-rails (плагин) имеет средство поиска, которое генерирует SQL (для mysql, postgres и SQL-сервер) для вычисления расстояний, позволяя вам находить строки на определенном расстоянии:

Model.find_within(100, :units => :kms)

Он рассчитывает расстояния для всех строк, но не требует запросов к внешним ресурсам. Если ваша таблица действительно огромна, это может помочь (но я не уверен в этом), чтобы сузить ее, предварительно рассчитав диапазоны широты / долготы:

Model.where(:lat => (x-0.05)..(x+0.05), :lng => (y-0.05)..(y+0.05)).find_within(z, :units => :kms)

Если это все равно не поможет, вам придется написать какой-нибудь настроенный SQL. Расчет расстояния sql для геокит-рельсов здесь: https://github.com/andre/geokit-rails/tree/master/lib/geokit-rails/adapters

1 голос
/ 28 июля 2011

Вы можете использовать формулы для сфер, чтобы вычислить расстояние двух точек на поверхности.

Вот некоторая реализация JavaScript для вычисления расстояния между широтами / долготами (и некоторые другие полезные вещи). Не нужно слишком много умственного труда переводить на рубин; -)

http://www.movable -type.co.uk / скрипты / latlong.html

...