Modulo:WikidataGeo
Aspekto
[antaŭrigardi] [redakti] [historio] [renovigi]
Dokumentado
Ŝablona programado | Diskutoj | Lua | Testoj | Subpaĝoj | |||
---|---|---|---|---|---|---|---|
Modulo | Esperanto | English
|
Modulo: | Dokumentado |
Se vi havas demandon pri ĉi tiu Lua-modulo, tiam vi povas demandi en la diskutejo pri Lua-moduloj. La Intervikiaj ligiloj estu metataj al Vikidatumoj. (Vidu Helpopaĝon pri tio.) |
|
local p = {}
--Ilo por vidi la strukturon de la objekto
function p.dump()
return mw.dumpObject(mw.wikibase.getEntityObject())
end
--[[ Funkcio por legi troviĝas en administra unuo (p131)
function p.admministraUnuo()
local ento = mw.wikibase.getEntity()
if not ento then
return
end
local n = ento:getBestStatements( 'P131' )
if (#n == 0) or (n[1].mainsnak.snaktype ~= "value") then
return
end
local x = n[1].mainsnak.datavalue.value["numeric-id"]
return x
end --funkcio]]
-- Funkcio por legi la priskribo (P2096) de bildo (p18)
function p.priskriboBildo()
local ento = mw.wikibase.getEntityObject()
if not ento then
return nil
end
local bildo = ento:getBestStatements( 'P18' )
if (#bildo == 0) or (bildo[1].mainsnak.snaktype ~= "value") then
return nil
end
local v = bildo[1].qualifiers and bildo[1].qualifiers["P2096"] or nil
if (v==nil) then
return '<span class="error">Ne estas priskribata en wikidatumoj</span>'
else
local longo = #v
for i=1, longo do
local t =v[i].datavalue.value.text
local l = v[i].datavalue.value.language
if l == "eo" then -- serĉu tekston kun lingva indiko de esperanto
return t
end
end
return "" -- priskribo en alia lingvo ne estu redonata
end
end -- Funkcio
-- funkcio nombro por alteco
function p.alteco()
local ento = mw.wikibase.getEntity()
if not ento then
return nil
end
local n = ento:getBestStatements( 'P2044' )
if (#n == 0) or (n[1].mainsnak.snaktype ~= "value") then
return nil
end
local x = n[1].mainsnak.datavalue.value.amount
x=tonumber(x)
return x
end
-- funkcio nombro por areo
function p.areo()
local ento = mw.wikibase.getEntity()
if not ento then
return nil
end
local n = ento:getBestStatements( 'P2046' )
if (#n == 0) or (n[1].mainsnak.snaktype ~= "value") then
return nil
end
local x = n[1].mainsnak.datavalue.value.amount
x=tonumber(x)
local u = n[1].mainsnak.datavalue.value.unit
local y = string.sub(u,32)
if y == "Q71226" then y=x -- kvadrataj kilometroj
elseif y == "Q35852" then y=x/100 -- hektaro
elseif y == "Q25343" then y=x/1e6 -- kvadrataj metroj
elseif y == "Q2486298" then y=x/1e10 -- kvadrataj centimetroj
else y=x -- kvadrataj kilometroj (kontrolinda)
end
return y
end
-- funkcio nombro por areo por Qvaloro
function p.areoQ(frame)
local ento = mw.wikibase.getEntity(frame.args[1])
if not ento then
return nil
end
local areo = ento:getBestStatements( 'P2046' )
if (#areo == 0) or (areo[1].mainsnak.snaktype ~= "value") then
return nil
end
local x = areo[1].mainsnak.datavalue.value.amount
x=tonumber(x)
x=tostring(x)
-- ŝanĝu anglan punkton al esperanta komo.
x = string.gsub(x,"%.",",")
return x
end
-- funkcio nombro por areo kun km2 kaj ha
function p.areoHa()
x=p.areo ()
if not x then return end
local y
y=x*100
-- ankaŭ estas ebla : y=mw.getLanguage('eo'):formatNum(y)
y=tostring (y)
local z =''
local k=#y
y=string.reverse(y)
for i=1,k do if (i % 3 == 0) then z=z..string.sub (y,i,i).."s"
else z=z..string.sub (y,i,i) end
end -- for
y= z
y= string.reverse (y)
y= string.gsub (y,"s"," ")
y=" ("..y.." ha)"
-- ŝanĝu anglan punkton al esperanta komo.
x = string.gsub(x,"%.",",")
x=x .. " km²" .. y
return x
end
-- nombro por la areo kun uno
function p.AreoKunUnuo(frame)
x=p.areo()
if not x then return '<span class="error">La artikolo ne estas ankaŭ ligata kun vikidatumoj</span>' end
if frame.args[1]== 'alt' then
-- analizo, ĉu x estas du aŭ pli granda ol du. se jes, ŝanĝu la mezurunuon en y al pluralo.
if x >= 2 then y = "kilometroj alt du" else y = "kilometro alt du" end
else
-- analizo, ĉu x estas du aŭ pli granda ol du. se jes, ŝanĝu la mezurunuon en y al pluralo.
if x >= 2 then y = "kvadrataj kilometroj" else y = "kvadrata kilometro" end
end -- if
-- ŝanĝu anglan punkton al esperanta komo. tio nur eblas post la antaŭa komparo.
x = string.gsub(x,"%.",",")
return x .. ' ' .. y
end
-- denseco da loĝantaro, se la parametro=2 la nombro da postkomaj ciferoj estas 2
function p.denseco(frame)
y=p.areo()
if not y then return '<span class="error">La artikolo ne estas ankaŭ ligata kun vikidatumoj</span>' end
local ento = mw.wikibase.getEntity()
if not ento then
return '<span class="error">La artikolo ne estas ankaŭ ligata kun vikidatumoj</span>'
end
pop = ento:getBestStatements( 'P1082' )
if (#pop == 0) or (pop[1].mainsnak.snaktype ~= "value") then
return nil --Loĝantaro ne en vikidatumoj
end
local x = pop[1].mainsnak.datavalue.value.amount
if frame.args[1]== '2' then return math.floor(100*x/y+0.5)/100 else
return math.floor(x/y+0.5) end -- kalkulo + rondigo
end
-- funkcio por legi la nombro da subdividoj (p150)
function p.NombroSubdividoj()
local ento = mw.wikibase.getEntity()
if not ento then
return nil
end
local subdividoj = ento:getBestStatements( 'P150' )
if (#subdividoj == 0) then
return nil
end
return #subdividoj
end
-- Listo de la subdividoj
function p.Subdividoj()
local ento = mw.wikibase.getEntity()
if not ento then return nil end
local subdividoj = ento:getBestStatements( 'P150' )
local n=#subdividoj
if n == 0 then return nil end
local q=''
local t={{}}
-- kreigo de la listo
for i=1,n do
q= 'Q' .. subdividoj[i].mainsnak.datavalue.value["numeric-id"]
local x=mw.wikibase.label(q)
if x ~= nil then
local z=mw.wikibase.sitelink(q) or 'ne konata'
if x~=z and z~='ne konata' then x=z..'|'..x end
t[i]=x
else
t[i] = ':d:'..q..''
end --x ~= nil
end -- for
-- klasifikigo de la listo
table.sort(t)
local y='[['..t[1]..']]'
for i=2,n-1 do y=y .. ', [[' .. t[i] .. ']]' end
y=y .. ' kaj [[' .. t [n] .. ']]'
return y
end--Subdividoj
-- Listo de la limajKomunumoj (p47)
function p.limajKomunumoj()
local ento = mw.wikibase.getEntity()
if not ento then return nil end
local subdividoj = ento:getBestStatements( 'P47' )
local n=#subdividoj
if n == 0 then return nil end
local q=''
local t={{}}
-- kreigo de la listo
for i=1,n do
q= 'Q' .. subdividoj[i].mainsnak.datavalue.value["numeric-id"]
local x=mw.wikibase.label(q)
if x ~= nil then
local z=mw.wikibase.sitelink(q) or 'ne konata'
if x~=z and z~='ne konata' then x=z..'|'..x end
t[i]=x
else
t[i] = ':d:'..q..''
end --x ~= nil
end -- for
-- klasifikigo de la listo
table.sort(t)
local y='[['..t[1]..']]'
for i=2,n-1 do y=y .. ', [[' .. t[i] .. ']]' end
y=y .. ' kaj [[' .. t [n] .. ']]'
return y
end--limajkomunumoj
-- Legi la administra unuo de la ento (p131)
function p.administraUnuo()
local ento = mw.wikibase.getEntity()
if not ento then return nil end
local unuo= ento:getBestStatements( 'P131' )
if (#unuo == 0) or (unuo[1].mainsnak.snaktype ~= "value") then
return nil
end
q= 'Q' .. unuo[1].mainsnak. datavalue.value["numeric-id"]
local x=mw.wikibase.label(q)
local z=mw.wikibase.sitelink(q) or 'ne konata'
if x~=z and z~='ne konata' then x='[['.. z..'|'..x..']]' end
return x
end--AdministraUnuo
-- Nur por provo
function p.provo() -- funkcio nombro por areo
local ento = mw.wikibase.getEntity()
if not ento then
return nil
end
local n = ento:getBestStatements( 'P2046' )
if (#n == 0) or (n[1].mainsnak.snaktype ~= "value") then
return nil
end
local x = n[1].mainsnak.datavalue.value.amount
x=tonumber(x)
local u = n[1].mainsnak.datavalue.value.unit
local y = string.sub(u,32)
if y == "Q71226" then y=x -- kvadrataj kilometroj
elseif y == "Q35852" then y=x/100 -- hektaro
elseif y == "Q25343" then y=x/1e6 -- kvadrataj metroj
elseif y == "Q2486298" then y=n[1].x/1e10 -- kvadrataj centimetroj
else y=x -- kvadrataj kilometroj (kontrolinda)
end
return y
end--provo
return p