wagner_proj.lua


NAME
    wagner_proj

FUNCTION
    wagner_proj(lon, lat)

NOTES
    Wagner II projection for map.
    
    Based on the equations:
        x = 0.92483 * lon * cos(theta)
        y = 1.38725 * theta
        sin(theta) = 0.88022 * sin(0.8855 * lat)
    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.84 to 2.84 and lat from -1.34 to 1.34.

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 wagner_proj(lon, lat)
    local p1 = 0.88022
    local p2 = 0.8855
    local p3 = 0.92483
    local p4 = 1.38725
    if (type(lon) == "userdata") then
        zeMath.deg2rad(lon)
        zeMath.deg2rad(lat)
        local siny = zeUtl.new("double")
        lat:copy(siny)
        siny:mul(p2)
        zeMath.sin(siny)
        siny:mul(p1)
        zeMath.asin(siny)
        siny:copy(lat)
        lat:mul(p4)
        lon:mul(p3)
        zeMath.cos(siny)
        lon:mul(siny)
    else
        lon = lon * 0.017453293
        lat = lat * 0.017453293
        local theta = math.asin(p1 * math.sin(p2 * lat))
        lon = p3 * lon * math.cos(theta)
        lat = p4 * theta
        return lon, lat
    end
end