Когда Земля (или другое примерно сферическое тело, такое как Луна) моделируется как сфера, имеющая стандартный радиус, это называется ссылкой сферой. Точно так же, когда модель является уплощённым (облатным) эллипсоидом вращения со стандартной большой осью и стандартным обратным сплющиванием, малой осью или эксцентриситетом, она называется ссылкой эллипсоидом. Обе модели имеют сферическую форму, поэтому каждая из них может быть рассмотрена как тип опорного сфероида. 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
свойство.
Отчасти благодаря широкому использованию Глобальной системы позиционирования (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
также не определено.