Как получить текущую широту и долготу пользователя и рассчитать расстояние с местоположением B? - PullRequest
0 голосов
/ 21 мая 2019

Могу ли я узнать, как получить текущее местоположение пользователя и рассчитать расстояние между местоположением B в километрах?

Я попробовал приведенные ниже коды, но, похоже, не работает.

<?php               
echo "<script type = 'text/javascript'>
function showPosition(){
    if(navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position){
            var latitude = position.coords.latitude;
            var longitude = position.coords.longitude; 
        });
    } else {
        alert(\"Sorry, your browser does not support HTML5 geolocation.\");
    }
}
</script>";

$point1 = array("lat" => $latitude, "long" => $longitude); 
$point2 = array("lat" => $row_Merchant['latitude'], "long" => $row_Merchant['longitude']); 
$km = distanceCalculation($point1['lat'], $point1['long'], $point2['lat'], $point2['long']); // Calculate distance in kilometres (default)
echo "$km km";
?>

    <?php

    function distanceCalculation($point1_lat, $point1_long, $point2_lat, $point2_long, $unit = 'km', $decimals = 2)
    {
    // Calculate the distance in degrees

    $degrees = rad2deg(acos((sin(deg2rad($point1_lat)) * sin(deg2rad($point2_lat))) + (cos(deg2rad($point1_lat)) * cos(deg2rad($point2_lat)) * cos(deg2rad($point1_long - $point2_long)))));


    // Convert the distance in degrees to the chosen unit (kilometres, miles or nautical miles)

    switch ($unit) {

    case 'km':

    $distance = $degrees * 111.13384; // 1 degree = 111.13384 km, based on the average diameter of the Earth (12,735 km)

    break;

    case 'mi':

    $distance = $degrees * 69.05482; // 1 degree = 69.05482 miles, based on the average diameter of the Earth (7,913.1 miles)

    break;

    case 'nmi':

    $distance =  $degrees * 59.97662; // 1 degree = 59.97662 nautic miles, based on the average diameter of the Earth (6,876.3 nautical miles)

    }

    return round($distance, $decimals);

    }

    ?>

Как передать значения широты и долготы в $ point1 = array ("lat" => $ latitude, "long" => $ longitude); чтобы я мог рассчитать расстояние между местоположением пользователя и местоположением B?

Пожалуйста, помогите. Спасибо.

1 Ответ

1 голос
/ 21 мая 2019

Эдди, в настоящее время вы планируете назначить переменную javascript переменной PHP, что не является правильным способом сделать что-то одно, как на стороне клиента, так и на стороне сервера. Ссылка.

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

<?php 
$row_Merchant = [
    'latitude' => 47.683277,
    'longitude' => 3.210482
]; //Change this with database value
?>

<script type = 'text/javascript'>
var latitude  = "";
var longitude = "";

function distance(lat1, lon1, lat2, lon2, unit) {
        var radlat1 = Math.PI * lat1/180;
        var radlat2 = Math.PI * lat2/180;
        var radlon1 = Math.PI * lon1/180;
        var radlon2 = Math.PI * lon2/180;
        var theta = lon1-lon2;
        var radtheta = Math.PI * theta/180;
        var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
        dist = Math.acos(dist);
        dist = dist * 180/Math.PI;
        dist = dist * 60 * 1.1515;
        if (unit=="K") { dist = dist * 1.609344; }
        if (unit=="N") { dist = dist * 0.8684; }
        return dist;
}

function showPosition(){
    console.log('hhhh');
    if(navigator.geolocation) {
        console.log('hhhh');
        navigator.geolocation.getCurrentPosition(function(position){
            latitude = position.coords.latitude;
            longitude = position.coords.longitude; 
            console.log(latitude+','+longitude+','+ merch_latitude+','+ merch_longitude);
            dist = distance(latitude, longitude, merch_latitude, merch_longitude, 'K');
            console.log(dist);  //final distance present in dist variable          
        });
    } else {
        alert("Sorry, your browser does not support HTML5 geolocation.");
    }
}

var merch_longitude = <?php echo $row_Merchant['longitude']; ?>;
var merch_latitude = <?php echo $row_Merchant['latitude']; ?>;
showPosition();
</script>

В приведенном выше коде вы передадите значение базы данных в $row_Merchant в настоящее время жестко запрограммирован.Это значение будет установлено в javascript, и, используя javascript, мы также получаем координаты пользователя.Используя эти координаты, наша функция javascript будет вычислять расстояние.

Функция расстояния принимает 5 параметров lat1, long1, lat2, long2, unit.

По умолчанию в качестве единицы измерения используется мили, вы можете передать Kдля КМ и N для НМ.

...