Module:Celestial object quadrangle explained

-- This module implements/replaces-- -- -- local p =

local function moonquad(lat, lon) local function LQ(n) if n < 10 then return 'LQ0' .. n else return 'LQ' .. n end end -- Note: requires positive longitude coordinates if lat > 65 then return LQ(1) elseif lat > 30 then if lon >= 180 then return LQ(2 + math.floor((lon - 180) / 60)) else return LQ(5 + math.floor(lon / 60)) end elseif lat >= 0 then if lon >= 180 then return LQ(8 + math.floor((lon - 180) / 45)) else return LQ(12 + math.floor(lon / 45)) end elseif lat >= -30 then if lon >= 180 then return LQ(16 + math.floor((lon - 180) / 45)) else return LQ(20 + math.floor(lon / 45)) end elseif lat >= -65 then if lon >= 180 then return LQ(24 + math.floor((lon - 180) / 60)) else return LQ(27 + math.floor(lon / 60)) end else return LQ(30) end

return 'Error'end

local function marsquad(lat, lon) -- Note: requires positive longitude coordinates if lat > 65 then return 'Mare Boreum' elseif lat > 30 then if lon < 60 then return 'Ismenius Lacus' elseif lon < 120 then return 'Casius' elseif lon < 180 then return 'Cebrenia' elseif lon < 240 then return 'Diacria' elseif lon < 300 then return 'Arcadia' else return 'Mare Acidalium' end elseif lat >= 0 then if lon < 45 then return 'Arabia' elseif lon < 90 then return 'Syrtis Major' elseif lon < 135 then return 'Amenthes' elseif lon < 180 then return 'Elysium' elseif lon < 225 then return 'Amazonis' elseif lon < 270 then return 'Tharsis' elseif lon < 315 then return 'Lunae Palus' else return 'Oxia Palus' end elseif lat >= -30 then if lon < 45 then return 'Sinus Sabaeus' elseif lon < 90 then return 'Iapygia' elseif lon < 135 then return 'Mare Tyrrhenum' elseif lon < 180 then return 'Aeolis' elseif lon < 225 then return 'Memnonia' elseif lon < 270 then return 'Phoenicis Lacus' elseif lon < 315 then return 'Coprates' else return 'Margaritifer Sinus' end elseif lat >= -65 then if lon < 60 then return 'Noachis' elseif lon < 120 then return 'Hellas' elseif lon < 180 then return 'Eridania' elseif lon < 240 then return 'Phaethontis' elseif lon < 300 then return 'Thaumasia' else return 'Argyre' end else return 'Mare Australe' endend

local function mercuryquad(lat, lon) -- Note: requires positive longitude coordinates if lat >= 66 then return 'Borealis' elseif lat >= 21 then if lon < 90 then return 'Hokusai' elseif lon < 180 then return 'Raditladi' elseif lon < 270 then return 'Shakespeare' else return 'Victoria' end elseif lat > -21 then if lon < 72 then return 'Derain' elseif lon < 144 then return 'Eminescu' elseif lon < 216 then return 'Tolstoj' elseif lon < 288 then return 'Beethoven' else return 'Kuiper' end elseif lat > -66 then if lon < 90 then return 'Debussy' elseif lon < 180 then return 'Neruda' elseif lon < 270 then return 'Michelangelo' else return 'Discovery' end else return 'Bach' end

return 'Error'end

local function venusquad(lat, lon) -- Note: requires positive longitude coordinates if lat > 57 then return 'Ishtar Terra' elseif lat >= 0 then if lon < 60 or lon >= 300 then return 'Sedna Planitia' elseif lon < 180 then return 'Niobe Planitia' else return 'Guinevere Planitia' end elseif lat >= -57 then if lon < 60 or lon >= 300 then return 'Lavinia Planitia' elseif lon < 180 then return 'Aphrodite Terra' else return 'Helen Planitia' end else return 'Lada Terra' endend

local function quad_name(lat, lon, globe) -- lower case globe = globe:lower or

-- convert to numbers lat = tonumber(lat) or lon = tonumber(lon) or

-- get the quad name if lat ~= and lon ~= and globe ~= then if lon < 0 then lon = lon + 360 end if lon < 0 or lon > 360 then return 'Error' end if globe

'mars' then return marsquad(lat, lon) elseif globe

'mercury' then return mercuryquad(lat, lon) elseif globe

'moon' then return moonquad(lat, lon) elseif globe

'venus' then return venusquad(lat, lon) end end

return 'Error'end

function p.category(frame) local args = frame.args local res = quad_name(args['lat'] or , args['lon'] or , args['globe'] or ) if res ~= 'Error' then if args['nameonly'] and args['nameonly'] ~= then return res else return '' end end

return '

Error'end

function p.name(frame) local args = frame.args local res = quad_name(args['lat'] or , args['lon'] or , args['globe'] or ) if res ~= 'Error' then return res end return '

Error'end

return p