Я нашел эту ссылку в Google переполнении стека Google. Как получить расстояние между двумя точками в метре? который показывает следующее решение в отношении нахождения расстояния в км, учитывая два разных значения широты и долготы:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script> var p1 = new google.maps.LatLng(45.463688, 9.18814); var p2 = new google.maps.LatLng(46.0438317, 9.75936230000002); alert(calcDistance(p1, p2)); //calculates distance between two points in km's function calcDistance(p1, p2){ return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2); } }
Это здорово и работает, однако я создаю приложение, которое вытягивает lat и длинные значения из базы данных и сравнивает каждый с постоянным значением lat и longitude, чтобы определить, находятся ли пользователи, из которых я выхожу из db, в определенном диапазоне набор lat и long.
Я делаю это на PHP, но я хочу передать постоянные значения lat и long вместе с текущими значениями lat и long указанной выше функции JavaScript, вычислить расстояние и затем вернуть значение переменной PHP. Другими словами, я хочу вызвать функцию JavaScript в PHP и вернуть значение JavaScript обратно в переменную PHP.
Я вижу много форумов, которые утверждают, что это невозможно, тогда некоторые говорят, что это так. Может ли кто-нибудь помочь мне с этим или предложить другой подход? мне просто нужно сделать какое-то старомодное исчисление в PHP и забыть плагин Google API?
Вы можете использовать нижеприведенный запрос, если у вас есть значение широты и долготы в вашей базе данных.
SELECT a.*, 3956 * 2 * ASIN(SQRT( POWER(SIN(($lat - lat) * pi()/180 / 2), 2) + COS($lat * pi()/180) * COS(lat * pi()/180) * POWER(SIN(($long - longi) * pi()/180 / 2), 2) )) as distance FROM table GROUP BY id HAVING distance <= 500 ORDER by distance ASC
$ lat и $ long – текущая позиция пользователя. lat и longi – широта и долгота записей.
Также см. « Создание локатора хранилища с PHP, MySQL и Google Maps », чтобы понять, как будет работать запрос выше.