Distance between two points

Calculate distance between two co-ordinates

by danharper

JavaScript

// thanks to:
// http://www.movable-type.co.uk/scripts/latlong.html

// convert numeric degress to radians
toRad = function (value) {
    return value * Math.PI / 180;
}

// simple distance calculation
// works fine for small distances
// http://en.wikipedia.org/wiki/Equirectangular_projection
Equirectangular = function(point1, point2) {
    var R = 6371; // earth radius in km
    var x = (toRad(point2.lon)-toRad(point1.lon)) *
            Math.cos((toRad(point1.lat)+toRad(point2.lat))/2);
    var y = (toRad(point2.lat)-toRad(point1.lat));
    return Math.sqrt(x*x + y*y) * R;
};

// complex distance calculation
// for greater distances involving curvature of Earth
// http://en.wikipedia.org/wiki/Haversine_formula
Haversine = function(point1, point2) {
    var R = 6371; // earth radius in km
    var dLat = toRad(point2.lat-point1.lat);
    var dLon = toRad(point2.lon-point1.lon);
    var lat1 = toRad(point1.lat);
    var lat2 = toRad(point2.lat);

    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
            Math.sin(dLon/2) * Math.sin(dLon/2) *
            Math.cos(lat1) * Math.cos(lat2);
       
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    return R * c;
};


// START HERE

pointOne = {
    lat: 51.5136,
    lon: -0.0983
};
    
pointTwo = {
    lat: 51.4778,
    lon: -0.0015
};

x = Equirectangular(pointOne, pointTwo);
y = Haversine(pointOne, pointTwo);


$('body').append('<p>' + JSON.stringify(pointOne));
$('body').append('<p>' + JSON.stringify(pointTwo));

$('body').append('<p><b>Equirectangular</b> ' + x);
$('body').append('<p><b>Haversine</b> ' + y);

$('body').append('<p><i>distances in km');