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-by-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 -на 2. pt1 эквивалентно [lat1 lon1] когда lat1 и lon1 являются векторы-столбцы.

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

Второй набор координат точки, заданный как числовая матрица N -на 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' - Расстояния линии Rhumb вычисляются либо на сфере, либо на эллипсоиде.

Типы данных: 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