Опорные сфероиды

Когда Земля (или другое примерно сферическое тело, такое как Луна) моделируется как сфера, имеющая стандартный радиус, это называется ссылкой сферой. Точно так же, когда модель является уплощённым (облатным) эллипсоидом вращения со стандартной большой осью и стандартным обратным сплющиванием, малой осью или эксцентриситетом, она называется ссылкой эллипсоидом. Обе модели имеют сферическую форму, поэтому каждая из них может быть рассмотрена как тип опорного сфероида. Mapping Toolbox™ поддерживает несколько представлений для опорных сфероидов: referenceSphere, referenceEllipsoid, и oblateSpheroid объекты и старое представление, эллипсоидный вектор.

referenceSphere Объекты

При использовании строго сферической модели обычно следует использовать referenceSphere объект (хотя и оба referenceEllipsoid и oblateSpheroid может представлять совершенную сферу).

По умолчанию referenceSphere возвращает безразмерную сферу единичного радиуса:

referenceSphere
ans = 

referenceSphere with defining properties:

          Name: 'Unit Sphere'
    LengthUnit: ''
        Radius: 1

  and additional properties:

    SemimajorAxis
    SemiminorAxis
    InverseFlattening
    Eccentricity
    Flattening
    ThirdFlattening
    MeanRadius
    SurfaceArea
    Volume

Вы можете запросить конкретное тело по имени, и радиус будет в метрах по умолчанию:

earth = referenceSphere('Earth')
earth = 

referenceSphere with defining properties:

          Name: 'Earth'
    LengthUnit: 'meter'
        Radius: 6371000

  and additional properties:

    SemimajorAxis
    SemiminorAxis
    InverseFlattening
    Eccentricity
    Flattening
    ThirdFlattening
    MeanRadius
    SurfaceArea
    Volume

При необходимости можно сбросить модуль длины (и радиус будет изменен соответствующим образом):

earth.LengthUnit = 'kilometer'
earth = 

referenceSphere with defining properties:

          Name: 'Earth'
    LengthUnit: 'kilometer'
        Radius: 6371

  and additional properties:

    SemimajorAxis
    SemiminorAxis
    InverseFlattening
    Eccentricity
    Flattening
    ThirdFlattening
    MeanRadius
    SurfaceArea
    Volume

или укажите модуль длины во время конструкции:

referenceSphere('Earth','km')
ans = 

referenceSphere with defining properties:

          Name: 'Earth'
    LengthUnit: 'kilometer'
        Radius: 6371

  and additional properties:

    SemimajorAxis
    SemiminorAxis
    InverseFlattening
    Eccentricity
    Flattening
    ThirdFlattening
    MeanRadius
    SurfaceArea
    Volume

Любой модуль измерения длины, поддерживаемая validateLengthUnit может использоваться. Для большинства модулей измерения длины поддерживаются различные сокращения, см. validateLengthUnit полный список.

Одна вещь, чтобы отметить о referenceSphere это то, что отображаются только определяющие свойства, порядок уменьшить загромождение в командной строке. (Этот подход также сохраняет небольшое количество расчетов.) В частности, не упускайте из виду зависимые SurfaceArea и Volume свойства, даже если они не отображаются. Площадь поверхности сферической модели земли, например, легко получается через SurfaceArea свойство:

earth.SurfaceArea
ans =
   5.1006e+08

Этот результат в квадратных километрах, потому что LengthUnit свойство земли объекта имеет значение 'kilometer'.

При программировании с помощью Mapping Toolbox это может помочь знать, что referenceSphere фактически включает все геометрические свойства referenceEllipsoidи oblateSpheroid (SemimajorAxis, SemiminorAxis, InverseFlattening, Eccentricity, Flattening, ThirdFlattening, и MeanRadius, а также SurfaceArea, и Volume). Ни одно из этих свойств не может быть задано для referenceSphere, а некоторые имеют значения, которые фиксированы для всех сфер. Eccentricity всегда 0, для примера. Но они обеспечивают гибкое окружение для программирования, потому что любые геометрические расчеты, которые принимают referenceEllipsoid будет также выполняться правильно, если referenceSphere. Это тип полиморфизма, при котором различные классы поддерживают общие или сильно перекрывающиеся интерфейсы.

referenceEllipsoid Объекты

