(本文根据MATLAB 2012A Mapping toolbox帮助文档理解整理得到,不忠于原文,意会翻译)

1 球面坐标(Spherical Coordinates)

1.1 球、球体和大地水准面(Spheres, Spheroids, and Geoids)

和地学数据打交道,就要了解必要的地理学(geographic)和大地测量学(geodetic)的概念。比如,地理学概念包括地理坐标,平面坐标;大地测量学概念包括椭球体,大地测量基准(datums)等。

尽管地球是圆的,但他并非完美球体,而是一个略扁的椭球体。对于大尺度地图而言(就是小比例尺的),这点差异几乎可以忽略不计,因此可以把地球看做是球体。然而,对于精确的大比例尺地图,就需要认真对待地球是椭球体这一事实。地球椭球体模型是一个很基本的概念,比如你在绘制高精度卫星或航空影像图,或者使用GPS系统时,都需要明确地球椭球体的概念。

1.2 大地水准面和椭球面(Geoid and Ellipsoid)

大地水准面是地球形状的近似逼近,相当于重力场等位面,与海平面相当。大地水准面是一个近似的扁椭圆,但由于重力场在局部的波动,此面也相对有所调整。具体信息参见“参考椭球体”一节。

load geoid; load coast
figure; axesm robinson
geoshow(geoid,geoidlegend,'DisplayType','texturemap')
colorbar('southoutside')
geoshow(lat,long,'color','k')

运行上述代码,获得大地水准面的图像。

大地水准面的形状对于某些计算很重要,比如卫星轨道的计算,但并不是所有地图绘制都需要考虑。尽管如此,了解大地水准面的信息有时候还是很必要的,比如你想对比从平均海平面计算的高程和GPS测量出的高程。大地水准面表示也是基准定义中固有的。

大地水准面的定义有好几种方法。常见的是给出半长轴和半短轴,也可以指定半长轴和反扁率(inverse flattening )(如上所述,地球的反扁率为1/300)或偏心率(eccentricity.)表示。无论使用哪种参数,只要包含轴长度,椭球体就是确定的,其他参数都可计算得出。椭球体参数如下图所示:

 

地图工具箱包含了地球的椭球体模型,同时也包括太阳,月亮和行星的。 

1.3 参考椭球体(Reference Spheroids)

当地球(或其他星球)用标准圆表示时,这个球模型就叫参考球体。当用椭球体表示是,就叫参考椭球体。他们都是球状的,因此可以看做是参考球体。地图工具箱支持好几种参考球体对象,referenceSphere, referenceEllipsoid, oblateSpheroid objects, 以及较老的ellipsoid vector。

referenceSphere 对象

当使用严格的球体模型时,可采用referenceSphere 对象。当然了,椭球体对象和扁圆体对象也可以表示正球体。

默认情况下,referenceSphere返回一个没有维度的单位球体:

>> referenceSphere
ans = 
  referenceSphere
  Properties:
          Name: 'Unit Sphere'
    LengthUnit: ''
        Radius: 1

可通过名字来指定球体,半径的默认单位为米。

>> earth = referenceSphere('Earth')
earth = 
  referenceSphere
  Properties:
          Name: 'Earth'
    LengthUnit: 'meter'
        Radius: 6371000

你也可以重设长度单位

>> earth.LengthUnit = 'kilometer'
earth = 
  referenceSphere
  Properties:
          Name: 'Earth'
    LengthUnit: 'kilometer'
        Radius: 6371

也可以在指定球体名称时指定单位

>> referenceSphere('Earth','km')
ans = 
  referenceSphere
  Properties:
          Name: 'Earth'
    LengthUnit: 'kilometer'
        Radius: 6371

任何被validateLengthUnit所支持的单位都可使用。具体可参见validateLengthUnit列表。

值得注意的是,MATLAB命令行只展示了被定义的属性,比如,表面积属性可以这样查看:

>> earth = referenceSphere('Earth')
earth = 
  referenceSphere
  Properties:
          Name: 'Earth'
    LengthUnit: 'meter'
        Radius: 6371000
>> earth.SurfaceArea
ans =
     5.100644719097883e+14

此外还需说明的是,为了保持编程多态性等考虑,referenceSphere包含了和椭球体模型一样的属性,例如半长轴等。

referenceEllipsoid对象

