2016-01-25 3 views

ответ

0

Простой случай: Экспресс лат и длинные значения в десятичной форме и использовать стандартную формулу расстояния геометрии, если абонент находится менее чем в 100 милях от позиции B. Расстояние = sqrt ((lat1-lat2)^2 - (long1-long2)^2).

Более общий случай: используйте формулы haversine, используя большой круг для вычисления расстояний от точек на сфере для более точных измерений, если позиция B может быть континентом или двумя вдали от абонента. Назовем абонентскую позицию A и скажем и скажем, что он находится на lat [a], long [a], а фиксированная точка B находится на lat [b], long [b]. Пусть r представляет радиус земли (около 3961 миль).

distance = 2 * r * arcsin (sqrt (sin^2 ((lat [b] -lat [a])/2) + cos (lat [a]) * cos (lat [b]) * sin^2 ((long [b] -long [a])/2)))

Если вы укажете r в милях, ваш ответ выйдет в милях. Если вы используете километры, используйте 6373 для хорошего количества радиуса Земли, и, конечно, ответ выйдет в километрах.

Точный случай: формула гаверсина не даст идеального ответа, потому что земля не является идеальной сферой. Даже за исключением гор и каньонов земля имеет больший радиус на экваторе, чем на полюсах. Радиус на экваторе равен экватору около 3963 миль, а у полюсов - около 3950 миль. Таким образом, вам действительно нужно разработать собственную таблицу поиска (или заимствовать одну из карт Google), если вы измеряете расстояния на полпути по всему земному шару, и вы должны быть точными.

Формула haversine будет точной до половины процентного пункта. В 1000 миль ваш ответ будет точным в пределах 5 миль. формула

гаверсинуса: https://en.wikipedia.org/wiki/Haversine_formula

Радиус земли: https://en.wikipedia.org/wiki/Earth_radius

Смежные вопросы