Вот к примеру как я на SQL расчитываю растояние между двумя координатами.
Высчитам расстоение, можно в принципе и кластеризацию написать на PHP, если надо :-)
"google maps cluster" - поищите в поисковике, думаю найдете много интересного, как PHP, так и MySQL и JS решения.
$query = $this->db->query('SELECT
pan.id,
ROUND(ATAN(SQRT(POW(COS(RADIANS(pan.latitude)) * SIN(ABS(RADIANS('.$pano->longitude.')-RADIANS(pan.longitude))),2) + POW( COS(RADIANS('.$pano->latitude.')) * SIN(RADIANS(pan.latitude)) - SIN(RADIANS('.$pano->latitude.')) * COS(RADIANS(pan.latitude))*COS(ABS(RADIANS('.$pano->longitude.')-RADIANS(pan.longitude))),2))/(SIN(RADIANS(pan.latitude)) * SIN(RADIANS('.$pano->latitude.')) + COS(RADIANS(pan.latitude)) * COS(RADIANS('.$pano->latitude.'))* COS(ABS(RADIANS('.$pano->longitude.')-RADIANS(pan.longitude))))) * 6373000, 0) AS distance
FROM pano pan
WHERE pan.latitude IS NOT NULL
AND pan.longitude IS NOT NULL
AND pan.id != '.$pano->id);