exponenta event banner

расстояние

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

Описание

[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-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

Track, указанный как один из следующих векторов символов.

  • '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