aitoff_proj.lua
NAME
aitoff_proj
FUNCTION
aitoff_proj(lon, lat)
NOTES
Aitoff projection.
Based on the equations
x = 2 * a * cos(lat) * sin(0.5 *lon) / sin(a)
y = a * sin(lat) / sin(a)
cos(a) = cos(lat) * cos(0.5 * lon)
of Cartographic Projection Procedures by G.I. Evenden, September 24, 1995
lon and lat are expected to vary from -180 to 180 and from -90 to 90, respectively.
Resulted lon varies from -3.06 to 3.10 and lat from -1.48 to 1.54.
INPUTS
lon - number or zeArray object as longitude in degree
lat - number or zeArray object as latitude in degree
OUTPUTS
Modifies lon and lat if they are zeArray objects; otherwise returns lon and lat.
SOURCE
require("register")
function aitoff_proj(lon, lat)
if (type(lon) == "userdata") then
zeMath.deg2rad(lon)
zeMath.deg2rad(lat)
lon:div(2)
local a, b = zeUtl.new("double", "double")
lat:copy(a)
lon:copy(b)
zeMath.sin(lon)
zeMath.sin(lat)
zeMath.cos(a)
zeMath.cos(b)
lon:mul(a)
a:mul(b)
zeMath.acos(a)
a:copy(b)
zeMath.sin(b)
lon:mul(2)
lon:mul(a)
lon:div(b)
lat:mul(a)
lat:div(b)
else
lon = lon * 0.017453293 / 2
lat = lat * 0.017453293
local a = math.acos(math.cos(lat) * math.cos(lon))
a = a / (1.e-5 + math.sin(a))
lon = 2 * a * math.cos(lat) * math.sin(lon)
lat = a * math.sin(lat)
return lon, lat
end
end