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 originaldef distance(a,b)
lat1 = a[0]
long1 = a[1]
lat2 = b[0]
long2 = b[1]
dtor = Math::PI/180
r = 6378.14*1000
rlat1 = lat1 * dtor
rlong1 = long1 * dtor
rlat2 = lat2 * dtor
rlong2 = long2 * dtor
dlon = rlong1 - rlong2
dlat = rlat1 - rlat2
a = Math::sin(dlat/2)**2 + Math::cos(rlat1) * Math::cos(rlat2) * Math::sin(dlon/2)**2
c = 2 * Math::atan2(Math::sqrt(a), Math::sqrt(1-a))
r * c
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.