www.gusucode.com > GPS仿真Matlab编程源码程序 > GPS仿真Matlab编程源码程序/geoFunctions/geo2cart.m

    function [X, Y, Z] = geo2cart(phi, lambda, h, i)
%GEO2CART Conversion of geographical coordinates (phi, lambda, h) to
%Cartesian coordinates (X, Y, Z). 
%
%[X, Y, Z] = geo2cart(phi, lambda, h, i);
%
%Format for phi and lambda: [degrees minutes seconds].
%h, X, Y, and Z are in meters.
%
%Choices i of Reference Ellipsoid
%   1. International Ellipsoid 1924
%   2. International Ellipsoid 1967
%   3. World Geodetic System 1972
%   4. Geodetic Reference System 1980
%   5. World Geodetic System 1984
%
%   Inputs:
%       phi       - geocentric latitude (format [degrees minutes seconds])
%       lambda    - geocentric longitude (format [degrees minutes seconds]) 
%       h         - height
%       i         - reference ellipsoid type
%
%   Outputs:
%       X, Y, Z   - Cartesian coordinates (meters)

%Kai Borre 10-13-98
%Copyright (c) by Kai Borre
%
% CVS record:
% $Id: geo2cart.m,v 1.1.2.7 2006/08/22 13:45:59 dpl Exp $
%==========================================================================

b   = phi(1) + phi(2)/60 + phi(3)/3600;
b   = b*pi / 180;
l   = lambda(1) + lambda(2)/60 + lambda(3)/3600;
l   = l*pi / 180;

a   = [6378388 6378160 6378135 6378137 6378137];
f   = [1/297 1/298.247 1/298.26 1/298.257222101 1/298.257223563];

ex2 = (2-f(i))*f(i) / ((1-f(i))^2);
c   = a(i) * sqrt(1+ex2);
N   = c / sqrt(1 + ex2*cos(b)^2);

X   = (N+h) * cos(b) * cos(l);
Y   = (N+h) * cos(b) * sin(l);
Z   = ((1-f(i))^2*N + h) * sin(b);
%%%%%%%%%%%%%% end geo2cart.m  %%%%%%%%%%%%%%%%%%%%%%%%