Как найти места поблизости?

В базе есть 15 адресов (Ул. Пушкина, дом Колотушкина..)
От юзера приходит локация (широта и долгота).

Каким образом можно показать юзеру ближайшие к его локации места из базы?
Есть ли готовые решения на PHP для решения этой проблемы? Если нет, то подскажите, пожалуйста, в каком направлении тогда двигаться. Спасибо!
  • Вопрос задан
  • 467 просмотров
Решения вопроса 1
public static function distance($_y1, $_x1, $_y2, $_x2)
{
	$pi      =                   pi();
	$c_A     =                6378137;
	$c_a     =      1 / 298.257223563;
	$c_e2    = 2 * $c_a - $c_a * $c_a;
	
	$fSinB1  = sin($_y1    * $pi / 180);
	$fCosB1  = cos($_y1    * $pi / 180);
	$fSinL1  = sin($_x1    * $pi / 180);
	$fCosL1  = cos($_x1    * $pi / 180);
	
	$fSinB2  = sin($_y2    * $pi / 180);
	$fCosB2  = cos($_y2    * $pi / 180);
	$fSinL2  = sin($_x2    * $pi / 180);
	$fCosL2  = cos($_x2    * $pi / 180);
	
	$N1 = $c_A / sqrt( 1 - $c_e2 * $fSinB1 * $fSinB1 );
	
	$X1 = $N1 * $fCosB1 * $fCosL1;
	$Y1 = $N1 * $fCosB1 * $fSinL1;
	$Z1 = ( 1 - $c_e2 ) * $N1 * $fSinB1;
	
	$N2 = $c_A / sqrt( 1 - $c_e2 * $fSinB2 * $fSinB2 );
	
	$X2 = $N2 * $fCosB2 * $fCosL2;
	$Y2 = $N2 * $fCosB2 * $fSinL2;
	$Z2 = ( 1 - $c_e2 ) * $N2 * $fSinB2;
	
	$D = sqrt( ( $X1 - $X2 ) * ( $X1 - $X2 ) + ( $Y1 - $Y2 ) * ( $Y1 - $Y2 ) + ( $Z1 - $Z2 ) * ( $Z1 - $Z2 ) );
	$R = $N1;
	
	return 2 * $R * asin( 0.5 * $D / $R );
}

Вот есть метод расчета расстояния между точками. (работает исправно уже много лет)
В бд можно занести координаты заранее, использовав Яндекс.Геокодер
http://geocode-maps.yandex.ru/1.x/?geocode=Ул. Пушкина, дом Колотушкина&results=1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы