Подтвердить что ты не робот

Рассчитать расстояние, заданное двумя точками, широтой и долготой

Возможный дубликат:
Настройка широты и долготы MySQL

Я знаю, что этот вопрос, вероятно, был задан много раз, я много исследовал, и мне нужна помощь в конкретной работе.

Позволяет сказать, что у меня есть форма, и пользователь вводит долготу и широту, и у меня есть база данных, в которой есть таблица, содержащая долготы и широты, как бы я искал точку или точки в этой таблице, которые находятся в радиусе 15 миль?

4b9b3361

Ответ 1

Вы можете использовать формулу, которая вычисляет расстояния между двумя точками. Например:

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.";

Ответ 2

Если у вас есть Lat/Lon из двух точек, вы можете получить delta Lat и delta Lon и преобразовать это расстояние в широту и расстояние по долготе и использовать теорему Пифагора.

Вы просматривали страницы типа http://www.movable-type.co.uk/scripts/latlong.html? Это имеет несколько способов вычисления расстояния. Итак, когда вы просматриваете свой список очков, вы используете формулу для расчета расстояния от каждой точки до точки интереса и сохраняете только те, которые удовлетворяют R < 15 миль.