2017-08-08 54 views
-2

Hy我試着讓距離超過100分。我使用的功能距離PHP做出的距離,但我不知道該如何從JSON這是我的碼距PHP如何從json距離?

<?php 
function distance($lat1, $lon1, $lat2, $lon2, $unit) { 

    $theta = $lon1 - $lon2; 
    $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
    $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; 
     } 
} 

$r = distance(32.9697, -96.80322, 29.46786, -98.53506, "K") . " Kilometers<br>"; 
echo $r; 
?> 

JSON例如像這樣

[{"latitude":"-7.285833","longitude":"112.725947"}, 
{"latitude":"-7.302902","longitude":"112.684648"}, 
{"latitude":"-7.332048","longitude":"112.669293"}, 
{"latitude":"-7.364344","longitude":"112.685177"}, 
{"latitude":"-7.384560","longitude":"112.717475"}, 
{"latitude":"-7.398474","longitude":"112.773600"}, 
{"latitude":"-7.417114","longitude":"112.729653"}, 
{"latitude":"-7.429452","longitude":"112.797426"}, 
{"latitude":"-7.444224","longitude":"112.787337"}, 
{"latitude":"-7.494794","longitude":"112.779152"}] 

我不不知道如何與json數據保持距離,請幫我解決我的問題,謝謝。

+0

也許你應該增加更多的細節。 您打算使用PHP解析JSON並將這些對象用作函數的輸入嗎? – gal242

回答

2

你需要先解碼的JSON:

<?php 

$data = json_decode('[{"latitude":"-7.285833","longitude":"112.725947"}, 
{"latitude":"-7.302902","longitude":"112.684648"}, 
{"latitude":"-7.332048","longitude":"112.669293"}, 
{"latitude":"-7.364344","longitude":"112.685177"}, 
{"latitude":"-7.384560","longitude":"112.717475"}, 
{"latitude":"-7.398474","longitude":"112.773600"}, 
{"latitude":"-7.417114","longitude":"112.729653"}, 
{"latitude":"-7.429452","longitude":"112.797426"}, 
{"latitude":"-7.444224","longitude":"112.787337"}, 
{"latitude":"-7.494794","longitude":"112.779152"}]', true); 

$r = distance($data[0]['latitude'], $data[0]['longitude'], $data[1]['latitude'], $data[1]['longitude'], "K") . " Kilometers<br>"; 
echo $r; 
?> 

會用你的方法對前2個LAT多頭。

+0

如果我有JSON數據超過100如果efisien使用這種方法 – Nugka

+0

@Rizka不知道我理解你的問題,但是你可以使用這種方法來100(或更多/更少)的值。看看'for','foreach'或'while' – Andreas

+0

@RizkaNugroho,我不確定你的數據來自哪裏或者你想如何使用它,但是正如Andreas所說,你可以循環訪問你的數據。您的數據大小限制將與您的PHP配置,但100應該不是一個問題 – CUGreen

0

我無法與CUGreens的答案競爭,因爲沒有太多其他方法來解碼json。
但我認爲可以在代碼中進行一些改進。
您的代碼始終輸出「x公里」。

我所做的就是使用return將單元作爲數組發送回主函數。
這也將保持數字和文本分開,所以你可以例如圍繞數字,仍然輸出文本。

function distance($lat1, $lon1, $lat2, $lon2, $unit) { 

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

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

$r = distance(32.9697, -96.80322, 29.46786, -98.53506, "K"); 
echo $r[0] . $r[1]; 

https://3v4l.org/vnRFv