my-programming-tutorials-logo

My Programming Tutorials

Find Distance Between two Addresses using Google API and PHP

Last updated on by , 28 comments

In this article, you are going to learn that, how to create a distance calculator sort of module which can find distance between two addresses. We are going to use google map API and PHP to accomplish this task.

View Demo

The distance calculator module we are going to develop here is basically an API provided by The Google itself. This API can measure the driving distance between two location as well as Travel Time. You can also measure distance between cities using this module.

The format for origin location and destination location could be one of the following:

  • place name (e.g. Bhopal, India)
  • ZIP code (e.g. 462016)
  • latitude/longitude coordinates (e.g. 23.77xxx, 77.30xxx)

to know more about permissible formats please visit Google’s official documentation page.

Find Distance Between two Addresses

Step 1:- Get a google’s API Key from https://developers.google.com/maps/documentation/distance-matrix/get-api-key.

click on GET A KEY button

find distance between two addresses

now click on +create a new project and enter your project name then click on ENABLE API button

distance calculator api

then after you are finally prompted to a popup window containing your API KEY.

calculate distance between two cities

Step 2: source code


<!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>

replace YOUR_API_KEY with your API KEY (Step 1) in above code.

We have covered find distance between two addresses module in this article, to get latest updates please subscribe our blog and follow us on Facebook. Don’t forget to share this article with your friends.

You may also like

Find Distance Between two Addresses using Google API and PHP
4 (80%) 6 votes

28 Responses
  1. harris says:

    Well great information paritosh. explained in detail. Thanks for sharing.

  2. Christos says:

    Very good explaining and clean code, well done. I wish you could consider some demo preview…

    Keep us posted…

  3. Hey just wanted to give you a quick heads up. The words in your article seem
    to be running off the screen in Safari. I’m not sure if this is
    a format issue or something to do with browser compatibility but I thought I’d post to let you
    know. The design look great though! Hope you get the problem solved soon. Many thanks

  4. Alex says:

    Nice, but is there a way to get suggestion when you type the address? For instance if you type Paris to see: Paris, France, Paris Museum….?

    • Paritosh Pandey says:

      you should go ahead and should take a look at the demo, actually it do have this suggestion feature already.

      • ChriStef says:

        Thanks for your demo, actually auto-suggestion its not working, maybe because not https?

        • Paritosh Pandey says:

          yeah sorry its my bad, here is autocomplete address search module
          https://www.myprogrammingtutorials.com/autocomplete-address-search-module-google-api-php.html

  5. Vinay nvd says:

    That was a great explanation, I have to develop such kind of application in my website. Thanks alot for sharing.

  6. tahir says:

    Notice: Undefined offset: 0 in C:\xampp\htdocs\bus\api.php on line 19

    Notice: Trying to get property ‘elements’ of non-object in C:\xampp\htdocs\bus\api.php on line 19

    Notice: Trying to get property ‘distance’ of non-object in C:\xampp\htdocs\bus\api.php on line 19

    Notice: Trying to get property ‘value’ of non-object in C:\xampp\htdocs\bus\api.php on line 19
    0 Km

    #error of ur code

    • Paritosh Pandey says:

      Hello @tahir,

      its my bad I’ve not used exceptions.

      please print the $api variable, I think it is not returning the required response.

      maybe it is because of providing an invalid API_KEY.

  7. manik says:

    I am copied your code carefully but it’s not working

    • Paritosh Pandey says:

      what error exactly you’re getting, please try to share that errors, so that I can help you out.

  8. Tin says:

    Thank you so much for this! You saved me a while of research/”reverse-engineering” the API
    Best regards

  9. Thibaut says:

    Hi,
    Thanks for the code

    But I can’t make it working even on the demo page.
    I try few adress and gps coordinate on your demo page but it always return 0 km.

    Does your demo page still working ?

    Thankss

  10. Ridhwan says:

    Distance: rows[0]->elements[0]->distance->value / 1000).’ Km’; ?>

    Travel Time: rows[0]->elements[0]->duration->text; ?>

    Sorry, please help me

  11. TANVIR HASAN says:

    Dear,
    First of all thanks a lot for your post.
    I try to your code and it working, but have a problem. problem is when i add to API, 1st time it’s working but not working 2nd time. so what can i do now. I am a student. it’s my University project. please help me.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.