MySQL Долгота Широта не точна - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь выбрать все записи поблизости, основываясь на долготе и широте.

Проблема не точна, например, этот запрос говорит, что пользователь находится на расстоянии 42 км, а на самом деле он находится на расстоянии 65 км.

Я взял значения lon и lat и поместил их в скрипт php, который вычисляет свойство distance, что означает, что запрос неверен.

Есть идеи, почему их так много?

    SELECT
        id,
        first_name,
        (6371 * acos (
           cos ( radians(latitude) )
           * cos( radians( LAT ) )
           * cos( radians( LON ) - radians(longitude) )
           + sin ( radians(latitude) )
           * sin( radians( LAT ) )
          )
        ) AS distance
    FROM
        users

PHP Код, который работает

$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($lon1 - $lon2));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);

if ($unit == "K") {
    return ($miles * 1.609344);
} else if ($unit == "N") {
    return ($miles * 0.8684);
} else {
    return $miles;
}

1 Ответ

0 голосов
/ 07 февраля 2020

Разобрался, параметры в процедуре были установлены на INT вместо DOUBLE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...