经纬度与地心笛卡尔坐标系转换

个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

经纬度与笛卡尔坐标系转换,转换的几何计算并不复杂,不过不推理一遍的话,始终是理解的不够透彻。所以借整理思路的机会,把推理过程理一遍。

笛卡尔球心坐标系:

  1. 首先:明确缺省采用的WGS84坐标系所使用的地球半径
    ellipsoid.xyz = (6378137.0, 6378137.0, 6356752.3142451793));
    X,Y 方向使用地球的赤道面的半径,也即经度面长半轴长度:6378137.0
    Z 方向使用地球经度面短半轴长度:6356752.3142451793

  2. 然后,明确圆心点和各个轴的指向:
    以地球的球心为原点;
    z轴指向北极;
    x轴指向0度经线方向:0度经线(英国伦敦原格林威治天文台旧址)与赤道交点。
    y轴指向90度经线方向:90度经线(该经线经过新疆、青海、西藏区域)与赤道交点。

经纬度转笛卡尔坐标

  1. 我们已知,纬度代表的是与赤道面的夹角:
    北半球上,随着夹角的增大,纬度圈越向北极靠近;z值变大,纬度圈的半径也变短了。
    坐标z值 = 短半轴长度 * sin(a)
    经度圈半径 = 长半轴长度 * cos(a)
    经纬度与地心笛卡尔坐标系转换_第1张图片

  2. 已知,经度代表与0度经度线的夹角,0度经线以东为正,以西为负。
    另外我们还知道,x指向0度经线,0度经线x=R,y=0;同理90度经线处x=0,y=R。
    0-90度范围内,随着角度的增大,x值减小,y值增大
    x = 纬线圈半径 * cos(b)
    y = 纬线圈半径 * sin(b)
    经纬度与地心笛卡尔坐标系转换_第2张图片

  3. 把x/y/z坐标去除半径部分,可以作为该经纬度的x/y/z向量指向:
    normal=(
    cos(a)*cos(b),
    cos(a)*sin(b),
    sin(a))
    单位化该向量,再乘以对应的半径
    Ellipsoid(6378137.0, 6378137.0, 6356752.3142451793)
    得到经纬度对应0平面的笛卡尔坐标位置

  4. 坐标修正:考虑到ellipsoid椭球体坐标并非是球体方法所能表达的,使用一些修正算法进行近似纠正:
    纠正算法采用的是:
    笛卡尔位置 = (normal * ellipsoidSquared) / dot(normal * sqrt((normal * ellipsoidSquared)))

  5. 对于带高程值的:
    上面我们求出了经纬度在0平面(高程为0)时的笛卡尔位置;
    加上高程值对应的矢量,就可以得出对应高程的位置;高程的指向和之前一致,所以也直接使用normal指向,所以增加量=height * normal,加到坐标上就得出带高程值的位置。

笛卡尔坐标转经纬度

笛卡尔坐标转经纬度,是上个计算的反向运算,推导过程也和上个相对应。

  1. 首先使用把矢量长度规整到0平面长度上,把高程值去掉
  2. 然后使用z值计算出纬度,设a为纬度,b为经度,z = R * sin(a),所以 a = arcsin(z/R)
  3. 有了纬度之后,对应的纬度圈就明确了,带入x/y的计算公式,再把经度求出来。

个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

你可能感兴趣的:(GIS)