-- 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
'mercury' then return mercuryquad(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'endfunction 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'endreturn p