En termes de distance :
Geokit-gem fournit une méthode pour calculer la distance entre deux points :
# model has acts_as_mappable
Model.distance_between obj1, obj2, :units => :kms, :formula => :sphere
Finder-wise :
Geokit-rails (un plugin) a un finder qui génère du SQL (pour mysql, postgres, et SQL server) pour calculer les distances, vous permettant de trouver des lignes dans une certaine distance :
Model.find_within(100, :units => :kms)
Il calcule les distances pour toutes les lignes, mais n'a pas besoin d'interroger des ressources externes. Si votre table est vraiment énorme, il pourrait être utile (mais je n'en suis pas sûr) de la réduire en calculant d'abord les plages de lat/ng :
Model.where(:lat => (x-0.05)..(x+0.05), :lng => (y-0.05)..(y+0.05)).find_within(z, :units => :kms)
Si cela ne vous aide toujours pas, vous devrez écrire un SQL personnalisé. Les calculs de distance sql pour geokit-rails sont ici : https://github.com/andre/geokit-rails/tree/master/lib/geokit-rails/adapters