Расчёт расстояний между двумя точками на поверхности Земли

Встала тут задачка — задан массив точек (с гео. координатами). Есть опорная точка (тоже две координаты). Есть радиус в километрах. Надо посчитать число точек в массиве, которые удовлетворяют условию — т.е. находятся в пределах радиуса.

Есть два пути решения этой задачи. Первый — самый простой. Тупо перебрать массив и на каждом шаге вычислять радиус между двумя точками: опорной и текущей. Если радиус в пределах — выносим его в буфер, а после прохода — возвращаем сам буфер.

Второй — выяснить, какой шаг по географическим координатам соответствует шагу реальному, допустим, в 10 метров? К примеру это 0.00005. Вычисляем сдвиг, и по нему делаем выборку из БД (обычно всё это там хранится) по условию. Получится, правда не радиус, а квадратик. Но то не беда.

По некоторым причинам решили сделать по-тупому, т.е. получить все записи, а потом по ним пройтись.Целый день я ел себе мозг, пытаясь перевести какую-то хуйню и недоразумение (cos(d)) в нормальное число d в радианах, а затем и в километрах. После долгой и пиздецкой ебли, наконец таки нашёл формулу, которая выдаёт РАБОЧЕЕ значение в километрах. Короче вот кусок кода, отвечающий непосредственно за расчёт:

$dist_km = 111.2 * acos( abs(sin($db_latitude)*sin($_latitude) + 
cos($db_latitude)*cos($_latitude)*cos( abs($db_longitude - $_longitude) ) ) );