Рассчитать множественное расстояние между несколькими шинами / лонгами в цикле PHP - PullRequest
0 голосов
/ 27 марта 2020

У меня есть две таблицы Driver_position и user_position, в которых обновляются лат и длинная позиция пользователя и водителя. Мне нужно выяснить идентификатор_драйвера для каждого идентификатора пользователя, который находится на расстоянии около 5 км от позиции_пользователя, так что результат будет примерно равен user_id1 = driver_id1,driver_id2,driver_id3 etc Для user_id2=driver_id5

enter image description here

Пока у меня есть код ниже, чтобы рассчитать расстояние в км. Как я могу достичь выше в PHP

$lat1 = deg2rad($user_latitude);
        $lon1 = deg2rad($user_longitude);
        $lat2 = deg2rad($driver_latitude);
        $lon2 = deg2rad($driver_longitude);

        $latDelta = $lat1 - $lat2;
        $lonDelta = $lon1 - $lon2;

        $earthRadius=3959;

        $angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
        cos($lat2) * cos($lat1) * pow(sin($lonDelta / 2), 2)));

        //return $angle * $earthRadius;  

        $dis= ($angle * $earthRadius)/0.62137; // miles to km conversion mi / 0.62137 = km

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Да, вы можете передать значение Dynami c согласно вашим требованиям. проверьте с помощью приведенного ниже кода

$pickup_latitude='37.4219983'; $pickup_longitude='-122.084'; 

$sql="(SELECT *,driver_location.driver_id, ( 6371 * acos( cos( radians('".$pickup_latitude."') ) * cos( radians( driver_location.latitude ) ) * cos(radians( driver_location.longitude ) - radians('".$pickup_longitude."') ) + sin( radians('".$pickup_latitude."') ) * sin( radians( driver_location.latitude ) ) ) ) as distance FROM driver_location where driver_location.status='Online' HAVING distance >=0)"

вы передаете значение переменной $ pickup_longitude с одинарными кавычками, поэтому его значение рассматривается как '$ pickup_longitude'. Вам нужно передать его значение в двойных кавычках, таких как '". $ Pickup_longitude."'

Попробуйте код выше.

1 голос
/ 27 марта 2020

Вы можете использовать ниже Mysql запрос для ваших решений

// To search by kilometers instead of miles, replace 3959 with 6371

SELECT user_position.*,driver_position.driver_id, ( 3959 * acos( cos( radians(37.4219983) ) * cos( radians( driver_position.latitude ) ) * cos( radians( driver_position.longitude ) - radians(-122.0844) ) + sin( radians(37.4219983) ) * sin(radians(driver_position.latitude)) ) ) AS distance FROM user_position ,driver_position where user_position.user_id=10002 HAVING distance < 10000

Надеюсь, это поможет вам.

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