Modulo:Wikidata/geografio
[antaŭrigardi] [redakti] [historio] [renovigi]
Dokumentado
Ŝablona programado | Diskutoj | Lua | Testoj | Subpaĝoj | ||||
---|---|---|---|---|---|---|---|---|
Modulo | Esperanto | English | Deutsch
|
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.) |
|
-- 2016-03-14
-- jen helpa modulo por Wikidata, kiu uzas la samajn erarmesaĝojn kiel Wikidata kaj subtenas ID por testoj
-- aliaj moduloj
local wikidata = require ("Modulo:Wikidata")
local kalkuli = require( "Modulo:Math")
local p = {}
-- funkcio nombro por alteco
function p.alteco(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
local subf = frame.args["subf"] -- ĉu subfunkcio de alia modulo aŭ ne
if default then showerrors = nil end
-- get wikidata entity
local entity = mw.wikibase.getEntity(id)
if not entity then
if showerrors then return wikidata.printError("entity-not-found") else return default end
end
local n = entity: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
-- funkcioj pri areo kaj ties mezurunuoj, aldone kun transkalkuladoj al km² kaj ha (por informkestoj)
-- funkcio nombro por areo
function p.areo(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
local subf = frame.args["subf"] -- ĉu subfunkcio de alia modulo aŭ ne
if default then showerrors = nil end
-- get wikidata entity
local entity = mw.wikibase.getEntity(id)
if not entity then
if showerrors then return wikidata.printError("entity-not-found") else return default end
end
local n = entity: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)
if not subf then
x= string.gsub(x,"%.",",") -- ŝanĝo de angla punkto al esperanta komo
end
return x
end
-- funkcio nombro por unuo de areo
function p.areoUnuo(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
if default then showerrors = nil end
-- get wikidata entity
local entity = mw.wikibase.getEntity(id)
if not entity then
if showerrors then return wikidata.printError("entity-not-found") else return default end
end
local n = entity:getBestStatements( 'P2046' )
if (#n == 0) or (n[1].mainsnak.snaktype ~= "value") then
return nil
end
local x = n[1].mainsnak.datavalue.value.unit
-- x=tonumber(x)
local y = string.sub(x,32)
if y == "Q71226" then -- kvadrataj kilometroj
x = "km²"
elseif y == "Q35852" then -- hektaro
x = "ha" -- hektaro
elseif y == "Q25343" then -- kvadrataj metroj
x = "m²"
elseif y == "Q2486298" then -- kvadrataj centimetroj
x = "cm²"
else
x = "km²" -- kvadrataj kilometroj
end
return x
end
-- transkalkulas al kvadrataj kilometroj
function p.areoKM2(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
local mode = frame.args["mode"]
local rondumo = frame.args["round"]
local a = p.areo({ args = { id = id, showerrors = showerrors, default=default, subf = "jes" } })
local u = p.areoUnuo({ args = { id = id, showerrors = showerrors, default=default } })
local ru = "[[Kvadrata kilometro|km²]]"
local rondumo = tonumber(rondumo)
if rondumo == nil or rondumo == "" then
rondumo = 0
end
if a ~= nil and u ~= nil then
local r = 1
if u == "km²" then -- jam estas km²
r = a
elseif u == "ha" then -- el hektaroj al km²
r = a / 100
r = kalkuli._round(r,rondumo)
elseif u == "m²" then -- el metroj al km²
r = a / 1e6
r = kalkuli._round(r,rondumo)
elseif u == "cm²" then -- el cm² al km²
r = a / 1e10
r = kalkuli._round(r,rondumo)
else -- taksi kiel km²
r = a
end
if mode == "subfunkcio" then
return r, unuo -- en subfunkcio la mezurunuo devas esti transdonata aparte, por ke kalkulado eblu
else
r= string.gsub(r,"%.",",") -- ŝanĝo de angla punkto al esperanta komo
return r .. " " .. ru -- eldono kun unuo
end
else
return "neniuj valoroj"
end
end
-- transkalkulas al hektaroj
function p.areoHA(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
local mode = frame.args["mode"]
local rondumo = frame.args["round"]
local a = p.areo({ args = { id = id, showerrors = showerrors, default=default, subf = "jes" } })
local u = p.areoUnuo({ args = { id = id, showerrors = showerrors, default=default } })
local ru = "[[Hektaro|ha]]"
local rondumo = tonumber(rondumo)
if rondumo == nil or rondumo == "" then
rondumo = 0
end
if a ~= nil and u ~= nil then
local r = 1
if u == "km²" then -- el km² al hektaroj
r = a * 100
r = kalkuli._round(r,rondumo)
elseif u == "ha" then -- jam hektaroj
r = a
elseif u == "m²" then -- el metroj al hektaroj
r = a / 1e4
r = kalkuli._round(r,rondumo)
elseif u == "cm²" then -- el cm² al hektaroj
r = a / 1e8
r = kalkuli._round(r,rondumo)
else -- taksi kiel km² kaj kalkuli al ha
r = a * 100
r = kalkuli._round(r,rondumo)
end
if mode == "subfunkcio" then
return r, unuo -- en subfunkcio la mezurunuo devas esti transdonata aparte, por ke kalkulado eblu
else
r= string.gsub(r,"%.",",") -- ŝanĝo de angla punkto al esperanta komo
return r .. " " .. ru -- eldono kun unuo
end
else
return "neniuj valoroj"
end
end
-- funkcio por legi la nombro da subdividoj (p150)
function p.NombroSubdividoj(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
if default then showerrors = nil end
-- get wikidata entity
local entity = mw.wikibase.getEntity(id)
if not entity then
if showerrors then return wikidata.printError("entity-not-found") else return default end
end
local subdividoj = entity:getBestStatements( 'P150' )
if (#subdividoj == 0) then
return nil
end
return #subdividoj
end
-- Listo de la subdividoj
function p.Subdividoj(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
if default then showerrors = nil end
-- get wikidata entity
local entity = mw.wikibase.getEntity(id)
if not entity then
if showerrors then return wikidata.printError("entity-not-found") else return default end
end
local subdividoj = entity: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
-- Legi la administran unuon de la administra unuo
function p.administraUnuo(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
if default then showerrors = nil end
-- get wikidata entity
local entity = mw.wikibase.getEntity(id)
if not entity then
if showerrors then return wikidata.printError("entity-not-found") else return default end
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
return p