При использовании косого сфероида для представления Земли (или другого примерно сферического тела) следует обычно использовать referenceEllipsoid объект. Важное исключение происходит с определенными маломасштабными проекциями карты, многие из которых определены только на сфере. Однако все важные проекции, используемые для крупномасштабной работы, включая Transverse Mercator и Lambert Conformal Conic, определены как на эллипсоиде, так и на сфере.

Как referenceSphere, referenceEllipsoid возвращает безразмерную сферу единичного радиуса по умолчанию:

referenceEllipsoid
ans = 

referenceEllipsoid with defining properties:

                 Code: []
                 Name: 'Unit Sphere'
           LengthUnit: ''
        SemimajorAxis: 1
        SemiminorAxis: 1
    InverseFlattening: Inf
         Eccentricity: 0

  and additional properties:

    Flattening
    ThirdFlattening
    MeanRadius
    SurfaceArea
    Volume

Как правило, вы запрашиваете определенный эллипсоид по имени, что приводит к объекту со свойствами большой и малой осей в метрах. Например, следующее возвращает referenceEllipsoid с SemimajorAxis и InverseFlattening настройки свойств, которые соответствуют определяющим параметрам Geodetic Reference System 1980 (GRS 80).

grs80 = referenceEllipsoid('Geodetic Reference System 1980')
grs80 = 

referenceEllipsoid with defining properties:

                 Code: 7019
                 Name: 'Geodetic Reference System 1980'
           LengthUnit: 'meter'
        SemimajorAxis: 6378137
        SemiminorAxis: 6356752.31414036
    InverseFlattening: 298.257222101
         Eccentricity: 0.0818191910428158

  and additional properties:

    Flattening
    ThirdFlattening
    MeanRadius
    SurfaceArea
    Volume

В целом следует использовать ссылочный эллипсоид, соответствующий геодезической данной величине, на который ссылаются координаты данных. Например, эллипсоид GRS 80 задан для использования с координатами, привязанными к североамериканской данной величине 1983 года (NAD 83).

Как в случае referenceSphereпри необходимости можно сбросить модуль длины:

grs80.LengthUnit = 'kilometer'
grs80 = 

referenceEllipsoid with defining properties:

                 Code: 7019
                 Name: 'Geodetic Reference System 1980'
           LengthUnit: 'kilometer'
        SemimajorAxis: 6378.137
        SemiminorAxis: 6356.75231414036
    InverseFlattening: 298.257222101
         Eccentricity: 0.0818191910428158

  and additional properties:

    Flattening
    ThirdFlattening
    MeanRadius
    SurfaceArea
    Volume

или укажите модуль длины во время конструкции:

referenceEllipsoid('Geodetic Reference System 1980','km')
ans = 

referenceEllipsoid with defining properties:

                 Code: 7019
                 Name: 'Geodetic Reference System 1980'
           LengthUnit: 'kilometer'
        SemimajorAxis: 6378.137
        SemiminorAxis: 6356.75231414036
    InverseFlattening: 298.257222101
         Eccentricity: 0.0818191910428158

  and additional properties:

    Flattening
    ThirdFlattening
    MeanRadius
    SurfaceArea
    Volume

Любой модуль измерения длины, поддерживаемая validateLengthUnit может использоваться.

Отображение в командной строке включает четыре геометрических свойства: SemimajorAxis, SemiminorAxis, InverseFlattening, и Eccentricity. Любая пара этих свойств, пока, по крайней мере, один из них является длиной оси, достаточна, чтобы полностью задать скользящий сфероид; четыре свойства составляют взаимозависимый набор. Параметры InverseFlattening и Eccentricity как набора недостаточно для определения эллипсоида, поскольку оба являются безразмерными свойствами формы. Ни один из этих параметров не обеспечивает шкалу длины и, кроме того, взаимозависимы: ecc = sqrt((2 - f) * f).

В сложение существует пять зависимых свойств, которые не отображаются, в порядок уменьшить загромождение в командной строке: Flattening, ThirdFlattening, MeanRadius, SurfaceArea, и Volume. SurfaceArea и Volume работают так же, как и их referenceSphere аналоги. Чтобы продолжить предыдущий пример, площадь поверхности эллипсоида GRS 80 в квадратных километрах (потому что LengthUnit является 'kilometer'), легко получается следующим образом:

grs80.SurfaceArea
ans =
   5.1007e+08

Смотрите referenceEllipsoid страница с описанием для определений свойств формы, допустимых значений для Name свойство и информация о Code свойство.

