Modulo:Wikidata/geografio
Etoso
[antaŭrigardi] [redakti] [historio] [renovigi]
Ŝ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.) |
|
-- 2024-05-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
-- por #invoke
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
return p._alteco(id, showerrors, default, subf)
end
-- por moduloj
function p._alteco(id, showerrors, default, subf)
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
-- por moduloj
function p._altecoUnuo(id, showerrors, 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( 'P2044' )
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 == "Q828224" then -- kilometroj
x = "km"
elseif y == "Q11573" then -- metroj
x = "m"
elseif y == "Q174728" then -- centimetroj
x = "cm"
elseif y == "Q253276" then -- mejloj
x = "mi"
elseif y == "Q3710" then -- futoj
x = "ft"
else
x = "km" -- kilometroj
end
return x
end
-- por moduloj
function p._altecoM(alteco, unuo)
local r
local testo = tonumber(alteco)
if testo == nil then return alteco end
if unuo == "m" then
r = alteco
elseif unuo == "km" then
r = alteco * 1000
elseif unuo == "cm" then
r = alteco / 100
elseif unuo == "mi" then
r = alteco * 1609.344
elseif unuo == "ft" then
r = alteco * 0.3048
else -- supozas, ke temas pri metroj
r = alteco
end
return r
end
-- funkcioj pri areo kaj ties mezurunuoj, aldone kun transkalkuladoj al km² kaj ha (por informkestoj)
-- funkcio nombro por areo
-- por #invoke
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
return p._areo(id, showerrors, default, subf)
end
-- por moduloj
function p._areo(id, showerrors, default, subf)
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
-- por #invoke
function p.areoUnuo(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
return p._areoUnuo(id, showerrors, default)
end
-- por moduloj
function p._areoUnuo(id, showerrors, 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²"
elseif y == "Q232291" then -- kvadrataj mejloj
x = "mi²"
elseif y == "Q81292" then -- akreoj
x = "ac"
elseif y == "Q1063786" then -- kvadrataj coloj
x = "in²"
else
x = "km²" -- kvadrataj kilometroj
end
return x
end
-- transkalkulas al kvadrataj kilometroj
-- por #invoke
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"]
return p._areoKM2(id, showerrors, default, mode, rondumo)
end
-- por moduloj
function p._areoKM2(id, showerrors, default, mode, rondumo)
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
r = kalkuli._round(r,rondumo)
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)
elseif u == "mi²" then -- el mi² (kvadrataj mejloj) al km²
r = a * 2.589988110336
r = kalkuli._round(r, rondumo)
elseif u == "ac" then -- el ac (akreoj) al km²
r = a * 0.0040468564224
r = kalkuli._round(r, rondumo)
elseif u == "in²" then -- el in² (kvadrataj coloj) al km²
r = a * 0.0000000006451600
r = kalkuli._round(r, rondumo)
else -- taksi kiel km²
r = a
-- 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
-- transkalkulas al kvadrataj metroj
-- por #invoke
function p.areoM2(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"]
return p._areoM2(id, showerrors, default, mode, rondumo)
end
-- por moduloj
function p._areoM2(id, showerrors, default, mode, rondumo)
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 metro|m²]]"
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 == "m²" then -- jam estas m²
r = a
r = kalkuli._round(r,rondumo)
elseif u == "ha" then -- el hektaroj al m²
r = a * 10000
r = kalkuli._round(r,rondumo)
elseif u == "km²" then -- el km² la metroj
r = a * 1e6
r = kalkuli._round(r,rondumo)
elseif u == "cm²" then -- el cm² al m²
r = a / 10000
r = kalkuli._round(r,rondumo)
elseif u == "mi²" then -- el mi² (kvadrataj mejloj) al m²
r = a * 2589988.110336
r = kalkuli._round(r, rondumo)
elseif u == "ac" then -- el ac (akreoj) al m²
r = a * 4046.8564224
r = kalkuli._round(r, rondumo)
elseif u == "in²" then -- el in² (kvadrataj coloj) al m²
r = a * 0.0006451600
r = kalkuli._round(r, rondumo)
else -- taksi kiel m²
r = a
-- 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
-- transkalkulas al hektaroj
-- #invoke
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"]
return p._areoHA(id, showerrors, default, mode, rondumo)
end
-- por moduloj
function p._areoHA(id, showerrors, default, mode, rondumo)
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
r = kalkuli._round(r,rondumo)
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)
elseif u == "mi²" then -- el mi² (kvadrataj mejloj) al ha
r = a * 258.988110336
r = kalkuli._round(r, rondumo)
elseif u == "ac" then -- el ac (akreoj) al ha
r = a * 0.40468564224
r = kalkuli._round(r, rondumo)
elseif u == "in²" then -- el in² (kvadrataj coloj) al ha
r = a * 0.00000006451600
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)
-- por #invoke
function p.NombroSubdividoj(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
return p._NombroSubdividoj(id, showerrors, default)
end
-- por moduloj
function p._NombroSubdividoj(id, showerrors, 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
-- por #invoke
function p.Subdividoj(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
return p._Subdividoj(id, showerrors, default)
end
-- por moduloj
function p._Subdividoj(id, showerrors, 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
-- por #invoke
function p.administraUnuo(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
return p._administraUnuo(id, showerrors, default)
end
-- por moduloj
function p._administraUnuo(id, showerrors, 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= entity: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
-- aldonoj de 2024-04-26, 2024-04-27
-- redonu la latitudon de objekto
-- por #invoke
function p.latitudo(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
return p._latitudo(id, showerrors, default)
end
-- por moduloj
function p._latitudo(id, showerrors, 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 koord= entity:getBestStatements( 'P625' )
if (#koord == 0) or (koord[1].mainsnak.snaktype ~= "value") then
return nil
end
local lat = koord[1].mainsnak. datavalue.value["latitude"]
if lat ~= nil then
return lat
else
return nil
end
end
-- redonu longitudon de objekto
-- por #invoke
function p.longitudo(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
return p._longitudo(id, showerrors, default)
end
-- por moduloj
function p._longitudo(id, showerrors, 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 koord= entity:getBestStatements( 'P625' )
if (#koord == 0) or (koord[1].mainsnak.snaktype ~= "value") then
return nil
end
local long = koord[1].mainsnak. datavalue.value["longitude"]
if long ~= nil then
return long
else
return nil
end
end
-- redonu la latitudon de plej alta punkto
-- por #invoke
function p.plejaltalat(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
return p._plejaltalat(id, showerrors, default)
end
-- por moduloj
function p._plejaltalat(id, showerrors, 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 plejalta= entity:getBestStatements( 'P610' )
if (#plejalta == 0) or (plejalta[1].mainsnak.snaktype ~= "value") then
return nil
end
q= 'Q' .. plejalta[1].mainsnak. datavalue.value["numeric-id"]
-- get wikidata entity
local entity2 = mw.wikibase.getEntity(q)
if not entity2 then return nil end
local koord= entity2:getBestStatements( 'P625' )
if (#koord == 0) or (koord[1].mainsnak.snaktype ~= "value") then
return nil
end
local lat = koord[1].mainsnak. datavalue.value["latitude"]
if lat ~= nil then
return lat
else
return nil
end
end
-- redonu la longitudon de plej alta punkto
-- por #invoke
function p.plejaltalong(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
return p._plejaltalong(id, showerrors, default)
end
-- por moduloj
function p._plejaltalong(id, showerrors, 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 plejalta= entity:getBestStatements( 'P610' )
if (#plejalta == 0) or (plejalta[1].mainsnak.snaktype ~= "value") then
return nil
end
q= 'Q' .. plejalta[1].mainsnak. datavalue.value["numeric-id"]
-- get wikidata entity
local entity2 = mw.wikibase.getEntity(q)
if not entity2 then return nil end
local koord= entity2:getBestStatements( 'P625' )
if (#koord == 0) or (koord[1].mainsnak.snaktype ~= "value") then
return nil
end
local long = koord[1].mainsnak. datavalue.value["longitude"]
if long ~= nil then
return long
else
return nil
end
end
-- redonu la latitudon de plej malalta punkto
-- por #invoke
function p.plejmalaltalat(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
return p._plejmalaltalat(id, showerrors, default)
end
-- por moduloj
function p._plejmalaltalat(id, showerrors, 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 plejalta= entity:getBestStatements( 'P1589' )
if (#plejalta == 0) or (plejalta[1].mainsnak.snaktype ~= "value") then
return nil
end
q= 'Q' .. plejalta[1].mainsnak. datavalue.value["numeric-id"]
-- get wikidata entity
local entity2 = mw.wikibase.getEntity(q)
if not entity2 then return nil end
local koord= entity2:getBestStatements( 'P625' )
if (#koord == 0) or (koord[1].mainsnak.snaktype ~= "value") then
return nil
end
local lat = koord[1].mainsnak. datavalue.value["latitude"]
if lat ~= nil then
return lat
else
return nil
end
end
-- redonu la longitudon de plej malalta punkto
-- por #invoke
function p.plejmalaltalong(frame)
local id = frame.args["id"]
local showerrors = frame.args["showerrors"]
local default = frame.args["default"]
return p._plejmalaltalong(id, showerrors, default)
end
-- por moduloj
function p._plejmalaltalong(id, showerrors, 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 plejalta= entity:getBestStatements( 'P1589' )
if (#plejalta == 0) or (plejalta[1].mainsnak.snaktype ~= "value") then
return nil
end
q= 'Q' .. plejalta[1].mainsnak. datavalue.value["numeric-id"]
-- get wikidata entity
local entity2 = mw.wikibase.getEntity(q)
if not entity2 then return nil end
local koord= entity2:getBestStatements( 'P625' )
if (#koord == 0) or (koord[1].mainsnak.snaktype ~= "value") then
return nil
end
local long = koord[1].mainsnak. datavalue.value["longitude"]
if long ~= nil then
return long
else
return nil
end
end
return p