Modulo:WikidataGeo

Dokumentado 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","&#x202F;")    
        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