Насколько велик ваш пространственный диапазон? Насколько велик ваш набор данных? Насколько точный вам нужен?
Это важно, потому что, если они находятся близко, вам не нужно беспокоиться о кривизне Земли.
Градусы широты параллельны, поэтому расстояние между каждым градусом остается почти постоянным, но, поскольку градусы долготы расположены дальше друг от друга на экваторе и сходятся на полюсах, их расстояние сильно варьируется.
Каждый градус широты составляет приблизительно 69 миль (111 километров) друг от друга. Диапазон варьируется (из-за слегка эллипсоидальной формы Земли) от 68,703 миль (110,567 км) на экваторе до 69,407 (111,699 км) на полюсах. Это удобно, потому что каждая минута (1/60 градуса) составляет примерно одну милю.
Степень долготы широка на экваторе 69,172 миль (111,321) и постепенно уменьшается до нуля на полюсах. В 40 ° к северу или югу расстояние между градусами долготы составляет 53 мили (85 км).
Другой аспект: если Фред находится в 4 милях от Билла, а Билл в 4 милях от Тома, расстояние между Фредом и Томом может составлять 8 миль. Если ваш порог близости составляет 5 миль, Билл и Фред находятся в одной группе, Билл и Том - в одной группе, а Фред и Том - нет.
Следующий запрос может дать вам полезное начало:
select abs(abs(a.lat) - abs(b.lat)),abs(abs(a.lon) - abs(b.lon)),
sdo_geom.sdo_distance(a.geom, b.geom, 0.005,'unit=kilometer') dist_km
from
(select sdo_geometry(2001,8314,sdo_point_type(33,151, null), null,null) geom, 33 lat, 151 lon from dual) a,
(select sdo_geometry(2001,8314,sdo_point_type(34,151, null), null,null) geom, 34 lat, 151 lon from dual) b