如何与 json 保持距离?



Hy,我尝试从 100 多个点拉开距离。我在 php 中使用函数距离来保持距离,但我不知道与 json 保持距离这是我的代码PHP

<?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数据保持距离,请帮助我解决我的问题,谢谢。

您需要先解码您的 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 个纬度长度上使用您的方法。

我无法与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

最新更新