Мировая геодезическая система 1984

Отчасти благодаря широкому использованию Глобальной системы позиционирования (GPS) NAVSTAR США, которая привязана к Всемирной геодезической системе 1984 (WGS 84), эталонный эллипсоид WGS 84 часто является подходящим выбором. Для удобства и скорости (получаемой путем обхода интерполяционного шага таблицы), это хорошая идея в этом случае использовать wgs84Ellipsoid функция, например,

wgs84 = wgs84Ellipsoid;

Предыдущая линия эквивалентна:

wgs84 = referenceEllipsoid('wgs84');

но печатать проще и быстрее запускать. Можно также задать модуль длины. wgs84Ellipsoid(lengthUnit), эквивалентно referenceEllipsoid('wgs84',lengthUnit), где lengthUnit - любое единичное значение, принятое validateLengthUnit функция.

Для примера следующие две команды показывают, что площадь поверхности эллипсоида 84 WGS чуть больше 5 x 10 ^ 14 квадратных метров:

s = wgs84Ellipsoid
s = 

referenceEllipsoid with defining properties:

                 Code: 7030
                 Name: 'World Geodetic System 1984'
           LengthUnit: 'meter'
        SemimajorAxis: 6378137
        SemiminorAxis: 6356752.31424518
    InverseFlattening: 298.257223563
         Eccentricity: 0.0818191908426215

  and additional properties:

    Flattening
    ThirdFlattening
    MeanRadius
    SurfaceArea
    Volume
s.SurfaceArea 
ans =    

   5.1007e+14 

Эллипсоидные векторы

Эллипсоидный вектор является просто двойником 2 на 1 вида: [semimajor_axis eccentricity]. В отличие от сфероидного объекта (любой образец referenceSphere, referenceEllipsoid, или oblateSpheroid), эллипсоидный вектор не является самодокументирующимся. Эллипсоидные векторы даже не являются самоидентифицирующимися. Вы должны знать, что данный вектор 2 на 1 действительно является эллипсоидным вектором, чтобы использовать его. Это представление не проверяет это semimajor_axis является реальным и положительным, например, вы должны сделать такие валидации для себя.

Многие функции тулбокса принимают эллипсоидные векторы как входные, но такие функции также принимают сфероидные объекты и, по только что заявленным причинам, сфероидные объекты рекомендованы по эллипсоидным векторам. В случае, если вы написали функцию от себя, которая требует эллипсоидного вектора в качестве входных данных, или получили такую функцию от кого-то другого, обратите внимание, что можно легко преобразовать любой сфероидный объект s в эллипсоидный вектор следующим образом:

[s.SemimajorAxis s.Eccentricity]

Это означает, что можно создать сфероидальный объект с помощью любого из трех конструкторов классов или wgs84Ellipsoid function, и передать результат в виде эллипсоидного вектора, если необходимо.

oblateSpheroid Объекты

oblateSpheroid - суперкласс referenceEllipsoid. Система координат oblateSpheroid объект прямо как referenceEllipsoid объект минус его Code, Name, и LengthUnit свойства. Фактически, главная роль oblateSpheroid класс должен обеспечивать чисто геометрические свойства и поведение, необходимые referenceEllipsoid класс.

Для большинства целей можно просто игнорировать это различие, и oblateSpheroid сам класс, как вопрос внутренней программной композиции. Никакого вреда не произойдет, потому что referenceEllipsoid объект может делать что угодно и использоваться где угодно, что oblateSpheroid может.

Однако можно использовать oblateSpheroid непосредственно при работе с эллипсоидным вектором, в котором отсутствует заданное имя или модуль длины. Для примера вычислите объем эллипсоида с большой осью 2000 года и эксцентриситетом 0,1, как показано на следующем.

e = [2000 0.1];
s = oblateSpheroid;
s.SemimajorAxis = e(1);
s.Eccentricity = e(2)
s.Volume
s = 

oblateSpheroid with defining properties:

        SemimajorAxis: 2000
        SemiminorAxis: 1989.97487421324
    InverseFlattening: 199.498743710662
         Eccentricity: 0.1

  and additional properties:

    Flattening
    ThirdFlattening
    MeanRadius
    SurfaceArea
    Volume


ans =

   3.3342e+10

Конечно, поскольку модуль длины e не задано, модуль измерения s.Volume также не определено.