Modul:Astronomické súradnice

z Wikipédie, slobodnej encyklopédie


Túto dokumentáciu [upraviť] [história] [obnoviť]
Dokumentácia Dokumentácia

Modul Astronomické súradnice zobrazuje rovníkové súradnice hviezdy alebo deep sky objektu (hviezdokopa, hmlovina, galaxia), vrátane odkazu na interaktívnu hviezdnu mapu.

Prípadné chyby pri volaní sú zobrazené červenou farbou v texte a článok ja automaticky radený do skrytej kategórie Chyby hlásené modulom Astronomické súradnice.

main()

Hlavná metóda modulu. Zobrazenie súradníc a mapového odkazu.

Parametre

názov parametra typ predvolená hodnota popis
#1 reťazec (povinný) rektascenzia v tvare "H M S". Ako oddelovač sa berie akákoľvek nečíselná postupnosť znakov, štandardne medzera. Je možné odovzdať aj výstup šablóny {{RA}}.
#2 reťazec (povinný) deklinácia v tvare "D M S". Ako oddelovač sa berie akákoľvek nečíselná postupnosť znakov, štandardne medzera. Je možné odovzdať aj výstup šablóny {{DEC}}.
display reťazec "inline" čiarkou oddelené typy zobrazenia. inline: zobrazenie v texte na mieste volania. title: zobrazenie v záhlaví stránky.

Príklady

Volanie z Wiki markupu:

