Как рассчитать на расстоянии с помощью оператора sql по формуле Haversine - PullRequest
1 голос
/ 22 апреля 2020
$sql = "SELECT *, ( 6371 * acos( cos( radians(37) ) * cos( radians( ".$_GET["lat"]." ) ) * cos( radians( ".$_GET["lng"]." ) - radians(-122) ) + sin( radians(37) ) * sin( radians( ".$_GET["lat"]." ) ) ) ) AS distance FROM markers HAVING distance < 0.5 ORDER BY distance LIMIT 0 , 1";

Исходя из моего быстрого пробежки со смертью, я понял, что мой $ _GET не имеет смысла относительно того, что он делает. Оригинальная формула такая

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

Я не могу найти хорошие учебники о том, как это реализовать. Мне просто нужно знать, где его поставить! Моя широта и долгота ... в операторе sql, чтобы он мог вычислять IF вокруг друг друга для группировки.

Это руководство Google, из которого я получил код.

И члены ответят на проблему .. Мне кажется, что вряд ли есть объяснение, как использовать эту формулу в sql ..

ОБНОВЛЕНИЕ

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

ОБНОВЛЕНИЕ

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

</p> <pre><code><?php $lat1=$_GET["lat"]; $lng1=$_GET["lng"]; $lat2=$grouping[$counter][1]; $lng2=$grouping[$counter][2]; $sql = "SELECT id, status, ( 6371 * acos( cos( radians($lat1) ) * cos( radians( $lat2 ) ) * cos( radians( $lng2 ) - radians($lng1) ) + sin( radians($lat1) ) * sin(radians($lat2)) ) ) AS distance FROM markers HAVING distance < 0.5 ORDER BY distance LIMIT 0 , 2;"; ?>

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