Modulo:Wikidata/geografio

El Vikipedio, la libera enciklopedio
Dokumentado 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