Если ваша база данных поддерживает пространственные данные, обязательно используйте их. Мне нравится геокит, но мне нужно было делать запросы на основе пространственных данных, а не выбирать все и фильтровать через ГИС. Мы работаем с SQL Server 2005, который не поддерживает пространственные данные (2008 поддерживает). Вот что я должен был сделать:
def self.within_distance(miles, from_longitude, from_latitude)
self.scoped(:conditions => ["((DEGREES(ACOS(SIN(RADIANS(:from_latitude)) *
SIN(RADIANS(latitude)) +
COS(RADIANS(:from_latitude)) *
COS(RADIANS(latitude)) *
COS(RADIANS(:from_longitude - longitude))))) * 69.09) < :miles",
{:from_longitude => from_longitude, :from_latitude => from_latitude, :miles => miles}])
end
Я надеюсь, что вам удастся избавиться от боли, когда вы помещаете это или что-то подобное, но пока это сработало как шарм.