distance

Расстояние между точками на сфере или эллипсоиде

Описание

[arclen,az] = distance(lat1,lon1,lat2,lon2) вычисляет длины, arclen, из больших круговых дуг, соединяющих пары точек на поверхности сферы. В каждом случае принята короче (незначительная) дуга. Функция может также вычислить азимуты, az, из второй точки в каждой паре относительно первого (то есть, угол, под которым дуга пересекает меридиан, содержащий первую точку).

[arclen,az] = distance(lat1,lon1,lat2,lon2,ellipsoid) вычисляет геодезическую длину дуги и азимут, принимающий, что точки лежат на опорном эллипсоиде, заданном входом ellipsoid.

пример

[arclen,az] = distance(pt1,pt2) принимает массивы координаты N-2 пар точек, pt1 и pt2, та широта хранилища координирует в первом столбце и координатах долготы во втором столбце.

Этот синтаксис эквивалентен arclen = distance(pt1(:,1),pt1(:,2),pt2(:,1),pt2(:,2)).

[arclen,az] = distance(pt1,pt2,ellipsoid) вычисляет геодезическую длину дуги и азимут, принимающий, что точки лежат на опорном эллипсоиде, заданном входом ellipsoid.

[arclen,az] = distance(___,units) также задает угловые модули координат широты и долготы для любого из предыдущих синтаксисов.

[arclen,az] = distance(track,___) также задает, является ли дорожка круговым/геодезическим великим или дуга локсодромы для какого-либо из предыдущих синтаксисов.

Примеры

Найдите различие в расстоянии вдоль двух дорожек

Используя 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

Входные параметры

свернуть все

Первый набор широты или долготы координирует в виде числового скаляра или числового массива. Координаты описываются в градусах если units задан как 'radians'.

Типы данных: single | double

Второй набор широты или долготы координирует в виде числового скаляра или числового массива. Координаты описываются в градусах если units задан как 'radians'.

Типы данных: single | double

Первый набор точки координирует в виде N-by-2 числовую матрицу. pt1 эквивалентно [lat1 lon1] когда lat1 и lon1 вектор-столбцы.

Типы данных: single | double

Второй набор точки координирует в виде N-by-2 числовую матрицу. pt2 эквивалентно [lat2 lon2] когда lat2 и lon2 вектор-столбцы.

Типы данных: single | double

Опорный эллипсоид в виде referenceSphere, referenceEllipsoid, или oblateSpheroid объект или двухэлементный вектор из формы [semimajor_axis eccentricity].

Пример: referenceEllipsoid('GRS80')

Пример: [6378.137 0.0818191910428158]

Угловые модули широты и долготы координируют в виде 'degrees' или 'radians'.

Типы данных: char

Отследите в виде одного из следующих векторов символов.

  • 'gc' — Большие круговые расстояния вычисляются на сфере, и геодезические расстояния вычисляются на эллипсоиде.

  • 'rh' — Расстояния локсодромы вычисляются или на сфере или на эллипсоиде.

Типы данных: char

Выходные аргументы

свернуть все

Длина дуги, возвращенная в виде числа или массива одного размера с входными массивами широты и долготы, lat1, lon1, lat2 и lon2. Когда координаты заданы с помощью координатных массивов pt1 и pt2, затем arclen числовой вектор из длины N.

  • Когда ellipsoid не задан, arclen описывается в градусах или радианы дуги, сопоставимой со значением units.

  • Когда ellipsoid задан, arclen, описывается в тех же единицах длины как большая полуось эллипсоида.

Типы данных: double

Азимут второй точки в каждой паре относительно первого, возвращенного в виде числа или массива одного размера с входными массивами широты и долготы, lat1, lon1, lat2 и lon2. Когда координаты заданы с помощью координатных массивов pt1 и pt2, затем arclen числовой вектор из длины N. az измеряется по часовой стрелке от севера.

Типы данных: single | double

Советы

  • Размер нескалярных координат широты и долготы, 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(...)

Представлено до R2006a