Get driving distance between two points using Google Maps API

后端 未结 5 2171
Happy的楠姐
Happy的楠姐 2020-12-12 18:53

I\'m trying to get driving distance between two points using Google Maps API. Now, I have code which get direct distance:

This function get lat and

相关标签:
5条回答
  • 2020-12-12 19:13

    You can do this by using Google Distance Matrix API:

    // $details = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=Seattle&destinations=San+Francisco&mode=driving&sensor=false";
    
        //you can also pass latitude/longitude values in origins
    
    
       $details = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=41.43206,-81.38992&destinations=San+Francisco&mode=driving&sensor=false";
    
    
        $json = file_get_contents($details);
    
        $details = json_decode($json, TRUE);
    
        echo "<pre>"; print_r($details); echo "</pre>";
    

    Here is the link of Google Distance Matrix API :- https://developers.google.com/maps/documentation/distancematrix/?csw=1

    0 讨论(0)
  • 2020-12-12 19:15

    Distance matrix API will do job then no need to calculate coordinates by using address and then Distance!!

    Here is the API
    https://maps.googleapis.com/maps/api/distancematrix/json?origins=orginaddress&destinations=destinationaddress&key=YOUR_API_KEY

    PHP Code :

    $ch = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=orginaddress&destinations=destinationaddress&key=YOUR_API_KEY";
    $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);
    //print_( $response_a );
    
    0 讨论(0)
  • 2020-12-12 19:20

    OK, I found solution using distance matrix: https://developers.google.com/maps/documentation/distancematrix/#DistanceMatrixRequests

    This function get lat & lng from city, adress, province:

    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;
        }
    }
    

    This function calculate driving distance and travel time duration:

    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);
    }
    

    Usage:

    $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>';
    }
    

    Return:

    Distance: 11,2 km Travel time duration: 15 min

    0 讨论(0)
  • 2020-12-12 19:26

    You can try using Google Distance Matrix API. Here is a sample HTML, PHP code in bellow. Here you must change the 'YOUR_API_KEY' with your app key.

    <!DOCTYPE html>
    <html>
        <body>
            <form action="" method="post">
                <label>Origin:</label> <input type="text" name="o" placeholder="Enter Origin location" required> <br><br>
                <label>Destination:</label> <input type="text" name="d" placeholder="Enter Destination location" required> <br><br>
                <input type="submit" value="Calculate distance & time" name="submit"> <br><br>
            </form>
            <?php
                if(isset($_POST['submit'])){
                $origin = $_POST['o']; $destination = $_POST['d'];
                $api = file_get_contents("https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=".$origin."&destinations=".$destination."&key=YOUR_API_KEY");
                $data = json_decode($api);
            ?>
                <label><b>Distance: </b></label> <span><?php echo ((int)$data->rows[0]->elements[0]->distance->value / 1000).' Km'; ?></span> <br><br>
                <label><b>Travel Time: </b></label> <span><?php echo $data->rows[0]->elements[0]->duration->text; ?></span> 
    
            <?php } ?>
        </body>
    </html>
    
    0 讨论(0)
  • 2020-12-12 19:36

    This is the method I got. In it, you can enter any manual distance from sessions or database.

    $origin      = urlencode($_SESSION['source1']);
    $destination = urlencode($_SESSION['dest1']);
    
    $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=$origin&destinations=$destination&key=Your api key";
    
    $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);
    ?>
    

    Now the tough part was how to show distance. Well, with research, I got this answer:

    <div>
         <?php echo $response_a['rows'][0]['elements'][0]['distance']['text']; ?>
    </div>
    

    You can print this result anywhere. It's working for me.

    0 讨论(0)
提交回复
热议问题