Q: How to convert Earth coordinates to distances ?

Here are the functions I use. They are included into CODAS package (by E.Firing,et al.), but I am unsure who the author is.

function dy = lat_to_m(dlat,alat)
%  dy = lat_to_m(dlat,alat)
% dy   = latitude difference in meters
% dlat = latitude difference in degrees
% alat = average latitude between the two fixes
% Reference: American Practical Navigator, Vol II, 1975 Edition, p 5 

rlat = alat * pi/180;
m = 111132.09 * ones(size(rlat)) - ...
    566.05 * cos(2 * rlat) + 1.2 * cos(4 * rlat);
dy = dlat .* m ;



function dx = lon_to_m(dlon, alat)
% dx = lon_to_m(dlon, alat)
% dx   = longitude difference in meters
% dlon = longitude difference in degrees
% alat = average latitude between the two fixes

rlat = alat * pi/180;
p = 111415.13 * cos(rlat) - 94.55 * cos(3 * rlat);
dx = dlon .* p;




function dlat = m_to_lat(dy, alat)
%
% dy   = latitude difference in meters
% dlat = latidute difference in degrees
% alat = average latitude between the two fixes
% Reference: American Practical Navigator, Vol II, 1975 Edition, p 5 

rlat = alat * pi/180;
m = 111132.09 * ones(size(rlat)) - ...
    566.05 * cos(2 * rlat) + 1.2 * cos(4 * rlat);
dlat = dy ./ m;




function dlon = m_to_lon(dx, alat)
%
% dlon = longitude difference in degrees
% dx   = longitude difference in meters
% alat = average latitude between the two fixes

rlat = alat * pi/180;
p = 111415.13 * cos(rlat) - 94.55 * cos(3 * rlat);
dlon = dx ./ p;