echert_proj.lua


NAME
    echert_proj

FUNCTION
    echert_proj(lon, lat)

NOTES
    Eckert V projection.

    Based on the equations
        x = lon * (1 + cos(lat)) / sqrt(2 + pi)
        y = 2 * lat / / sqrt(2 + pi)
    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 -2.71 to 2.74 and lat from -1.21 to 1.28.

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 echert_proj(lon, lat)

    local p = 0.441012772
    if (type(lon) == "userdata") then
        zeMath.deg2rad(lon)
        zeMath.deg2rad(lat)
        local vec = zeUtl.new("double")
        lat:copy(vec)
	    zeMath.cos(vec)
	    vec:add(1)
	    lon:mul(vec)
	    lon:mul(p)
	    lat:mul(2)
	    lat:mul(p)
    else
        lon = lon * 0.017453293
        lat = lat * 0.017453293
    	lon = lon * (1 + math.cos(lat)) * p
	    lat = 2 * lat * p
	    return lon, lat
    end
end