cube earthdistance, postgresql contrib, , . , , , .
2 :
select circle.id,
earth_distance(ll_to_earth(circle.latitude, circle.longitude),
ll_to_earth(x.latitude, x.longitude))
from circle,
circle x
where x.id = 2 and circle.id <> x.id
order by 2;
x.radius circle.radius , , . earth_distance .
, , -, , , , . :
:
create table circle_distance as
select a.id as a_id, b.id as b_id,
earth_distance(ll_to_earth(a.latitude, a.longitude),
ll_to_earth(b.latitude, b.longitude))
from circle a, circle b
where a.id <> b.id;
alter table circle_distance add unique(a_id, b_id);
create index on circle_distance(a_id, earth_distance);
/ circle_distance, circle. , :
select b_id from earth_distance where a_id = $circle_id order by earth_distance limit $n
(a_id,earth_distance) .