Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/02/2015, 15:57
Avatar de pzin
pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Respuesta: Consulta para obtener registros aproximados geograficamente

Yo tenía esto hecho por ahí. Es un método que usa la fórmula de Haversine para calcular distancias en un globo. Supongo que lo cogí o adapté de algún otro lugar:
Código Ruby:
Ver original
  1. def distance(a,b)
  2.  
  3.     lat1 = a[0]
  4.     long1 = a[1]
  5.     lat2 = b[0]
  6.     long2 = b[1]
  7.  
  8.     dtor = Math::PI/180
  9.     r = 6378.14*1000
  10.    
  11.     rlat1 = lat1 * dtor
  12.     rlong1 = long1 * dtor
  13.     rlat2 = lat2 * dtor
  14.     rlong2 = long2 * dtor
  15.    
  16.     dlon = rlong1 - rlong2
  17.     dlat = rlat1 - rlat2
  18.    
  19.     a = Math::sin(dlat/2)**2 + Math::cos(rlat1) * Math::cos(rlat2) * Math::sin(dlon/2)**2
  20.     c = 2 * Math::atan2(Math::sqrt(a), Math::sqrt(1-a))
  21.  
  22.     r * c
  23.  
  24. end

Con eso, en un bucle aparte, puedes calcular las distancias y guardarlas en algún método del objeto y al final ordenarlas con un .sort_by(&:distancia). El método espera dos arrays con latitud y longitud de ambos puntos.
__________________
(: