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