我在PHP
中有一个函数,可以计算两个地方之间的距离。
这是 php 代码:
function distance($lat1, $lon1, $lat2, $lon2) {
$earth_radius = 6371;
$delta_lat = $lat2 - $lat1 ;
$delta_lon = $lon2 - $lon1 ;
$distance = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($delta_lon)) ;
$distance = acos($distance);
$distance = rad2deg($distance);
$distance = $distance * 60 * 1.1515;
$distance = round($distance, 4);
return $distance = $distance * 1.609344;
}
它给出了很好的25 km
计算,但大约500 km
计算是错误的。我的另一个问题是it really giving miles or kilometers?
例如,这个地图给出了从Morbi
到Surat
的443 km
距离,但该函数给了我一个274 km
的结果
好的,现在很清楚你想要道路距离,我们可以给你一个正确的答案,要得到结果,你可以使用 Google API 距离矩阵,你有不同的选项和参数,你必须找出最适合你的,请注意有一些限制(对于免费版):
<<
The Distance Matrix API has the following limits in place:
100 elements per query.
100 elements per 10 seconds.
2 500 elements per 24 hour period.
>>
但是,为了回答您的问题,我编写了一个简单的PHP脚本,该脚本获取XML文件并使用SimpleXMLElement解析距离/持续时间...
<?php
$start = "morbi"; // You can either set lon and lat separated with a comma ex: 22.814162,70.834351
$destination = "surat";
$mode = "driving"; // Different modes: driving,walking,bicycling (be aware that some of the modes aren't available for some poi's ...)
$xml = file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/xml?origins=$start&destinations=$destination&mode=$mode&language=en-EN&sensor=false");
$data = new SimpleXMLElement($xml);
$distance = $data->row->element->distance->text;
$time = $data->row->element->duration->text;
if(empty($distance) OR empty($time)){
echo "Oops, this mode ($mode) isn't available ...";
}else{
echo "The distance between $start and $destination is $distance and the travel duration while $mode is $time .";
}
?>
希望这对:)有帮助