簡體   English   中英

如何獲取當前用戶的經緯度並計算與位置 B 的距離?

[英]How to get current user latitude and longitude and calculate distance with location B?

我可以知道如何獲取當前用戶位置並計算位置 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 之間的距離?

請幫忙。 謝謝你。

Eddy 目前您正計划將 javascript 變量分配給 PHP 變量,這不是在客戶端做事情的正確方法,而另一種是服務器端。 參考。

我已更改您的代碼以查找用戶位置和商家位置之間的距離。

<script type = 'text/javascript'>
    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(dest_lon, dest_lat){
        if(navigator.geolocation) {
            console.log('hhhh');
            navigator.geolocation.getCurrentPosition(function(position){
                latitude = position.coords.latitude;
                longitude = position.coords.longitude; 
                console.log(latitude+','+longitude+','+ dest_lat+','+ dest_lon);
                dist = distance(latitude, longitude, dest_lat, dest_lon, 'K');
                console.log(dist);  //final distance present in dist variable          
            });
        } else {
            alert("Sorry, your browser does not support HTML5 geolocation.");
        }
    }

    var merch_longitude = 47.683277;
    var merch_latitude = 3.210482;
    showPosition(merch_longitude, merch_longitude);
</script>

在上面的代碼中,您將數據庫值傳遞給merch_longitudemerch_latitude目前它是硬編碼的。 我們將使用 Javascript 的地理定位獲取用戶的當前位置,然后showPosition()將計算距離。

距離函數有 5 個參數 lat1, long1, lat2, long2, unit。

默認單位是英里,您可以通過 K 表示 KM,N 表示 NM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM