使用Google Maps API获取两点之间的行驶距离

纽斯特

我正在尝试使用Google Maps API获得两点之间的行驶距离。现在,我有直接获得距离的代码:

此函数获取经纬度:

function get_coordinates($city, $street, $province)
{
    $address = urlencode($city.','.$street.','.$province);
    $url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=Poland";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $response_a = json_decode($response);
    $return = array('lat' => $response_a->results[0]->geometry->location->lat, 'long' => $long = $response_a->results[0]->geometry->location->lng);

    return $return;
}

此函数根据纬度和经度计算两点之间的距离:

function getDistanceBetweenPoints($lat1, $lon1, $lat2, $lon2) {
    $theta = $lon1 - $lon2;
    $miles = (sin(deg2rad($lat1)) * sin(deg2rad($lat2))) + (cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)));
    $miles = acos($miles);
    $miles = rad2deg($miles);
    $miles = $miles * 60 * 1.1515;
    $kilometers = $miles * 1.609344;
    return $kilometers;
}

此功能以公里为单位打印距离:

function get_distance($lat1, $lat2, $long1, $long2)
{
    /* These are two points in New York City */
    $point1 = array('lat' => $lat1, 'long' => $long1);
    $point2 = array('lat' => $lat2, 'long' => $long2);

    $distance = getDistanceBetweenPoints($point1['lat'], $point1['long'], $point2['lat'], $point2['long']);
    return $distance;
}

用法:

$coordinates1 = get_coordinates('Katowice', 'Korfantego', 'Katowicki');
$coordinates2 = get_coordinates('Tychy', 'Jana Pawła II', 'Tyski');

echo 'Distance: <b>'.round(get_distance($coordinates1['lat'], $coordinates2['lat'], $coordinates1['long'], $coordinates2['long']), 1).'</b> km';

但是这段代码获得直接的距离。我需要行车距离。如何使用Google Maps API获取行驶距离?

谢谢你的帮助!

纽斯特

好的,我找到了使用距离矩阵的解决方案:https : //developers.google.com/maps/documentation/distancematrix/#DistanceMatrixRequests

此功能可从城市,地址,省获得经纬度:

function get_coordinates($city, $street, $province)
{
    $address = urlencode($city.','.$street.','.$province);
    $url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=Poland";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $response_a = json_decode($response);
    $status = $response_a->status;

    if ( $status == 'ZERO_RESULTS' )
    {
        return FALSE;
    }
    else
    {
        $return = array('lat' => $response_a->results[0]->geometry->location->lat, 'long' => $long = $response_a->results[0]->geometry->location->lng);
        return $return;
    }
}

该函数计算行驶距离和行驶时间:

function GetDrivingDistance($lat1, $lat2, $long1, $long2)
{
    $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=pl-PL";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $response_a = json_decode($response, true);
    $dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
    $time = $response_a['rows'][0]['elements'][0]['duration']['text'];

    return array('distance' => $dist, 'time' => $time);
}

用法:

$coordinates1 = get_coordinates('Tychy', 'Jana Pawła II', 'Śląskie');
$coordinates2 = get_coordinates('Lędziny', 'Lędzińska', 'Śląskie');
if ( !$coordinates1 || !$coordinates2 )
{
    echo 'Bad address.';
}
else
{
    $dist = GetDrivingDistance($coordinates1['lat'], $coordinates2['lat'], $coordinates1['long'], $coordinates2['long']);
    echo 'Distance: <b>'.$dist['distance'].'</b><br>Travel time duration: <b>'.$dist['time'].'</b>';
}

返回:

距离:11,2 km行车时间:15分钟

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

php-使用Google Maps API获取两点之间的行驶距离并计算时间

在Ionic 2的Google Maps中计算两点之间的距离

使用Google Maps Android API v2在两点之间绘制路径

Android Google Maps绘制了两点之间的路径

如何在 JavaScript 中的两点之间画线 - Google Maps Api Route

使用Google Maps v3验证两点(纬度/经度或地址)服务器端之间的路线距离

使用Google Maps Api(JSON)获取两个位置之间的距离

使用距离公式计算两点之间的距离

如何在android google maps活动中显示两点之间的路径?

Openlayers - Turf.js 使用 EPSG:3857 获取两点之间的距离

Apache Spark使用squaredDistance的两点之间的距离

使用MYSQL查找两点之间的距离

使用经度计算两点之间的距离?

如何使用geosparql计算两点之间的距离

如何使用GeoDjango计算两点之间的实际距离?

使用Arduino计算两点之间的GPS距离

使用Google Maps API计算两个地址之间的距离

Google地图中两点之间的距离使用什么公式?

通过Bing Maps API以编程方式获取行驶距离

如何获取Google Direction API中两点之间的通行费数量?

Google Maps Directions API-市区内和市区外的行驶距离

WP8 HERE使用官方的HERE Maps应用在两点之间映射步行路线

如何使用Google Maps API获取KML的中心点

使用php的Google Maps Api

点和线之间的最短距离(Google Maps API问题?)

使用 Google Maps Distance Matrix API 获取两个地址之间的旅行时间

在Google Maps中的两个点之间获取方向,跨过特定的点

Java-Google Maps API-两个地址之间的距离

Python:使用两列计算两点坐标之间的距离