参考椭球体的比较
当地球(或其他大致呈球形的物体,如月球)被建模为一个具有标准半径的球体时,该球体被称为参考球。同样地,当该模型是一个扁平(扁平化)的旋转椭球体,且具有标准长半轴和标准扁平化倒数、短半轴或偏心率时,则称为参考椭球体。这两种模型均为椭球体,因此均可视为一种参考椭球体。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
该结果的单位是平方公里,因为对象 earth 的 LengthUnit 属性值为 'kilometer'。
在使用 Mapping Toolbox 进行编程时,需要注意 referenceSphere 实际上包含了 referenceEllipsoid 和 oblateSpheroid 的所有几何属性(SemimajorAxis、SemiminorAxis、InverseFlattening、Eccentricity、Flattening、ThirdFlattening、以及 MeanRadius、SurfaceArea 和 Volume)。这些属性均无法在 referenceSphere 上设置,其中某些属性的值对所有球体而言都是固定的。例如,Eccentricity 始终等于 0。但它们为编程提供了灵活的环境,因为任何接受 referenceEllipsoid 的几何计算,在给定 referenceSphere 时也能正常运行。这是一种多态形式,其中不同的类实现了共同的或高度重叠的接口。
referenceEllipsoid 对象
当使用椭球体来表示地球(或其他大致呈球形的物体)时,通常应使用 referenceEllipsoid 对象。某些小尺度的地图投影存在一个重要的例外,其中许多仅在球面上定义。然而,用于大规模工作的所有重要投影法,包括横墨卡托投影和兰伯特等角圆锥投影,既定义在椭球体上,也定义在球体上。
与 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 属性设置与 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
有关形状属性的定义、Name 属性的允许值以及 Code 属性的信息,请参阅 referenceEllipsoid 参考页面。
1984 年世界大地测量系统
部分由于美国 NAVSTAR 全球定位系统 (GPS) 的广泛应用——该系统与 1984 年世界大地测量系统 (WGS 84) 相关联——因此 WGS 84 参考椭球体通常是合适的选择。出于方便和提高速度(通过跳过表查找步骤来实现)的考虑,在这种情况下,最好使用 wgs84Ellipsoid 函数,例如:示例:
wgs84 = wgs84Ellipsoid;
上一行等同于:
wgs84 = referenceEllipsoid('wgs84');但这样输入更方便,运行也更快。您还可以指定长度单位。wgs84Ellipsoid(lengthUnit) 与 referenceEllipsoid('wgs84',lengthUnit) 等效,其中 lengthUnit 是 validateLengthUnit 函数所接受的任意值。
例如,以下两条命令显示,WGS 84 椭球体的表面积略超过 5 × 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
Volumes.SurfaceArea
ans = 5.1007e+14
椭球向量
椭球向量只是一个 2×1 的双精度数组,形式为:[semimajor_axis eccentricity]。与椭球体对象(任何 referenceSphere、referenceEllipsoid 或 oblateSpheroid 的实例)不同,椭球体向量并不具备自描述性。椭球向量甚至无法自我识别。要想利用某个给定的 2×1 向量,必须先确定它确实是一个椭球向量。此表示法并未验证 semimajor_axis 是否为实数且为正数,例如,此类验证需要您自行进行。
许多工具箱函数接受椭球体向量作为输入,但这些函数同样接受椭球体对象;基于上述原因,建议优先使用椭球体对象而非椭球体向量。如果您编写了一个需要椭球体向量作为输入的函数,或者从他人那里获得了一个这样的函数,请注意,您可以通过以下方式轻松地将任何椭球体对象 s 转换为椭球体向量:
[s.SemimajorAxis s.Eccentricity]
这意味着,您可以使用这三个类构造函数中的任意一个,或者使用 wgs84Ellipsoid 函数来构造一个椭球体对象,并在必要时以椭球体向量的形式返回结果。
oblateSpheroid 对象
oblateSpheroid 是 referenceEllipsoid 的超类。一个 oblateSpheroid 对象就相当于一个 referenceEllipsoid 对象,但去掉了其 Code、Name 和 LengthUnit 属性。事实上,oblateSpheroid 类的主要作用是提供 referenceEllipsoid 类所需的纯几何属性与行为。
在大多数情况下,您可以直接忽略这一区别,以及 oblateSpheroid 类本身——毕竟这只是软件内部结构的问题。这不会造成任何问题,因为 referenceEllipsoid 对象可以执行 oblateSpheroid 对象能做的一切操作,并且可以在 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 的单位同样未指定。