-
-
Save TheoElia/e7d0d4f2d0cc711b29a44ea5e42a85eb to your computer and use it in GitHub Desktop.
Calculate distance between two location using Google Map API
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div> | |
<h2> | |
Orign Location | |
</h2> | |
</div> | |
<div id="locationField"> | |
<input id="originautocomplete" placeholder="Enter your address" onFocus="geolocate()" type="text"></input> | |
</div> | |
<div> | |
<h2> | |
Destination Location | |
</h2> | |
</div> | |
<div id="locationField"> | |
<input id="destinationautocomplete" placeholder="Enter your address" onFocus="geolocate()" type="text"></input> | |
</div> | |
<br> | |
<div> | |
<input type='button' value="Find travelled distance" onclick="CalculatedRecommededDistance()"></input> | |
</div> | |
<br> | |
<div> | |
<strong>Recommended Route Total Distance</strong> | |
</div> | |
<div id="outputRecommended"></div> | |
<div> | |
<strong>Longeest Route Total Distance</strong> | |
</div> | |
<div id="output"></div> | |
<!-- Replace the value of the key parameter with your own API key. --> | |
<script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=places&callback=initAutocomplete" async defer></script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This example displays an address form, using the autocomplete feature | |
// of the Google Places API to help users fill in the information. | |
// This example requires the Places library. Include the libraries=places | |
// parameter when you first load the API. For example: | |
// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> | |
var placeSearch, originautocomplete; | |
var componentForm = { | |
street_number: 'short_name', | |
route: 'long_name', | |
locality: 'long_name', | |
administrative_area_level_1: 'short_name', | |
country: 'long_name', | |
postal_code: 'short_name' | |
}; | |
function initAutocomplete() { | |
// Create the autocomplete object, restricting the search to geographical | |
// location types. | |
originautocomplete = new google.maps.places.Autocomplete( | |
/** @type {!HTMLInputElement} */ | |
(document.getElementById('originautocomplete')), { | |
types: ['geocode'] | |
}); | |
// Set initial restrict to the greater list of countries. | |
originautocomplete.setComponentRestrictions({ | |
'country': ['aus'] | |
}); | |
destinationautocomplete = new google.maps.places.Autocomplete( | |
(document.getElementById('destinationautocomplete')), { | |
types: ['geocode'] | |
}); | |
destinationautocomplete.setComponentRestrictions({ | |
'country': ['aus'] | |
}); | |
} | |
// Bias the autocomplete object to the user's geographical location, | |
// as supplied by the browser's 'navigator.geolocation' object. | |
function geolocate() { | |
if (navigator.geolocation) { | |
navigator.geolocation.getCurrentPosition(function(position) { | |
var geolocation = { | |
lat: position.coords.latitude, | |
lng: position.coords.longitude | |
}; | |
var circle = new google.maps.Circle({ | |
center: geolocation, | |
radius: position.coords.accuracy | |
}); | |
autocomplete.setBounds(circle.getBounds()); | |
}); | |
} | |
} | |
function CalculatedRecommededDistance() { | |
CalculateDistanceforAllAlternativeRoutes(); | |
var origin = document.getElementById('originautocomplete').value; | |
var destination = document.getElementById('destinationautocomplete').value; | |
var geocoder = new google.maps.Geocoder(); | |
var service = new google.maps.DistanceMatrixService(); | |
service.getDistanceMatrix({ | |
origins: [origin], | |
destinations: [destination], | |
travelMode: 'DRIVING', | |
unitSystem: google.maps.UnitSystem.METRIC, | |
avoidHighways: false, | |
avoidTolls: false, | |
avoidFerries: false | |
}, function(response, status) { | |
var originList = response.originAddresses; | |
var destinationList = response.destinationAddresses; | |
var outputDiv = document.getElementById('outputRecommended'); | |
outputDiv.innerHTML = ''; | |
//Display distance recommended value | |
for (var i = 0; i < originList.length; i++) { | |
var results = response.rows[i].elements; | |
for (var j = 0; j < results.length; j++) { | |
outputDiv.innerHTML += originList[i] + ' to ' + destinationList[j] + | |
': ' + results[j].distance.text + ' in ' + | |
results[j].duration.text + '<br>'; | |
} | |
} | |
}); | |
} | |
function CalculateDistanceforAllAlternativeRoutes() { | |
var directionsService = new google.maps.DirectionsService(); | |
var start = document.getElementById('originautocomplete').value; | |
var end = document.getElementById('destinationautocomplete').value; | |
var method = 'DRIVING'; | |
var request = { | |
origin: start, | |
destination: end, | |
travelMode: google.maps.DirectionsTravelMode[method], | |
provideRouteAlternatives: true, | |
unitSystem: google.maps.UnitSystem.METRIC, | |
optimizeWaypoints: true | |
}; | |
directionsService.route(request, function(response, status) { | |
var routes = response.routes; | |
var distances = []; | |
for (var i = 0; i < routes.length; i++) { | |
var distance = 0; | |
for (j = 0; j < routes[i].legs.length; j++) { | |
distance = parseInt(routes[i].legs[j].distance.value) + parseInt(distance); | |
//for each 'leg'(route between two waypoints) we get the distance and add it to | |
} | |
//Convert into kilometer | |
distances.push(distance / 1000); | |
} | |
//Get all the alternative distances | |
var maxDistance = distances.sort(function(a, b) { | |
return a - b; | |
}); | |
//Display distance having highest value. | |
var outputDiv = document.getElementById('output'); | |
outputDiv.innerHTML = Math.round(maxDistance[routes.length - 1]) + " KM"; | |
}); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Always set the map height explicitly to define the size of the div | |
* element that contains the map. */ | |
#map { | |
height: 100%; | |
} | |
/* Optional: Makes the sample page fill the window. */ | |
html, | |
body { | |
height: 100%; | |
margin: 0; | |
padding: 0; | |
} | |
</style><link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"><style>#locationField, | |
#controls { | |
position: relative; | |
width: 480px; | |
} | |
#autocomplete { | |
position: absolute; | |
top: 0px; | |
left: 0px; | |
width: 99%; | |
} | |
.label { | |
text-align: right; | |
font-weight: bold; | |
width: 100px; | |
color: #303030; | |
} | |
#address { | |
border: 1px solid #000090; | |
background-color: #f0f0ff; | |
width: 480px; | |
padding-right: 2px; | |
} | |
#address td { | |
font-size: 10pt; | |
} | |
.field { | |
width: 99%; | |
} | |
.slimField { | |
width: 80px; | |
} | |
.wideField { | |
width: 200px; | |
} | |
#locationField { | |
height: 20px; | |
margin-bottom: 2px; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment