Module:Sandbox/Premeditated/kommune

From blackwiki
Jump to navigation Jump to search

{{Module rating }}

Usage

Forklaring Kode Resultat
Kommunenummer 301 for Oslo, henter navn. {{#invoke:Sandbox/Premeditated/kommune|main|301}} Oslo
Kommunenummer 301 for Oslo, henter navn med ref. {{#invoke:Sandbox/Premeditated/kommune|main|301|ref}} Oslo[1]
Kommunenummer 301 for Oslo, henter landareal med enhet. {{#invoke:Sandbox/Premeditated/kommune|main|301|hent=landareal|enhet}} 426.39 km²
Kommunenummer 301 for Oslo, henter totalt areal inkl. territorial-farvann med enhet og ref. {{#invoke:Sandbox/Premeditated/kommune|main|301|hent=totAreal|enhet|ref}} 480.75 km²[1]
Kommunenummer 301 for Oslo, henter totalt areal inkl. territorial-farvann med enhet og ref. {{#invoke:Sandbox/Premeditated/kommune|main|wd|hent=totAreal|enhet|ref}} Lua error in Module:Wd at line 196: attempt to index field 'wikibase' (a nil value).
Kommunenummer 301 for Oslo, henter myr med ref. {{#invoke:Sandbox/Premeditated/kommune|main|301|hent=myr|ref}} 6.59[1]
Fylkesnummer 34 for Innlandet fylke, henter myr med ref. {{#invoke:Sandbox/Premeditated/kommune|main|34|hent=myr|ref}} 4257.06[1]
Kommunenummer 301 for Oslo kommune, henter og regner ut innbygger tetthet. {{#invoke:Sandbox/Premeditated/kommune|innbprkm|knr=301|innb=673469}} 1,579.47
Kommunenummer 301 for Oslo kommune, henter og regner ut innbygger tetthet med enhet {{#invoke:Sandbox/Premeditated/kommune|innbprkm|knr=301|innb=673469|enhet}} 1,579.47 innb./km²
Fylkesnummer 3 for Oslo, henter alle kommuner og legger all tall inn i en tabell. {{#invoke:Sandbox/Premeditated/kommune|tabell|3}}
Oslo
Nr.KommuneTotalt arealFastland og øyerHavflateÅpent områdeSnø, is og breElv med tørrfallInnsjøMyrSkogDyrket markBy- og tettbebyggelseIndustriområdeAnnetLandareal
301Oslo480.75454.1226.645100.6127.116.59289.137.9562.264.445.02426.39
Alle rader med unntak av "nr." og "kommune" er i enheten km². Basert på data hentet fra Kartverket.[1]

Referanser

  1. 1.0 1.1 1.2 1.3 1.4 "Arealstatistikk for Norge". Kartverket (in Norwegian Bokmål). 1 January 2020.

{{#invoke:Sandbox/Premeditated|function_name}}



local wd = require('Module:Wd')
local data = mw.loadData("Module:Sandbox/Premeditated/kommune/data")
local getArgs = require('Module:Arguments').getArgs

local p = {}

function p.test(frame)
	local i = 10
	local c = 100
	
	return i,c
end

local function getRef(frame)
	return frame:callParserFunction{ name = '#tag:ref', args = { 
    '{{cite web |url=https://www.kartverket.no/kunnskap/Fakta-om-Norge/Arealstatistikk/Arealstatistikk-Norge/ |title=Arealstatistikk for Norge |website=[[Kartverket]] |date=1 January 2020 |language=Norwegian Bokmål}}'
	, name = 'Kartverket2020'} }
end

local function round(num, numDecimalPlaces)
  return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
end

-- BUILDER!!

local table_sort = {'kommune','totareal','areal','havflate','apentomrade','snoisbre','innsjo','elvtorrfall','myr','skog','dmark','btbygg','industri','annet','landareal'}
local header_sort = {'Nr.','Kommune','Totalt areal','Fastland og øyer','Havflate','Åpent område','Snø, is og bre','Elv med tørrfall','Innsjø','Myr','Skog','Dyrket mark','By- og tettbebyggelse','Industriområde','Annet','Landareal'}

local function sorted_iter(t)
  local fin = {}
  for i, val in pairs(t) do
    for i2, val2 in pairs(table_sort) do
      if i == val2 then
      	if tonumber(val) then
        	table.insert(fin,i2, tonumber(val))
        else
        	table.insert(fin,i2, val)
        end
      end
    end
  end
  return fin
end

function p.tabell(frame)
	local args = getArgs(frame)
	local fylkenr = tonumber(args[1])
	local row = ''
	local tbl = mw.html.create('table')
	tbl
		:addClass('wikitable sortable')
		:tag('caption'):wikitext(data['fylke'][fylkenr]['fylke']):done()
	local header = mw.html.create('tr'):done()
	for ih, valh in pairs(header_sort) do
		local hData = mw.html.create('th')
			:wikitext(valh):done()
		header:node(hData)
	end
	tbl:node(header)
	for i, val in pairs(data['nummerserie'][fylkenr]) do
		row = mw.html.create('tr'):done()
			:tag('td'):wikitext(val):done()
				
		for i1,val2 in pairs(sorted_iter(data['kommune'][val])) do
			
		if type(val2) == 'number' then
			local data = mw.html.create('td')
				:wikitext(mw.language.getContentLanguage():formatNum(val2)):done()
			row:node(data)
		else
			local data = mw.html.create('td')
				:wikitext(val2):done()
			row:node(data)
		end
		end
		tbl:node(row)
	end
	tbl:tag('tr')
		:addClass('sortbottom')
		:tag('td')
			:attr('colspan', 16)
			:wikitext('Alle rader med unntak av "nr." og "kommune" er i enheten km². Basert på data hentet fra [[Kartverket]].' .. getRef(frame)):done()
--	local html = tostring(tbl)
--	local dumphtml = require('Module:Dump')._dumphtml
--	return dumphtml(html)
	return tostring(tbl)
end

function p.innbprkm(frame)
	local args = getArgs(frame)
	local knr = tonumber(args['knr']) or tonumber(args[1])
	local innb = tonumber(args['innb']) or tonumber(args[2])
	local unit = ''
	local ref = ''
	
	for nr, val in pairs(args) do
		if string.lower(val) == 'enhet' then
			unit = ' <small>innb./km²</small>'
		elseif string.lower(val) == 'ref' then
			ref = getRef(frame)
		elseif string.lower(val) == 'wd' then
			knr = tonumber(wd._properties{'raw','linked','future','current','normal+','P2504'})
			innb = tonumber(wd._property{'raw','current','P1082'})
			if not knr or knr == '' then
				knr = tonumber(string.match(wd._properties{'raw','linked','future','current','normal+','P300'}, "%d+"))
			end
		end
	end
	if pcall(function() return data['kommune'][knr]['landareal'] end) and innb then
		return  mw.language.getContentLanguage():formatNum(round(innb/tonumber(data['kommune'][knr]['landareal']),2)) .. unit .. ref
	elseif pcall(function() return data['fylke'][knr]['landareal'] end) and innb then
		return mw.language.getContentLanguage():formatNum(round(innb/tonumber(data['fylke'][knr]['landareal']),2)) .. unit .. ref
	else
		local qid = mw.wikibase.getEntityIdForTitle( data['kommune'][knr]['kommune'] .. ' kommune',"nnwiki" )
		innb = tonumber(wd._property{'raw','current',qid,'P1082'})

		if pcall(function() return data['kommune'][knr]['landareal'] end) and innb then
			return  mw.language.getContentLanguage():formatNum(round(innb/tonumber(data['kommune'][knr]['landareal']),2)) .. unit .. ref
		else
			return ""
		end
	end
end

function p.main(frame)
	local args = getArgs(frame)
	local nr = tonumber(args[1]) or nil
	local verdi = 'kommune'
	local unit = ''
	local ref = ''

	for nr2, val in pairs(args) do
		if string.lower(val) == 'enhet' then
			unit = ' <small>km²</small>'
		elseif string.lower(val) == 'ref' then
			ref = getRef(frame)
		elseif string.lower(val) == 'wd' then
			nr = tonumber(wd._properties{'raw','linked','future','current','normal+','P2504'})
			if not nr or nr == '' then
				nr = tonumber(string.match(wd._properties{'raw','linked','future','current','normal+','P300'}, "%d+"))
			end
		end
	end
	
	if nr == nil then
		return ''
	end
	
	if args['hent'] then 
		verdi = string.lower(args['hent'])
	elseif nr <= 54 and nr >= 3 then
		verdi = 'fylke'
	end
	
	if nr <= 54 and nr >= 3 then
		if pcall(function() return data['fylke'][nr][verdi] end) then
			if type(data['fylke'][nr][verdi]) == "number" then
				return mw.language.getContentLanguage():formatNum(data['fylke'][nr][verdi]) .. unit .. ref
			else
				return data['fylke'][nr][verdi] .. unit .. ref
			end
		else  
			error("Not a valid fylkenummer in the list")
		end 
	end
	
	if pcall(function() return data['kommune'][nr][verdi] end) then
		if type(data['kommune'][nr][verdi]) == "number" then
			return mw.language.getContentLanguage():formatNum(data['kommune'][nr][verdi]) .. unit .. ref
		else
			return data['kommune'][nr][verdi] .. unit .. ref
		end
	else  
		error("Not a valid kommunenummer in the list")
	end 
	

end

return p