Рассчитать расстояние с учетом 2 точек, широты и долготы
Возможный дубликат:
Настройка таблицы широты и долготы MySQL
Я знаю, что этот вопрос, вероятно, задавался много раз, я много исследовал, и мне нужна помощь с конкретными вещами.
Допустим, у меня есть форма, и пользователь вводит долготу и широту, и у меня есть база данных, в которой есть таблица, содержащая долготы и широты. Как мне найти точку или точки в этой таблице, которые находятся в пределах 15 миль от радиуса?
2 ответа
Вы можете использовать формулу, которая рассчитывает расстояния между двумя точками. Например:
function get_distance($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') {
$theta = $longitude1 - $longitude2;
$distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) +
(cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) *
cos(deg2rad($theta)));
$distance = acos($distance);
$distance = rad2deg($distance);
$distance = $distance * 60 * 1.1515;
switch($unit) {
case 'Mi':
break;
case 'Km' :
$distance = $distance * 1.609344;
}
return (round($distance,2));
}
Вы также можете сделать что-то вроде:
$query = "SELECT *,(((acos(sin((".$latitude."*pi()/180)) *
sin((`Latitude`*pi()/180))+cos((".$latitude."*pi()/180)) *
cos((`Latitude`*pi()/180)) * cos(((".$longitude."- `Longitude`)*
pi()/180))))*180/pi())*60*1.1515
) as distance
FROM `MyTable`
HAVING distance >= ".$distance.";
Если у вас есть широта / долгота из двух точек, вы можете получить дельта-широту и дельта-лон и преобразовать их в расстояние по широте и расстояние по долготе и использовать теорему Пифагора.
Вы смотрели на такие страницы, как http://www.movable-type.co.uk/scripts/latlong.html? Это имеет несколько способов вычисления расстояния. Поэтому, просматривая список точек, вы используете формулу для расчета расстояния от каждой точки до точки интереса и сохраняете только те из них, которые удовлетворяют R<15 миль.