当用扁椭圆来表示地球(或其他星球)时,可以用referenceEllipsoid对象。对于一些小尺度的(大比例尺)的投影方法而言,他们通常在球体模型上定义,然而对于大尺度投影而言,例如横轴墨卡托,兰伯特投影等,他们在球体和椭球体都有定义。和参考球体对象一样,参考椭球体对象默认返回一个单位椭球体:

>> referenceEllipsoid
ans = 
  referenceEllipsoid
  Properties:
                 Code: []
                 Name: 'Unit Sphere'
           LengthUnit: ''
        SemimajorAxis: 1
        SemiminorAxis: 1
    InverseFlattening: Inf
         Eccentricity: 0

同样的,也可以通过名称来指定参考椭球体,例如:

>> grs80 = referenceEllipsoid('Geodetic Reference System 1980')
grs80 = 
  referenceEllipsoid
  Properties:
                 Code: 7019
                 Name: 'Geodetic Reference System 1980'
           LengthUnit: 'meter'
        SemimajorAxis: 6378137
        SemiminorAxis: 6356752.31414036
    InverseFlattening: 298.257222101
         Eccentricity: 0.0818191910428158

通常来说,你需要使用你的数据坐标采用的大地测量基准相对应的参考椭球体。对于本例,GRS80参考椭球体对应了NAD83基准坐标(North American Datum of 1983)。

和球体一样,你也可以指定单位。MATLAB命令行显示了半长轴、半短轴、反扁率和偏心率。这些参数对只要有一个半径参数,就足以推出其他参数。也就是说4个参数是互相依赖的。只有反扁率1/f和偏心率ecc就不足以定义椭球体。他俩的关系是ecc = sqrt((2 - f) * f))

此外,还有5个相互依存的属性没显示:扁率,第三扁率,平均半径,表面积和体积。这些都可以通过调属性来查看。

World Geodetic System 1984

被广泛使用的GPS系统采用的参考椭球体叫WGS84,MATLAB里专门给他设了一个命令:wgs84 = wgs84Ellipsoid; 当然也可以这样定义wgs84 = referenceEllipsoid('wgs84'); 这两个是等效的。只是为了方便使用。后者运行速度更快。

Ellipsoid Vectors

椭球体向量是2行1列的矩阵[semimajor_axis eccentricity]。和椭球体对象不一样,这个向量不是个有地理意义的结构体。你在使用它前必须搞清楚他里面元素含义是什么。这个表示方式并不保证半长轴肯定是正实数。就是说,你必须自己检查参数的正确性。

工具箱中很多函数都可以用椭球体向量,但还是建议使用椭球体对象,如果你的程序必须使用椭球体向量,也可以很便捷的从对象转换成向量[s.SemimajorAxis s.Eccentricity]。这意味着必要时,你可以构建出椭球体对象并以此来处理椭球体向量的结果。

oblateSpheroid对象

扁椭球体对象包含了椭球体对象,只是少了编号,名称,长度单位。扁椭球体对象的基本定位就是提供纯粹的几何属性。

通常只要能用椭球体对象的地方,扁椭球体对象就可以使用。

扁椭球体对象可以用在不指定名字和长度单位的椭球体参数上,例如要计算长半轴为2000,偏心率为0.1的椭球体的体积,可以这样做:

>> e = [2000 0.1];
s = oblateSpheroid;
s.SemimajorAxis = e(1);
s.Eccentricity = e(2)
s = 
  oblateSpheroid
  Properties:
        SemimajorAxis: 2000
        SemiminorAxis: 1989.97487421324
    InverseFlattening: 199.498743710662
         Eccentricity: 0.1

当然了,本例没有指定长度单位,得到的体积也是没有单位的。

如何使用Reference Spheroids

在地图投影,球面曲线和面积计算,涉及到大地测量坐标的三维计算时,需要认真对待参考椭球体。

这三个方面详细内容略去。

2 经纬度

使用经度和纬度这两个角度,就可以指定星球表面的任一点位置,其单位可以是角度也可以使弧度。通过角度用的最多。

纬度在北半球是正的,南半球是负的,范围为[-90° 90°]

经度的范围为[-180° 180°]也可以是[0° 360°],地图工具箱提供了几个函数用来转换经度的范围。

3 角度、方向和距离

正文

4 地图投影

正文

5 大圆、等角线和小圆

正文

6 球面和椭球面上的方向和面积

正文

正文

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