Расстояние между точками на сфере или эллипсоиде
[arclen,az] = distance(lat1,lon1,lat2,lon2)
[arclen,az] = distance(lat1,lon1,lat2,lon2,ellipsoid)
[arclen,az] = distance(pt1,pt2)
[arclen,az] = distance(pt1,pt2,ellipsoid)
[arclen,az] = distance(___,units)
[arclen,az] = distance(track,___)
[
вычисляет длины, arclen
,az
] = distance(lat1
,lon1
,lat2
,lon2
)arclen
, больших круговых дуг, соединяющих пары точек на поверхности сферы. В каждом случае принята короче (незначительная) дуга. Функция может также вычислить азимуты, az
, второй точки в каждой паре относительно первого (то есть, угол, под которым дуга пересекает меридиан, содержащий первую точку).
Используя обозначение pt1,pt2
, найдите расстояние от Норфолка, Вирджиния (37°N, 76°W), к Мысу Св. Винсент, Португалия (37°N, 9°W), недалеко от Гибралтарского пролива. Расстояние между этими двумя точками зависит от выбранного значения track
.
arclen = distance('gc',[37,-76],[37,-9])
arclen = 52.3094
arclen = distance('rh',[37,-76],[37,-9])
arclen = 53.5086
Различием между этими двумя дорожками являются 1,1992 градуса, или приблизительно 72 морских мили. Это представляет приблизительно 2% общего расстояния прохождения. Компромисс - то, что за счет тех 72 миль, целая поездка может быть совершена на локсодроме с фиксированным курсом 90º, должный восток, в то время как в порядке следовать за более коротким большим круговым путем, курс должен изменяться постоянно.
На меридиане и на Экваторе, совпадают большие круги и локсодромы, таким образом, расстояния являются тем же самым. Например,
% Great circle distance
arclen = distance(37,-76,67,-76)
arclen = 30.0000
% Rhumb line distance arclen = distance('rh',37,-76,67,-76)
arclen = 30.0000
Размер нескалярных координат широты и долготы, lat1
, lon1
, lat2
, и lon2
, должен быть сопоставимым. Когда дали комбинация скаляра и входных параметров массивов, функция distance
автоматически расширяет скалярные входные параметры, чтобы совпадать с размером массивов.
Чтобы выразить вывод arclen
как длину дуги или в степенях или в радианах, не используйте аргумент ellipsoid
. Это возможно только на сфере. Если ellipsoid
предоставляется, arclen
является расстоянием, выраженным в тех же модулях как полуглавная ось эллипсоида. Задайте ellipsoid
как [R 0]
, чтобы вычислить arclen
как расстояние на сфере радиуса R
с arclen
, имеющим те же модули как R
.
Расчеты расстояния для геодезии медленно ухудшаются с увеличивающимся расстоянием и могут потерпеть неудачу для точек, которые являются почти диаметрально противоположными, а также когда обе точки очень близко к Экватору. Кроме того, для вычислений на эллипсоиде, существует небольшой, но конечный входной пробел, состоя из пар местоположений, в которых и точки являются почти диаметрально противоположными и оба падения точек близко к (но не точно на) Экватор. В этом случае предупреждение выдано, и и arclen
и az
установлены в NaN
для “проблемных пар”.
Расстояние между двумя точками может быть вычислено двумя способами. Для больших кругов (на сфере) и геодезия (на эллипсоиде), расстояние является самым коротким поверхностным расстоянием между двумя точками. Для локсодром расстояние измеряется вдоль локсодромы, проходящей через две точки, который не является, в целом, самым коротким поверхностным расстоянием между ними.
Когда необходимо вычислить и расстояние и азимут для той же пары (пар) точки, более эффективно сделать так с одним вызовом distance
. Таким образом, используйте
[arclen az] = distance(...);
arclen = distance(...) az = azimuth(...)