Да, проблема в том, чтобы добавить и вычесть одно и то же.Поскольку toRad()
является просто умножением, оно ассоциативно соответствует + и - и, следовательно,
var dLat = toRad(location3.lat()-location2.lat())
+ toRad(location2.lat()-location1.lat());
точно так же, как
var dLat = toRad(location3.lat()-location1.lat());
, так что в итоге вы рассчитываете прямое расстояние междупервая и последняя точка.
Если вы используете JavaScript API Карт Google V3, вы можете просто загрузить Geometry Library и сделать это:
var indirect_distance =
google.maps.geometry.spherical.computeDistanceBetween(location1, location2)
+ google.maps.geometry.spherical.computeDistanceBetween(location2, location3);