Modul:Kinfo
Utseende
Modulen «Kinfo» inneholder:
- en funksjon (main) som gjør det mulig for skriptet å hente data fra Modul:Kinfo/data ved å angi kommunenummer eller fylkesnummer.
Parametere
[rediger kilde]For alle funksjoner kan det angis tre ubenevnte parametere:
{{#invoke:Kinfo|funksjon|1|2|3}}
.
main
returnerer i utgangspunktet en verdi etter ønske.- Første verdi etter
main
(1)
må være kommunenummeret, det sendes feilmelding om den ikke finnes i listen. (kreves)- Under
main
kan man kalle påhent=
som default er satt tilkommune
.- Andre verdier som kan brukes med
hent=
er: (per 24. januar 2020 tillates kun en verdi i hent)kommune
som henter navnet på kommunen med stor forbokstav.totAreal
som henter totalt areal inkl. territorial-farvann.areal
som henter areal for fastland og øyer.havflate
som henter havflate (terretorial-farvann).apentOmrade
som henter areal for åpent område.snoIsBre
som henter areal for snø, is og bre.innsjo
som henter areal for innsjø.elvTorrfall
som henter areal for elv med tørrfall.myr
som henter areal for myr.skog
som henter areal for skog.dMark
som henter areal for dyrket mark.btBygg
som henter areal for by- og tettbebyggelse.industri
som henter areal for industriområde.annet
som henter areal for sports- og idrettsplass, alpinbakker, steinbrudd, steintipp, park, flyplass, rullebane, golfbane og gravplass.landareal
som henter areal for landareal (SSB).ferskvatn
som henter areal for ferskvatn (ferskvann inkluderer elver fra 2010 - SSB).
- Andre verdier som kan brukes med
- Under
- Verdier etter
(1)
kan være:enhet
legger på verdien «km²» til slutt (så lenge det ikke er kommune som hentes). (valgfri)ref
legger på en referanse til slutt for hvor dataen er hentet fra. (valgfri)
- Første verdi etter
innbprkm
returnerer en utregnet verdi etter parametere som er gitt.- Ved bruk av
innbprkm
må man kalle påknr=
(kommunenummer) oginnb=
(innbyggere). Kun tallverdier er godkjent, uten formateringer. (kreves)- Verdier etter
knr=
oginnb=
kan være:enhet
legger på verdien «innb./km²» til slutt (så lenge det ikke er kommune som hentes). (valgfri)ref
legger på en referanse til slutt for hvor dataen er hentet fra. (valgfri)
- Verdier etter
- Ved bruk av
tabell
returnerer en tabell for et fylke, med informasjon om alle kommune i fylke med alt av data som finnes om kommunene.- Verdi
(1)
må være et fylkesnummer (under arbeid - kreves).
- Verdi
- Bruk i infoboks
{{#invoke:Kinfo|main|wd|hent=XXXX|ref|enhet}}
- Henter kommunenummer eller fylkesnummer fra Wikidata-element/nærmeste kommune element på WD.{{#invoke:Kinfo|innbprkm|wd}}
- Henter innbyggertall og kommunenummer eller fylkesnummer fra Wikidata-element/nærmeste kommune element på WD.{{#invoke:Kinfo|main|kBefolkning}}
- Henter beste befolkningstall fra Wikidata-element/nærmeste kommune element på WD.{{#invoke:Kinfo|main|knr}}
- Henter beste kommunenummer fra Wikidata-element/nærmeste kommune element på WD.
Eksempel
[rediger kilde]Forklaring | Kode | Resultat | |||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Kommunenummer 301 for Oslo, henter navn. | {{#invoke:Kinfo|main|301}} |
Oslo | |||||||||||||||||||||||||||||||||||||||||||||||||||
Kommunenummer 301 for Oslo, henter navn med ref. | {{#invoke:Kinfo|main|301|ref}} |
Oslo[1] | |||||||||||||||||||||||||||||||||||||||||||||||||||
Kommunenummer 301 for Oslo, henter landareal med enhet. | {{#invoke:Kinfo|main|301|hent=landareal|enhet}} |
426,4 km² | |||||||||||||||||||||||||||||||||||||||||||||||||||
Kommunenummer 301 for Oslo, henter totalt areal inkl. territorial-farvann med enhet og ref. | {{#invoke:Kinfo|main|301|hent=totAreal|enhet|ref}} |
480,75 km²[1] | |||||||||||||||||||||||||||||||||||||||||||||||||||
Kommunenummer 301 for Oslo, henter myr med ref. | {{#invoke:Kinfo|main|301|hent=myr|ref}} |
6,59[1] | |||||||||||||||||||||||||||||||||||||||||||||||||||
Fylkesnummer 34 for Innlandet fylke, henter myr med ref. | {{#invoke:Kinfo|main|34|hent=myr|ref}} |
4 294,29[1] | |||||||||||||||||||||||||||||||||||||||||||||||||||
Fylkesnummer 34 for Innlandet fylke, henter landareal med enhet og ref. | {{#invoke:Kinfo|main|34|hent=landareal|enhet|ref}} |
49 390,84 km²[2] | |||||||||||||||||||||||||||||||||||||||||||||||||||
Kommunenummer 301 for Oslo kommune, henter og regner ut innbygger tetthet. | {{#invoke:Kinfo|innbprkm|knr=301|innb=673469|ref}} |
1 579,43[2] | |||||||||||||||||||||||||||||||||||||||||||||||||||
Kommunenummer 301 for Oslo kommune, henter og regner ut innbygger tetthet med enhet | {{{#invoke:Kinfo|innbprkm|knr=301|innb=673469|enhet}} |
1 579,43 innb./km² | |||||||||||||||||||||||||||||||||||||||||||||||||||
Fylkesnummer 3 for Oslo, henter alle kommuner og legger alle verdier inn i en tabell. | {{#invoke:Kinfo|tabell|3}} |
|
Referanser
[rediger kilde]- ^ a b c d e «Arealstatistikk for Norge». Kartverket. 1. januar 2020.
- ^ a b c «09280: Areal (km²), etter region, arealtype, statistikkvariabel og år». Statistisk sentralbyrå. 1. januar 2020.
local wd = require('Module:Wd-norsk')
local data = mw.loadData("Modul:Kinfo/data")
local getArgs = require('Module:Arguments').getArgs
local p = {}
function p.kBefolkning(frame) -- TODO! Get population based on date insted of preferred value.
local args = getArgs(frame)
local knr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P2504'}) or 0
for nr, val in pairs(args) do
if string.lower(val) == 'aar' then
if knr == 0 then
local qid = mw.wikibase.getEntityIdForTitle( mw.title.getCurrentTitle().text .. ' kommune',"nnwiki" )
return tonumber(frame:callParserFunction{ name = '#time:Y', args = wd._kvalifikator{'rå','enkel',qid,'P1082','P585'} })
else
return tonumber(frame:callParserFunction{ name = '#time:Y', args = wd._kvalifikator{'rå','enkel','P1082','P585'} })
end
end
end
if knr == 0 then
local qid = mw.wikibase.getEntityIdForTitle( mw.title.getCurrentTitle().text .. ' kommune',"nnwiki" )
if qid then
return wd._egenskap{'referanser','nåværende',qid,'P1082'} or ""
else
return ""
end
else
return wd._egenskap{'referanser','nåværende','P1082'} or ""
end
end
function p.knr(frame)
local knr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P2504'}) or 0
if knr == 0 then
local qid = mw.wikibase.getEntityIdForTitle( mw.title.getCurrentTitle().text .. ' kommune',"nnwiki" )
knr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best',qid,'P2504'}) or 0
end
if knr == 0 then
return ""
end
return knr
end
local function getRef(frame, definition)
if definition == "landareal" or definition == "ferskvatn" then
return frame:callParserFunction{ name = '#tag:ref', args = {
'{{kilde www |url=https://www.ssb.no/statbank/table/09280/ |tittel=09280: Areal (km²), etter region, arealtype, statistikkvariabel og år |nettside=[[Statistisk sentralbyrå]] |dato=1. januar 2020 |språk=norsk bokmål}}'
, name = 'SSB2020'} }
else
return frame:callParserFunction{ name = '#tag:ref', args = {
'{{kilde www |url=https://www.kartverket.no/kunnskap/Fakta-om-Norge/Arealstatistikk/Arealstatistikk-Norge/ |tittel=Arealstatistikk for Norge |nettside=[[Kartverket]] |dato=1. januar 2020 |språk=norsk bokmål}}'
, name = 'Kartverket2020'} }
end
end
local function tablelength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
local function round(num, numDecimalPlaces)
return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
end
local table_sort = {'kommune','totareal','areal','havflate','apentomrade','snoisbre','innsjo','elvtorrfall','myr','skog','dmark','btbygg','industri','annet','landareal','ferskvatn'}
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','Ferskvatn'}
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 containsValueFylke(value)
return data['fylke'][value] ~= nil
end
function p.tabell(frame)
local args = getArgs(frame)
local fylkenr = tonumber(args[1]) or 0
local row = ''
if containsValueFylke == nil then
error("Not a valid fylkenummer")
end
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', tablelength(header_sort))
:wikitext('Alle rader med unntak av "nr." og "kommune" er i enheten km². Basert på tall hentet fra [[Kartverket]] og [[Statistisk sentralbyrå|SSB]].' .. getRef(frame) .. getRef(frame,'landareal')):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,'landareal')
elseif string.lower(val) == 'wd' then
knr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P2504'}) or 0
innb = tonumber(wd._egenskap{'rå','nåværende','P1082'}) or 0
if not knr or knr == '' then
knr = tonumber(string.match(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P300'}, "%d+")) or 0
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 = ""
if knr ~= 0 and pcall(function() return data['kommune'][knr]['kommune'] end) then
qid = mw.wikibase.getEntityIdForTitle( data['kommune'][knr]['kommune'] .. ' kommune',"nnwiki" )
else
qid = mw.wikibase.getEntityIdForTitle( mw.title.getCurrentTitle().text .. ' kommune',"nnwiki" )
end
knr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best',qid,'P2504'})
innb = tonumber(wd._egenskap{'rå','nåværende','best',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
if args['hent'] then
ref = getRef(frame, string.lower(args['hent']))
else
ref = getRef(frame)
end
elseif string.lower(val) == 'wd' then
nr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P2504'}) or 0
if nr == 0 then --Fylke
nr = tonumber(string.match(wd._egenskaper{'rå','fremtid','nåværende','normal+','best','P300'}, "%d+")) or 0
end
if nr == 0 then
qid = mw.wikibase.getEntityIdForTitle( mw.title.getCurrentTitle().text .. ' kommune',"nnwiki" )
nr = tonumber(wd._egenskaper{'rå','fremtid','nåværende','normal+','best',qid,'P2504'})
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 <= 56 and nr >= 3 then
if pcall(function() return data['fylke'][nr][verdi] end) then
if type(tonumber(data['fylke'][nr][verdi])) == "number" then
return mw.language.getContentLanguage():formatNum(tonumber(data['fylke'][nr][verdi])) .. unit .. ref
else
if data['fylke'][nr][verdi] then
return data['fylke'][nr][verdi] .. unit .. ref
else
return ""
end
end
else
error("Not a valid fylkenummer in the list")
end
end
if pcall(function() return data['kommune'][nr][verdi] end) then
if type(tonumber(data['kommune'][nr][verdi])) == "number" then
return mw.language.getContentLanguage():formatNum(tonumber(data['kommune'][nr][verdi])) .. unit .. ref
else
if data['kommune'][nr][verdi] then
return data['kommune'][nr][verdi] .. unit .. ref
else
return ""
end
end
else
return "utdatert"
--error("Not a valid kommunenummer in the list")
end
end
return p