@@ -102,7 +102,7 @@ function listFeatures(call) {
102
102
103
103
/**
104
104
* Calculate the distance between two points using the "haversine" formula.
105
- * This code was taken from http://www.movable-type.co.uk/scripts/latlong .html.
105
+ * The formula is based on http://mathforum.org/library/drmath/view/51879 .html.
106
106
* @param start The starting point
107
107
* @param end The end point
108
108
* @return The distance between the points in meters
@@ -111,21 +111,18 @@ function getDistance(start, end) {
111
111
function toRadians ( num ) {
112
112
return num * Math . PI / 180 ;
113
113
}
114
- var lat1 = start . getLatitude ( ) / COORD_FACTOR ;
115
- var lat2 = end . getLatitude ( ) / COORD_FACTOR ;
116
- var lon1 = start . getLongitude ( ) / COORD_FACTOR ;
117
- var lon2 = end . getLongitude ( ) / COORD_FACTOR ;
118
- var R = 6371000 ; // metres
119
- var φ1 = toRadians ( lat1 ) ;
120
- var φ2 = toRadians ( lat2 ) ;
121
- var Δφ = toRadians ( lat2 - lat1 ) ;
122
- var Δλ = toRadians ( lon2 - lon1 ) ;
123
-
124
- var a = Math . sin ( Δφ / 2 ) * Math . sin ( Δφ / 2 ) +
125
- Math . cos ( φ1 ) * Math . cos ( φ2 ) *
126
- Math . sin ( Δλ / 2 ) * Math . sin ( Δλ / 2 ) ;
114
+ var R = 6371000 ; // earth radius in metres
115
+ var lat1 = toRadians ( start . getLatitude ( ) / COORD_FACTOR ) ;
116
+ var lat2 = toRadians ( end . getLatitude ( ) / COORD_FACTOR ) ;
117
+ var lon1 = toRadians ( start . getLongitude ( ) / COORD_FACTOR ) ;
118
+ var lon2 = toRadians ( end . getLongitude ( ) / COORD_FACTOR ) ;
119
+
120
+ var deltalat = lat2 - lat1 ;
121
+ var deltalon = lon2 - lon1 ;
122
+ var a = Math . sin ( deltalat / 2 ) * Math . sin ( deltalat / 2 ) +
123
+ Math . cos ( lat1 ) * Math . cos ( lat2 ) *
124
+ Math . sin ( deltalon / 2 ) * Math . sin ( deltalon / 2 ) ;
127
125
var c = 2 * Math . atan2 ( Math . sqrt ( a ) , Math . sqrt ( 1 - a ) ) ;
128
-
129
126
return R * c ;
130
127
}
131
128
0 commit comments