I am trying to get driving distance between two longitude latitude points on rails, geocoder or any other efficient way.. Is there?
The Google Maps API v3 documentation specifies that either the origin or the destination (or waypoints) can be either an address or a google.maps.LatLng. To get the driving distance between two longitude/latitude points, pass them in the request as google.maps.LatLng objects.
related question: total distance and time for all waypoints in google maps v3
code snippet (based off the example in the documentation):
function initMap() {
var directionsService = new google.maps.DirectionsService;
var directionsDisplay = new google.maps.DirectionsRenderer;
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 7,
center: {
lat: 41.85,
lng: -87.65
}
});
directionsDisplay.setMap(map);
// New York, NY, USA (40.7127837, -74.0059413)
var start = new google.maps.LatLng(40.7127837, -74.0059413);
//Baltimore, MD, USA (39.2903848, -76.6121893)
var end = new google.maps.LatLng(39.2903848, -76.6121893);
calculateAndDisplayRoute(start, end, directionsService, directionsDisplay);
}
function calculateAndDisplayRoute(start, end, directionsService, directionsDisplay) {
directionsService.route({
origin: start,
destination: end,
travelMode: google.maps.TravelMode.DRIVING
}, function(response, status) {
if (status === google.maps.DirectionsStatus.OK) {
var totaldistance = 0;
var route = response.routes[0];
// display total distance information.
for (var i = 0; i < route.legs.length; i++) {
totaldistance = totaldistance + route.legs[i].distance.value;
}
document.getElementById('distance').innerHTML += "<p>total distance is " + (totaldistance / 1000).toFixed(2) + " km</p>";
directionsDisplay.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="distance"></div>
<div id="map"></div>
var R = 6371;
var dLat = toRad(lat2-lat1);
var dLon = toRad(lon2-lon1);
var dLat1 = toRad(lat1);
var dLat2 = toRad(lat2);
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(dLat1) * Math.cos(dLat1) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
alert(d);
function toRad(Value) {
/** Converts numeric degrees to radians */
return Value * Math.PI / 180;
If you don't want to rely on the (amazingly crafted) Google APIs or are bound to API limits I just discovered another option: OpenStreetMap's osrm-project.
In my case, I needed to retrieve the nearest driving distance of almost 200,000 houses to a certain point of interest.
来源:https://stackoverflow.com/questions/14131708/get-driving-distance-between-two-longitude-latitude-points