Recently used in accordance with the latitude and longitude calculation of the Earth's surface two distance between the formula, and then use JS to achieve a bit.

There are probably two ways to calculate the distance between two points on the Earth's surface.

The first is the default Earth is a smooth spherical surface, and then calculate the distance between any two points, this distance is called the Great Circle distance (the great Circle Distance).

The formula is as follows:

Use JS to achieve the following:

Code highlighting produced by Actipro Codehighlighter (freeware)

http://www.CodeHighlighter.com/

--> var earth_radius = 6378137.0; Unit m

var PI = Math.PI;

function Getrad (d) {

return d * pi/180.0;

}

/* *

* Caculate the Great circle distance

* @param {Object} LAT1

* @param {Object} lng1

* @param {Object} lat2

* @param {Object} lng2

*/

function Getgreatcircledistance (lat1,lng1,lat2,lng2) {

var radLat1 = Getrad (LAT1);

var radLat2 = Getrad (LAT2);

var a = RADLAT1-RADLAT2;

var B = Getrad (lng1)-Getrad (LNG2);

var s = 2 * Math.asin (MATH.SQRT (Math.pow (Math.sin (A/2), 2) + Math.Cos (RADLAT1) *math.cos (RADLAT2) *math.pow (Math.sin (b /2), 2));

s = S * earth_radius;

s = Math.Round (S * 10000)/10000.0;

return s;

}

This formula is correct in most cases, only when dealing with the relative points on the sphere, there is a problem, there is a modified formula, because there is no need to find out, can be found on the wiki.

Of course, we all know that the earth is not really a ball body, but ellipsoid, so with the following formula:

Code highlighting produced by Actipro Codehighlighter (freeware)

http://www.CodeHighlighter.com/

-->

/* *

* Approx distance between two points on the earth ellipsoid

* @param {Object} LAT1

* @param {Object} lng1

* @param {Object} lat2

* @param {Object} lng2

*/

function Getflatterndistance (lat1,lng1,lat2,lng2) {

var f = Getrad ((lat1 + lat2)/2);

var g = Getrad ((LAT1-LAT2)/2);

var L = Getrad ((lng1-lng2)/2);

var sg = Math.sin (g);

var sl = Math.sin (l);

var sf = Math.sin (f);

var s,c,w,r,d,h1,h2;

var a = Earth_radius;

var fl = 1/298.257;

SG = SG * SG;

SL = SL * SL;

SF = SF * SF;

s = sg * (1-SL) + (1-SF) * SL;

c = (1-SG) * (1-SL) + SF * SL;

W = Math.atan (math.sqrt (s/c));

R = math.sqrt (S * c)/w;

D = 2 * w * A;

H1 = (3 * r-1)/2/c;

H2 = (3 * r + 1)/2/s;

Return d * (1 + FL * (H1 * SF * (1-SG)-h2 * (1-SF) * sg));

}

The formula calculates the result to be better than the first, and of course the longitude of the final result is actually dependent on the precision of the incoming coordinates.