volanie výsledok
{{#invoke:Astronomické súradnice|main|0 42 44.3|41 16 8}} 00h 42m 44s; 41° 16′ 08″
{{#invoke:Astronomické súradnice|main|0 42 44.3|41 16 8|display=title}} Súradnice: Hviezdna mapa 00h 42m 44s; 41° 16′ 08″(výstup vpravo hore v záhlaví)
{{#invoke:Astronomické súradnice|main|{{RA|0|42|44.3}}|{{DEC|41|16|8}}}} 00h 42m 44s; 41° 16′ 08″
{{#invoke:Astronomické súradnice|main|0 h 42 min 44,3 s|+41° 16′ 8″}} 00h 42m 44s; 41° 16′ 08″

Volanie z Lua modulu:

local as = require('Module:Astronomické súradnice')
local markup = as._main({"0 42 44.3", "41 16 8", display = "inline"})

format()

Pomocná metóda pre zobrazenie rektascenzie a deklinácie v štandardnom formáte.

Parametre

názov parametra typ predvolená hodnota popis
#1 reťazec (povinný) typ formátovanej hodnoty (RA: rektascenzia, DEC: deklinácia)
#2 reťazec "" hodnota

Príklady

Volanie z Wiki markupu:

volanie výsledok
{{#invoke:Astronomické súradnice|format|RA|0 42 44.3}} 00h 42m 44,3s
{{#invoke:Astronomické súradnice|format|RA|0 h 42 min 44,3 s}} 00h 42m 44,3s
{{#invoke:Astronomické súradnice|format|DEC|41 16 8}} 41° 16′ 08″

Volanie z Lua modulu:

local as = require('Module:Astronomické súradnice')
local markup = as._format({"RA", "0 42 44.3"})

Pozri aj

Inšpirácia:


Ak máte otázku k tomuto modulu, alebo potrebujete jeho rozšírenie a neviete ho správne naformátovať, pýtajte sa v diskusii k modulu. Pokiaľ je potrebné modul urgentne opraviť, obráťte sa na technickú podporu.

local getArgs = require('Module:Arguments').getArgs
local p = {}

function p.formatError(msg)
    markup = '<strong class="error">' .. msg .. '</strong>'
    markup = markup .. "[[Kategória:Chyby hlásené modulom Astronomické súradnice]]"
    return markup
end

-- format positive/negative integer into 2-digit format (NN, -NN)
function p.formatNNd(n)
    if (n < 0) then
        n = string.format("%03d", n)
    else
        n = string.format("%02d", n)
    end
    return n
end

-- format integer part of positive only float into 2-digit format (NN.NNNN) and force locale decimal separator
function p.formatNNf(n)
    if (n < 10) then
        n = "0" .. n
    end
    n = string.gsub(n, "%.", ",")    -- NN.NNNN -> NN,NNNN (sk decimal separator)
    return n
end

function p.displayTitle(s, notes)
    local markup = 
        '<span style="font-size: small;">' ..
        '<span id="coordinates">' ..
        "[[Rovníková sústava súradníc|Súradnice]]: " .. 
        "[[Súbor:Q_space.svg|24px|link=|Hviezdna mapa]] " ..
        -- "[[Súbor:Q_space.svg|24px|link=]] " ..
        s ..
        notes .. 
        "</span>" ..
        "</span>" ..
        ""
    return markup
end
 
function p.displayInline(s, notes)
    return s .. notes    
end
 
function p.parseDMS(str)
    local dms = {}
    d, m, s = string.match(str, "^[^%d−-]*([%d+−-]+)%D+0*(%d+)%D+0*([%d.,]+)")    
    if (d == nil) then
        error("Unable to parse D/M/S values from string '" .. str .. "'");
    end
    d = string.gsub(d, "−", "-")  -- typographic minus -> ascii minus
    d = d * 1                     -- "+N" -> N, "-0N" -> -N
    m = m * 1
    s = string.gsub(s, ",", ".") * 1  -- "N,N" -> N.N
    dms["d"] = d
    dms["m"] = m
    dms["s"] = s
    return dms
end

function p.validateRA(hms)
    if (hms['d'] < 0 or hms['d'] > 23 or hms['m'] >= 60 or hms['s'] >= 60) then
        error("RA H/M/S member out of range: expected [0..23], [0..59], [0..60), actual: " .. 
            hms['d'] .. ", " .. hms['m'] .. ", " .. hms['s'])
    end
end

function p.validateDEC(dms)
    if (dms['d'] < -90 or dms['d'] > 90 or dms['m'] >= 60 or dms['s'] >= 60) then
        error("DEC D/M/S member out of range: expected [-90..90], [0..59], [0..60), actual: " .. 
            dms['d'] .. ", " .. dms['m'] .. ", " .. dms['s'])
    end
end

function p._format(args)
    if (args[1] == nil or args[1] == "") then
        error("Missing required arguments #1 (action)")
    end
    if (args[2] == nil or args[2] == "") then
        return ""
    end
    local action = string.lower(args[1])
    local markup = ""
    if (action == 'ra') then
        -- format RA
        local ra = p.parseDMS(args[2])
        p.validateRA(ra)
        markup = p.formatNNd(ra["d"]) .. "<sup>h</sup>&nbsp;" .. p.formatNNd(ra["m"]) .. "<sup>m</sup>&nbsp;" .. p.formatNNf(ra["s"]) .. "<sup>s</sup>"
    elseif (action == 'dec') then
        -- format DEC
        local dec = p.parseDMS(args[2])
        p.validateDEC(dec)
        markup = p.formatNNd(dec["d"]) .. "&deg;&nbsp;" .. p.formatNNd(dec["m"]) .. "&prime;&nbsp;" .. p.formatNNf(dec["s"]) .. "&Prime;"
    else
        error("Unknown action: '" .. args[1] .. "'")
    end
    return markup
end

function p.format(frame)
    local args = getArgs(frame)
    local success, result = pcall(p._format, args)
    if (not success) then
        result = p.formatError(result)
    end
    return result
end

function p._main(args)
    if (args[1] == nil or args[1] == "" or args[2] == nil or args[2] == "") then
        error("Missing required arguments #1, #2 (RA, DEC)")
    end

    local ra = p.parseDMS(args[1])
    local dec = p.parseDMS(args[2])
    local display = string.lower(args.display or "inline")
    if (display == "") then
        display = "inline"
    end

    p.validateRA(ra)
    p.validateDEC(dec)

    local mapUrl = "http://www.sky-map.org/?zoom=4&show_grid=1&show_constellation_lines=1&show_constellation_boundaries=1&show_const_names=0&show_galaxies=1&show_box=1&ra=@ra@&de=@dec@&box_width=50&box_height=50"
    local pRa = ra["d"] .. "+" .. ra["m"] .. "+" .. ra["s"]
    local pDec = dec["d"] .. "+" .. dec["m"] .. "+" .. dec["s"]
    mapUrl = string.gsub(string.gsub(mapUrl, "@ra@", pRa), "@dec@", pDec)

    local markup0 = 
        p.formatNNd(ra["d"]) .. "<sup>h</sup>&nbsp;" .. p.formatNNd(ra["m"]) .. "<sup>m</sup>&nbsp;" .. p.formatNNd(math.floor(ra["s"] + 0.5)) .. "<sup>s</sup>; " ..
        p.formatNNd(dec["d"]) .. "&deg;&nbsp;" .. p.formatNNd(dec["m"]) .. "&prime;&nbsp;" .. p.formatNNd(math.floor(dec["s"] + 0.5)) .. "&Prime;"
    markup0 = '<span title="Hviezdna mapa">' .. markup0 .. '</span>'
    markup0 = "[" .. mapUrl .. " " .. markup0 .. "]"

    local notes = ""
    local markup = ""
    if string.find(display, 'inline') ~= nil or display == 'i' or display == 'it' or display == 'ti' then
        markup = p.displayInline(markup0, notes)
    end
    if string.find(display, 'title') ~= nil or display == 't' or display == 'it' or display == 'ti' then
        markup = markup .. p.displayTitle(markup0, notes)
    end

    return markup
end

function p.main(frame)
    local args = getArgs(frame)
    local success, result = pcall(p._main, args)
    if (not success) then
        result = p.formatError(result)
    end
    return result
end

function p.test(frame)
    local args = {}
    args[1] = "08&deg;&nbsp;01&prime;&nbsp;01,49&Prime;"
    args[2] = "1 51 0,123"
    args["display"] = "inline,title"

    local success, result = pcall(p._main, args)

    -- args[1] = "dec"
    -- local success, result = pcall(p._format, args)

    -- result = p.formatNNd(0) .. ", " .. p.formatNNd(9) .. ", " .. p.formatNNd(9.123) .. ", " .. p.formatNNd(99) .. ", " .. p.formatNNd(-9) .. ", " .. p.formatNNd(-99)
    -- result = p.formatNNf(0) .. ", " .. p.formatNNf(9) .. ", " .. p.formatNNf(9.123) .. ", " .. p.formatNNf(99) .. ", " .. p.formatNNf(99.123)

    if (not success) then
        result = p.formatError(result)
    end
    return result
end

return p