<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="nb">
	<id>https://www.wikisida.no/index.php?action=history&amp;feed=atom&amp;title=Modul%3AMapframe</id>
	<title>Modul:Mapframe - Sideversjonshistorikk</title>
	<link rel="self" type="application/atom+xml" href="https://www.wikisida.no/index.php?action=history&amp;feed=atom&amp;title=Modul%3AMapframe"/>
	<link rel="alternate" type="text/html" href="https://www.wikisida.no/index.php?title=Modul:Mapframe&amp;action=history"/>
	<updated>2026-04-15T13:33:22Z</updated>
	<subtitle>Versjonshistorikk for denne siden på wikien</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://www.wikisida.no/index.php?title=Modul:Mapframe&amp;diff=92&amp;oldid=prev</id>
		<title>nb&gt;Haros: argument &quot;vik kart&quot; er bedre som argument i selve artikkelen enn &quot;vis&quot; er. Legger det inn som førstevalg</title>
		<link rel="alternate" type="text/html" href="https://www.wikisida.no/index.php?title=Modul:Mapframe&amp;diff=92&amp;oldid=prev"/>
		<updated>2025-10-26T10:25:24Z</updated>

		<summary type="html">&lt;p&gt;argument &amp;quot;vik kart&amp;quot; er bedre som argument i selve artikkelen enn &amp;quot;vis&amp;quot; er. Legger det inn som førstevalg&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny side&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local math_mod = require( &amp;quot;Module:Math&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
local useLanguage = {&lt;br /&gt;
	[&amp;quot;Q17&amp;quot;] = &amp;quot;en&amp;quot;,     -- Japan&lt;br /&gt;
	[&amp;quot;Q79&amp;quot;] = &amp;quot;en&amp;quot;,     -- Egypt&lt;br /&gt;
	[&amp;quot;Q115&amp;quot;] = &amp;quot;en&amp;quot;,    -- Etiopia&lt;br /&gt;
	[&amp;quot;Q148&amp;quot;] = &amp;quot;en&amp;quot;,    -- Kina&lt;br /&gt;
	[&amp;quot;Q230&amp;quot;] = &amp;quot;en&amp;quot;,    -- Georgia&lt;br /&gt;
	[&amp;quot;Q399&amp;quot;] = &amp;quot;en&amp;quot;,    -- Armenia&lt;br /&gt;
	[&amp;quot;Q423&amp;quot;] = &amp;quot;en&amp;quot;,    -- Nord-Korea&lt;br /&gt;
	[&amp;quot;Q424&amp;quot;] = &amp;quot;en&amp;quot;,    -- Kambodsja&lt;br /&gt;
	[&amp;quot;Q668&amp;quot;] = &amp;quot;en&amp;quot;,    -- India&lt;br /&gt;
	[&amp;quot;Q711&amp;quot;] = &amp;quot;en&amp;quot;,    -- Mongolia&lt;br /&gt;
	[&amp;quot;Q794&amp;quot;] = &amp;quot;en&amp;quot;,    -- Iran&lt;br /&gt;
	[&amp;quot;Q796&amp;quot;] = &amp;quot;en&amp;quot;,    -- Irak&lt;br /&gt;
	[&amp;quot;Q801&amp;quot;] = &amp;quot;en&amp;quot;,    -- Israel&lt;br /&gt;
	[&amp;quot;Q810&amp;quot;] = &amp;quot;en&amp;quot;,    -- Jordan&lt;br /&gt;
	[&amp;quot;Q819&amp;quot;] = &amp;quot;en&amp;quot;,    -- Laos&lt;br /&gt;
	[&amp;quot;Q822&amp;quot;] = &amp;quot;en&amp;quot;,    -- Libanon&lt;br /&gt;
	[&amp;quot;Q836&amp;quot;] = &amp;quot;en&amp;quot;,    -- Myanmar&lt;br /&gt;
	[&amp;quot;Q842&amp;quot;] = &amp;quot;en&amp;quot;,    -- Oman&lt;br /&gt;
	[&amp;quot;Q843&amp;quot;] = &amp;quot;en&amp;quot;,    -- Pakistan&lt;br /&gt;
	[&amp;quot;Q846&amp;quot;] = &amp;quot;en&amp;quot;,    -- Qatar&lt;br /&gt;
	[&amp;quot;Q851&amp;quot;] = &amp;quot;en&amp;quot;,    -- Saudi-Arabia&lt;br /&gt;
	[&amp;quot;Q858&amp;quot;] = &amp;quot;en&amp;quot;,    -- Syria&lt;br /&gt;
	[&amp;quot;Q865&amp;quot;] = &amp;quot;en&amp;quot;,    -- Republikken Kina - Taiwan&lt;br /&gt;
	[&amp;quot;Q869&amp;quot;] = &amp;quot;en&amp;quot;,    -- Thailand&lt;br /&gt;
	[&amp;quot;Q878&amp;quot;] = &amp;quot;en&amp;quot;,    -- De forente arabiske emirater&lt;br /&gt;
	[&amp;quot;Q884&amp;quot;] = &amp;quot;en&amp;quot;,    -- Sør-Korea&lt;br /&gt;
	[&amp;quot;Q889&amp;quot;] = &amp;quot;en&amp;quot;,    -- Afghanistan&lt;br /&gt;
	[&amp;quot;Q902&amp;quot;] = &amp;quot;en&amp;quot;,    -- Bangladesh&lt;br /&gt;
	[&amp;quot;Q917&amp;quot;] = &amp;quot;en&amp;quot;,    -- Bhutan&lt;br /&gt;
	[&amp;quot;Q986&amp;quot;] = &amp;quot;en&amp;quot;,    -- Eritrea&lt;br /&gt;
	[&amp;quot;Q23792&amp;quot;] = &amp;quot;en&amp;quot;     -- Palestina&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local legend = {}&lt;br /&gt;
local numLegend = 0&lt;br /&gt;
local maxLegend = 5&lt;br /&gt;
&lt;br /&gt;
local bbox = {}&lt;br /&gt;
bbox.min = {}&lt;br /&gt;
bbox.max = {}&lt;br /&gt;
bbox.center = {}&lt;br /&gt;
bbox.dist = {}&lt;br /&gt;
bbox.txt = {&amp;quot;Koordinater funnet&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
autozoom = {&lt;br /&gt;
	{ dist=2000,zoom=3}, &lt;br /&gt;
	{ dist=700,zoom=4}, &lt;br /&gt;
	{ dist=300,zoom=5}, &lt;br /&gt;
	{ dist=150,zoom=6}, &lt;br /&gt;
	{ dist=50,zoom=7}, &lt;br /&gt;
	{ dist=30,zoom=8}, &lt;br /&gt;
	{ dist=10,zoom=9}, &lt;br /&gt;
	{ dist=6,zoom=10}, &lt;br /&gt;
	{ dist=4,zoom=11}, &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function hasLocalCoord()&lt;br /&gt;
	local pageWikitext = mw.title.getCurrentTitle():getContent()&lt;br /&gt;
	local treff = pageWikitext:match(&amp;quot;{{[Kk]oord|[^}]+}}&amp;quot;)&lt;br /&gt;
	if treff then&lt;br /&gt;
		local treffVis = treff:match(&amp;quot;vis&amp;quot;)&lt;br /&gt;
		local treffTittel = treff:match(&amp;quot;tittel&amp;quot;)&lt;br /&gt;
		local treffTekst = treff:match(&amp;quot;tekst&amp;quot;)&lt;br /&gt;
		if treff and treffVis and treffTittel then &lt;br /&gt;
			return treff&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function lonlat(args)&lt;br /&gt;
	local newargs = args&lt;br /&gt;
	if not args[&amp;quot;lat&amp;quot;] and not args[&amp;quot;lon&amp;quot;] then&lt;br /&gt;
		if args[&amp;quot;breddegrad&amp;quot;] and args[&amp;quot;lengdegrad&amp;quot;] then&lt;br /&gt;
			newargs[&amp;quot;lat&amp;quot;] = tonumber(args[&amp;quot;breddegrad&amp;quot;]) or nil&lt;br /&gt;
			newargs[&amp;quot;lon&amp;quot;] = tonumber(args[&amp;quot;lengdegrad&amp;quot;]) or nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return newargs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function selectSingleClaim(claims)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local selectedClaim = nil&lt;br /&gt;
	for idx,claim in pairs(claims) do&lt;br /&gt;
		if claim.rank == &amp;#039;preferred&amp;#039; then&lt;br /&gt;
			return claim&lt;br /&gt;
		end&lt;br /&gt;
		if claim.rank == &amp;#039;normal&amp;#039; then&lt;br /&gt;
			if not selectedClaim then&lt;br /&gt;
				selectedClaim = claim&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return selectedClaim&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function osmLink(entity)&lt;br /&gt;
	local osm = &amp;quot;&amp;quot;&lt;br /&gt;
	local osmval = entity:getBestStatements(&amp;quot;P402&amp;quot;)&lt;br /&gt;
	if osmval and osmval[1] and osmval[1].mainsnak[&amp;quot;datavalue&amp;quot;] then&lt;br /&gt;
		local osmid = osmval[1].mainsnak[&amp;quot;datavalue&amp;quot;].value or &amp;quot;&amp;quot;&lt;br /&gt;
		if osmid and osmid ~= &amp;quot;&amp;quot; then&lt;br /&gt;
			--osm = &amp;quot;&amp;lt;br/&amp;gt; vis på [https://www.openstreetmap.org/relation/&amp;quot; .. osmid .. &amp;quot; OSM]&amp;quot;&lt;br /&gt;
			osm = &amp;quot;[[Kategori:Sider hvor Wikidata har lenker til OpenStreetMap relation]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	osmval = entity:getBestStatements(&amp;quot;P10689&amp;quot;)&lt;br /&gt;
	if osmval and osmval[1] and osmval[1].mainsnak[&amp;quot;datavalue&amp;quot;] then&lt;br /&gt;
		local osmid = osmval[1].mainsnak[&amp;quot;datavalue&amp;quot;].value or &amp;quot;&amp;quot;&lt;br /&gt;
		if osmid and osmid ~= &amp;quot;&amp;quot; then&lt;br /&gt;
			--osm = &amp;quot;&amp;lt;br/&amp;gt; vis på [https://www.openstreetmap.org/relation/&amp;quot; .. osmid .. &amp;quot; OSM]&amp;quot;&lt;br /&gt;
			osm = osm .. &amp;quot;[[Kategori:Sider hvor Wikidata har lenker til OpenStreetMap vei]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return osm&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function allOkSnaks(entity,datatype)&lt;br /&gt;
	local retur = {}&lt;br /&gt;
	if entity.claims then&lt;br /&gt;
		for propid,props in pairs(entity.claims) do&lt;br /&gt;
			for idx,claim in ipairs(props) do&lt;br /&gt;
				if claim.rank == &amp;#039;preferred&amp;#039; or claim.rank == &amp;#039;normal&amp;#039; then&lt;br /&gt;
					local snak = claim.mainsnak&lt;br /&gt;
					if snak.snaktype == &amp;quot;value&amp;quot; and snak.datatype == datatype then&lt;br /&gt;
						local sn = {}&lt;br /&gt;
						sn.snak = snak&lt;br /&gt;
						sn.qu = claim.qualifiers&lt;br /&gt;
						table.insert(retur,sn)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return retur&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function dump(item)&lt;br /&gt;
	return &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.jsonEncode(item, mw.text.JSON_PRETTY) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function addBbox(entity)&lt;br /&gt;
	for idx,sn in ipairs(allOkSnaks(entity,&amp;quot;globe-coordinate&amp;quot;)) do&lt;br /&gt;
		local snak = sn.snak&lt;br /&gt;
		local val = snak.datavalue.value&lt;br /&gt;
		local qu = sn.qu&lt;br /&gt;
		local qutxt = &amp;quot;&amp;quot;&lt;br /&gt;
		if qu and qu.P518 then&lt;br /&gt;
			qutxt = &amp;quot; P518 &amp;quot; .. mw.wikibase.formatValues(qu.P518)&lt;br /&gt;
		end&lt;br /&gt;
		if not bbox.min.longitude or bbox.min.longitude &amp;gt; val.longitude then&lt;br /&gt;
			bbox.min.longitude = val.longitude&lt;br /&gt;
		end&lt;br /&gt;
		if not bbox.min.latitude or bbox.min.latitude &amp;gt; val.latitude then&lt;br /&gt;
			bbox.min.latitude = val.latitude&lt;br /&gt;
		end&lt;br /&gt;
		if not bbox.max.longitude or bbox.max.longitude &amp;lt; val.longitude then&lt;br /&gt;
			bbox.max.longitude = val.longitude&lt;br /&gt;
		end&lt;br /&gt;
		if not bbox.max.latitude or bbox.max.latitude &amp;lt; val.latitude then&lt;br /&gt;
			bbox.max.latitude = val.latitude&lt;br /&gt;
		end&lt;br /&gt;
		local txt = snak.property .. &amp;quot; &amp;quot; .. qutxt .. &amp;quot; &amp;quot; .. val.longitude .. &amp;quot; &amp;quot; .. val.latitude&lt;br /&gt;
		table.insert(bbox.txt,txt)&lt;br /&gt;
	end&lt;br /&gt;
	if (bbox.min.longitude) then&lt;br /&gt;
		bbox.center.longitude = (bbox.min.longitude + bbox.max.longitude)/2&lt;br /&gt;
		bbox.center.latitude = (bbox.min.latitude + bbox.max.latitude)/2&lt;br /&gt;
		bbox.dist.longitude = (bbox.max.longitude - bbox.min.longitude)&lt;br /&gt;
		bbox.dist.latitude = (bbox.max.latitude - bbox.min.latitude)&lt;br /&gt;
		bbox.haversine = HaversineDistance(&lt;br /&gt;
			bbox.max.latitude,bbox.max.longitude,&lt;br /&gt;
			bbox.min.latitude,bbox.min.longitude)&lt;br /&gt;
    end&lt;br /&gt;
	return &lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
local function bboxlist(ids)&lt;br /&gt;
	for ix,id in ipairs(ids) do&lt;br /&gt;
		local entity = mw.wikibase.getEntity(id)&lt;br /&gt;
		addBbox(entity)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- From en:Module:Sandbox/Hellknowz/CoordDistance&lt;br /&gt;
function HaversineDistance(lat1,lon1,lat2,lon2)&lt;br /&gt;
&lt;br /&gt;
    local radius = 6371 -- km&lt;br /&gt;
&lt;br /&gt;
    local dlat = math.rad(lat2-lat1)&lt;br /&gt;
    local dlon = math.rad(lon2-lon1)&lt;br /&gt;
    local a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.rad(lat1)) * math.cos(math.rad(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)&lt;br /&gt;
    local c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))&lt;br /&gt;
    return radius * c&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- the distances need to be adjusted according to the size of the frame of the map&lt;br /&gt;
local function bboxzoom(factor)&lt;br /&gt;
	for ix,v in ipairs(autozoom) do&lt;br /&gt;
		if bbox.haversine  and v.dist*factor &amp;lt; bbox.haversine then&lt;br /&gt;
			return v.zoom&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return 12&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wdCoords(entity)&lt;br /&gt;
	local wdlat,wdlon = nil,nil&lt;br /&gt;
	local category = &amp;quot;&amp;quot;&lt;br /&gt;
	if entity.claims and entity.claims[&amp;quot;P625&amp;quot;] then&lt;br /&gt;
		local claim = selectSingleClaim(entity.claims[&amp;quot;P625&amp;quot;])&lt;br /&gt;
		if claim and claim.mainsnak.datavalue then&lt;br /&gt;
			local coord = claim.mainsnak.datavalue.value or nil&lt;br /&gt;
			wdlat = coord[&amp;quot;latitude&amp;quot;] or nil&lt;br /&gt;
			wdlon = coord[&amp;quot;longitude&amp;quot;] or nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not wdlat then&lt;br /&gt;
		if entity.claims and entity.claims[&amp;quot;P159&amp;quot;] then&lt;br /&gt;
			local claim = selectSingleClaim(entity.claims[&amp;quot;P159&amp;quot;])&lt;br /&gt;
			if claim and claim.qualifiers then&lt;br /&gt;
				local qual = claim.qualifiers[&amp;quot;P625&amp;quot;]&lt;br /&gt;
				if qual and  qual[1] and qual[1].datavalue then&lt;br /&gt;
					local coord = qual[1].datavalue.value or nil&lt;br /&gt;
					wdlat = coord[&amp;quot;latitude&amp;quot;] or nil&lt;br /&gt;
					wdlon = coord[&amp;quot;longitude&amp;quot;] or nil&lt;br /&gt;
				end&lt;br /&gt;
				if wdlat then&lt;br /&gt;
					category = &amp;quot;[[Kategori:Sider med koordinater hentet fra P159]]&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return wdlat,wdlon,category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function wdGeoShape(entity)&lt;br /&gt;
	local shape = nil&lt;br /&gt;
	if entity.claims and entity.claims[&amp;quot;P3896&amp;quot;] then&lt;br /&gt;
		local claim = selectSingleClaim(entity.claims[&amp;quot;P3896&amp;quot;])&lt;br /&gt;
		local value = claim.mainsnak.datavalue.value or nil&lt;br /&gt;
		if value then&lt;br /&gt;
			local prop = {}&lt;br /&gt;
			local shape = {&lt;br /&gt;
	       	[&amp;quot;type&amp;quot;] = &amp;quot;ExternalData&amp;quot;,&lt;br /&gt;
			[&amp;quot;service&amp;quot;] = &amp;quot;page&amp;quot;,&lt;br /&gt;
			[&amp;quot;title&amp;quot;] =  value,&lt;br /&gt;
			[&amp;quot;properties&amp;quot;] = prop&lt;br /&gt;
		}&lt;br /&gt;
		return shape&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function selectMapLanguage(entity)&lt;br /&gt;
	local lang = &amp;quot;local&amp;quot;&lt;br /&gt;
	if entity.claims and entity.claims[&amp;quot;P17&amp;quot;] then&lt;br /&gt;
		local claim = selectSingleClaim(entity.claims[&amp;quot;P17&amp;quot;])&lt;br /&gt;
		if claim and claim.mainsnak.datavalue then&lt;br /&gt;
		    local value = claim.mainsnak.datavalue.value or nil&lt;br /&gt;
		    if value then&lt;br /&gt;
			    lang = useLanguage[value[&amp;quot;id&amp;quot;]] or &amp;quot;local&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return lang&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mappoint(latitude,longitude,title,description,symbol)&lt;br /&gt;
	local point = {}&lt;br /&gt;
    point[&amp;quot;type&amp;quot;] = &amp;quot;Feature&amp;quot;&lt;br /&gt;
    local geo = {}&lt;br /&gt;
    geo[&amp;quot;type&amp;quot;] = &amp;quot;Point&amp;quot;&lt;br /&gt;
	local pos = {}&lt;br /&gt;
    geo[&amp;quot;coordinates&amp;quot;] = pos&lt;br /&gt;
    -- ensure the coordinates are not too long for the geojson&lt;br /&gt;
    geo[&amp;quot;coordinates&amp;quot;][1] = math_mod._round( longitude, 6 )&lt;br /&gt;
    geo[&amp;quot;coordinates&amp;quot;][2] = math_mod._round( latitude, 6 )&lt;br /&gt;
    local prop = {}&lt;br /&gt;
    if title then&lt;br /&gt;
    	prop[&amp;quot;title&amp;quot;] = title&lt;br /&gt;
    end&lt;br /&gt;
    if description then&lt;br /&gt;
    	prop[&amp;quot;description&amp;quot;] = description&lt;br /&gt;
    end&lt;br /&gt;
    if symbol and title then&lt;br /&gt;
		numLegend = numLegend + 1&lt;br /&gt;
		prop[&amp;quot;marker-symbol&amp;quot;] = tostring(numLegend)&lt;br /&gt;
		table.insert(legend,title)&lt;br /&gt;
    end&lt;br /&gt;
    prop[&amp;quot;marker-size&amp;quot;] = &amp;quot;small&amp;quot;&lt;br /&gt;
    point[&amp;quot;properties&amp;quot;] = prop&lt;br /&gt;
    point[&amp;quot;geometry&amp;quot;] = geo&lt;br /&gt;
    return point&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function geoline(id,stroke,title)&lt;br /&gt;
	local line = {&lt;br /&gt;
		[&amp;quot;type&amp;quot;] = &amp;quot;ExternalData&amp;quot;,&lt;br /&gt;
		[&amp;quot;service&amp;quot;] = &amp;quot;geoline&amp;quot;,&lt;br /&gt;
		[&amp;quot;ids&amp;quot;] =  id,&lt;br /&gt;
        [&amp;#039;properties&amp;#039;] = {&lt;br /&gt;
        	[&amp;quot;stroke&amp;quot;] = stroke,&lt;br /&gt;
        	[&amp;quot;stroke-width&amp;quot;] = 2,&lt;br /&gt;
        	[&amp;quot;marker-size&amp;quot;] = &amp;quot;small&amp;quot;,&lt;br /&gt;
        	--[&amp;quot;marker-symbol&amp;quot;] = &amp;quot;-letter&amp;quot;,&lt;br /&gt;
        	[&amp;quot;title&amp;quot;] = title&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
     return line&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function geoshape(id,stroke,opacity)&lt;br /&gt;
	local line = {&lt;br /&gt;
		[&amp;quot;type&amp;quot;] = &amp;quot;ExternalData&amp;quot;,&lt;br /&gt;
		[&amp;quot;service&amp;quot;] = &amp;quot;geoshape&amp;quot;,&lt;br /&gt;
		[&amp;quot;ids&amp;quot;] =  id,&lt;br /&gt;
        [&amp;#039;properties&amp;#039;] = {&lt;br /&gt;
        	[&amp;quot;stroke&amp;quot;] = stroke,&lt;br /&gt;
        	[&amp;quot;stroke-width&amp;quot;] = 2,&lt;br /&gt;
        	[&amp;quot;fill&amp;quot;] = &amp;quot;#ff0000&amp;quot;,&lt;br /&gt;
        	[&amp;quot;fill-opacity&amp;quot;] = opacity or 0.1&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
     return line&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function geomask(id,stroke,opacity)&lt;br /&gt;
	local line = {&lt;br /&gt;
		[&amp;quot;type&amp;quot;] = &amp;quot;ExternalData&amp;quot;,&lt;br /&gt;
		[&amp;quot;service&amp;quot;] = &amp;quot;geomask&amp;quot;,&lt;br /&gt;
		[&amp;quot;ids&amp;quot;] =  id,&lt;br /&gt;
        [&amp;#039;properties&amp;#039;] = {&lt;br /&gt;
        	[&amp;quot;stroke&amp;quot;] = stroke,&lt;br /&gt;
        	[&amp;quot;stroke-width&amp;quot;] = 1,&lt;br /&gt;
        	[&amp;quot;fill-opacity&amp;quot;] = opacity or 0.05&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
     return line&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function showEnt(geojson,id,wdlat,wdlon,artikkel,description,stroke,title,opacity,createLink,method,symbol)&lt;br /&gt;
	local text = title&lt;br /&gt;
	if createLink and text and link then&lt;br /&gt;
		text = &amp;quot;[[&amp;quot; .. artikkel .. &amp;quot;|&amp;quot; .. title .. &amp;quot;]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local shape = nil&lt;br /&gt;
	if method == &amp;quot;geoshape&amp;quot; then&lt;br /&gt;
		shape = geoshape(id,stroke,opacity)&lt;br /&gt;
		table.insert(geojson, shape)&lt;br /&gt;
		local line = geoline(id,stroke,title)&lt;br /&gt;
		table.insert(geojson, line)&lt;br /&gt;
		if wdlat and wdlon then&lt;br /&gt;
    		local point = mappoint(wdlat,wdlon,text,description,symbol)&lt;br /&gt;
			table.insert(geojson, point)&lt;br /&gt;
		end&lt;br /&gt;
	elseif method == &amp;quot;geomask&amp;quot; then&lt;br /&gt;
		shape = geomask(id,stroke,opacity)&lt;br /&gt;
		table.insert(geojson, shape)&lt;br /&gt;
	end&lt;br /&gt;
	return geojson&lt;br /&gt;
end&lt;br /&gt;
local function showEntity(geojson,id,entity,stroke,title,opacity,createLink,method,symbol)&lt;br /&gt;
	local wdlat,wdlon = wdCoords(entity)&lt;br /&gt;
	local text = title  or mw.wikibase.label(id)&lt;br /&gt;
	local link = mw.wikibase.sitelink(id)&lt;br /&gt;
	if createLink and text and link then&lt;br /&gt;
		text = &amp;quot;[[&amp;quot; .. link .. &amp;quot;|&amp;quot; .. text .. &amp;quot;]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local meth = method or &amp;quot;geoshape&amp;quot;&lt;br /&gt;
	local bilde = nil&lt;br /&gt;
	if entity.claims and entity.claims[&amp;quot;P18&amp;quot;] then&lt;br /&gt;
		local claim = selectSingleClaim(entity.claims[&amp;quot;P18&amp;quot;])&lt;br /&gt;
		if claim then&lt;br /&gt;
			local snak = claim.mainsnak&lt;br /&gt;
			if snak.snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
   				bilde = snak.datavalue.value or nil&lt;br /&gt;
   			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local description = nil&lt;br /&gt;
	if createLink and bilde then&lt;br /&gt;
		description = &amp;quot;[[File:&amp;quot; .. bilde .. &amp;quot;]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	geojson = showEnt(geojson,id,wdlat,wdlon,link,description,stroke,text,opacity,createLink,meth,symbol)&lt;br /&gt;
&lt;br /&gt;
	return geojson&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Visualize an entity through boundary, marker with name of entity. geojson updated by showEntity&lt;br /&gt;
local function visEntity(geojson,id,stroke,opacity,method,symbol)&lt;br /&gt;
	if not id then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local entity = mw.wikibase.getEntity(id)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return showEntity(geojson,id,entity,stroke,nil,opacity,&amp;quot;createLink&amp;quot;,method,symbol)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getcurrentqids(claims)&lt;br /&gt;
	local qids = {}&lt;br /&gt;
	for idx,claim in pairs(claims) do&lt;br /&gt;
		local qualifiers = claim.qualifiers&lt;br /&gt;
		local endtime = nil&lt;br /&gt;
		if qualifiers then&lt;br /&gt;
			endtime = claim.qualifiers[&amp;quot;P582&amp;quot;] or nil&lt;br /&gt;
		end&lt;br /&gt;
		-- todo: Test on end time simplified. This assumes that all end times are in the past&lt;br /&gt;
		if not endtime then&lt;br /&gt;
			if claim.mainsnak and claim.mainsnak.datavalue and claim.mainsnak.datavalue.value then&lt;br /&gt;
				local qid = claim.mainsnak.datavalue.value[&amp;#039;id&amp;#039;] or nil&lt;br /&gt;
				if qid then&lt;br /&gt;
					table.insert(qids, qid)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return qids&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function visClaims(geojson,claims,stroke,opacity,method,usesymbol)&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for idx,claim in pairs(claims) do&lt;br /&gt;
		local qualifiers = claim.qualifiers&lt;br /&gt;
		local endtime = nil&lt;br /&gt;
		if qualifiers then&lt;br /&gt;
			endtime = claim.qualifiers[&amp;quot;P582&amp;quot;] or nil&lt;br /&gt;
		end&lt;br /&gt;
		-- todo: Test on end time simplified. This assumes that all end times are in the past&lt;br /&gt;
		if not endtime then&lt;br /&gt;
			local id = claim.mainsnak.datavalue.value[&amp;#039;id&amp;#039;] or nil&lt;br /&gt;
			local symbol = nil&lt;br /&gt;
			if usesymbol and numLegend &amp;lt; 99 then&lt;br /&gt;
				symbol = &amp;quot;1&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			visEntity(geojson,id,stroke,opacity,method,symbol)&lt;br /&gt;
			count = count+1&lt;br /&gt;
			&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return geojson&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function includeLocation(geojson,entity)&lt;br /&gt;
	if not entity or not entity.claims then&lt;br /&gt;
		return geojson&lt;br /&gt;
	end&lt;br /&gt;
	local claims = entity.claims[&amp;quot;P131&amp;quot;] or entity.claims[&amp;quot;P276&amp;quot;] or nil&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return geojson&lt;br /&gt;
	end	&lt;br /&gt;
	qids = getcurrentqids(claims)&lt;br /&gt;
	if #qids&amp;gt;1 then&lt;br /&gt;
		bboxlist(qids)&lt;br /&gt;
	end&lt;br /&gt;
	local stroke = &amp;quot;#888888&amp;quot;&lt;br /&gt;
	local opacity = 0.1&lt;br /&gt;
	local shape = geomask(qids,stroke,opacity)&lt;br /&gt;
	table.insert(geojson, shape)&lt;br /&gt;
	return geojson&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function includeProp(geojson,entity,prop)&lt;br /&gt;
	if not entity or not prop or not entity.claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local claims = entity.claims[prop] or nil&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local stroke = &amp;quot;#880000&amp;quot;&lt;br /&gt;
	local opacity = 0.1&lt;br /&gt;
	visClaims(geojson,claims,stroke,opacity,&amp;quot;geoshape&amp;quot;,&amp;quot;bruk symbol&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	return geojson&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeLegend()&lt;br /&gt;
	local text = &amp;quot;&amp;quot;&lt;br /&gt;
	for idx,leg in ipairs(legend) do&lt;br /&gt;
		text = text  .. idx .. &amp;quot; = &amp;quot; .. leg .. &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if numLegend&amp;gt;maxLegend then&lt;br /&gt;
    	text = string.format([[&lt;br /&gt;
				&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;sentrert&amp;quot;&amp;gt;%s nummererte markører&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			]], numLegend, text)&lt;br /&gt;
	end&lt;br /&gt;
	if numLegend &amp;gt; 0 then&lt;br /&gt;
		text = text .. &amp;quot;[[Kategori:Sider med kart med nummererte markører]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mapNoWikidata(args,infoboks)&lt;br /&gt;
	local geojson = {}&lt;br /&gt;
	local zoom = args[&amp;quot;zoom&amp;quot;] or 8&lt;br /&gt;
	local lat = args[&amp;quot;latitude&amp;quot;] or args[&amp;quot;lat&amp;quot;]&lt;br /&gt;
	local lon = args[&amp;quot;longitude&amp;quot;] or args[&amp;quot;lon&amp;quot;]&lt;br /&gt;
	if not lat or not lon then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
    local point = mappoint(lat,lon)&lt;br /&gt;
	local width = tonumber(args[&amp;quot;width&amp;quot;]) or 300&lt;br /&gt;
	local height  = tonumber(args[&amp;quot;height&amp;quot;]) or width&lt;br /&gt;
	local text = args[&amp;quot;text&amp;quot;]  or &amp;quot;&amp;quot;&lt;br /&gt;
	table.insert(geojson, point)&lt;br /&gt;
	local frameargs = {&lt;br /&gt;
    		[&amp;#039;height&amp;#039;] = height,&lt;br /&gt;
    		[&amp;#039;width&amp;#039;] = width,&lt;br /&gt;
    		[&amp;#039;align&amp;#039;] = align&lt;br /&gt;
    		}&lt;br /&gt;
    if zoom and zoom ~= &amp;#039;auto&amp;#039; then&lt;br /&gt;
    	frameargs[&amp;#039;zoom&amp;#039;] = zoom&lt;br /&gt;
    	frameargs[&amp;#039;latitude&amp;#039;] = lat&lt;br /&gt;
    	frameargs[&amp;#039;longitude&amp;#039;] = lon&lt;br /&gt;
    end&lt;br /&gt;
	local linkargs = {&lt;br /&gt;
    		[&amp;#039;height&amp;#039;] = height,&lt;br /&gt;
    		[&amp;#039;width&amp;#039;] = width,&lt;br /&gt;
    		[&amp;#039;align&amp;#039;] = align,&lt;br /&gt;
    		[&amp;#039;latitude&amp;#039;] = lat,&lt;br /&gt;
    		[&amp;#039;longitude&amp;#039;] = lon,&lt;br /&gt;
    		[&amp;#039;zoom&amp;#039;] = zoom or 8&lt;br /&gt;
    	}&lt;br /&gt;
    local mlink = &amp;#039;&amp;#039;&lt;br /&gt;
    local klink = &amp;#039;&amp;#039;&lt;br /&gt;
    if infobox then&lt;br /&gt;
--    	mlink = &amp;#039;&amp;lt;br/&amp;gt;&amp;#039; .. mw.getCurrentFrame():extensionTag(&amp;#039;maplink&amp;#039;, mw.text.jsonEncode(geojson), linkargs)&lt;br /&gt;
    	klink = &amp;#039;&amp;lt;br/&amp;gt;&amp;#039; .. mw.getCurrentFrame():expandTemplate{title=&amp;#039;koord&amp;#039;,args = { lat, lon, vis=&amp;#039;tekst&amp;#039;} }&lt;br /&gt;
    end&lt;br /&gt;
   	frameargs[&amp;#039;text&amp;#039;] = text .. mlink .. klink&lt;br /&gt;
	return  mw.getCurrentFrame():extensionTag(&amp;#039;mapframe&amp;#039;, mw.text.jsonEncode(geojson), frameargs)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getIds(args)&lt;br /&gt;
	local ids= {}&lt;br /&gt;
	local id = args[&amp;#039;id&amp;#039;] or args[1] or nil	&lt;br /&gt;
	if id == &amp;quot;&amp;quot; then&lt;br /&gt;
		id = nil&lt;br /&gt;
	end&lt;br /&gt;
	if id ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		local ida = {}&lt;br /&gt;
		for ident in mw.ustring.gmatch(id, &amp;#039;Q%d+&amp;#039; )  do&lt;br /&gt;
			local entity = mw.wikibase.getEntity(ident) or nil&lt;br /&gt;
			local id1 = entity.id&lt;br /&gt;
			local lab = mw.wikibase.label( id1 )&lt;br /&gt;
			if lab then&lt;br /&gt;
				ida[lab] = id1&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(ids,id1)&lt;br /&gt;
		end&lt;br /&gt;
		for lab,id2 in pairs(ida) do&lt;br /&gt;
			--table.insert(ids,id2)&lt;br /&gt;
		end&lt;br /&gt;
		--ids = mw.text.split( id, &amp;#039;,&amp;#039;, true )&lt;br /&gt;
		if #ids ~= 1 then&lt;br /&gt;
			id = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	--local entity = mw.wikibase.getEntity(id) or nil&lt;br /&gt;
	--if not id then&lt;br /&gt;
	--	if not entity then&lt;br /&gt;
	--		return &amp;quot;&amp;quot;&lt;br /&gt;
	--	end&lt;br /&gt;
	--	id = entity.id&lt;br /&gt;
	--	table.insert(ids, id)&lt;br /&gt;
	--end&lt;br /&gt;
	return ids&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function map2(args,infobox,visKoord)&lt;br /&gt;
	local id = args[&amp;#039;id&amp;#039;] or args[1] or nil&lt;br /&gt;
	if id == &amp;quot;&amp;quot; then&lt;br /&gt;
		id = nil&lt;br /&gt;
	end&lt;br /&gt;
	local entity = mw.wikibase.getEntity(id) or nil&lt;br /&gt;
	if not id then&lt;br /&gt;
		if not entity then&lt;br /&gt;
			return &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		id = entity.id&lt;br /&gt;
	end&lt;br /&gt;
	local out = args[&amp;quot;out&amp;quot;] or nil&lt;br /&gt;
	local width = args[&amp;quot;width&amp;quot;] or nil&lt;br /&gt;
	if width ~= &amp;quot;full&amp;quot; then&lt;br /&gt;
		width = tonumber(args[&amp;quot;width&amp;quot;]) or 300&lt;br /&gt;
	end&lt;br /&gt;
	local height  = tonumber(args[&amp;quot;height&amp;quot;]) or width&lt;br /&gt;
	if height == &amp;quot;full&amp;quot; then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	addBbox(entity)&lt;br /&gt;
	&lt;br /&gt;
	local zoom = args[&amp;quot;zoom&amp;quot;] or 8&lt;br /&gt;
	local lat = args[&amp;quot;latitude&amp;quot;] or args[&amp;quot;lat&amp;quot;]&lt;br /&gt;
	local lon = args[&amp;quot;longitude&amp;quot;] or args[&amp;quot;lon&amp;quot;]&lt;br /&gt;
	local includeProperty = args[&amp;quot;vis egenskap&amp;quot;]  or args[&amp;quot;include property&amp;quot;] or nil&lt;br /&gt;
	local wdlat,wdlon,coordcat = wdCoords(entity)&lt;br /&gt;
	if not lat or not lon then&lt;br /&gt;
		lat = wdlat&lt;br /&gt;
		lon = wdlon&lt;br /&gt;
	end&lt;br /&gt;
	local centerLat = lat&lt;br /&gt;
	local centerLon = lon&lt;br /&gt;
    if not lon or not lat then&lt;br /&gt;
    	return &amp;quot;[[Kategori:Sider hvor kartmodul mangler koordinater]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
	local text = args[&amp;quot;text&amp;quot;]  or mw.wikibase.label(id) or &amp;quot;&amp;quot;&lt;br /&gt;
	local align = args[&amp;quot;align&amp;quot;]  or &amp;#039;right&amp;#039;&lt;br /&gt;
	local lang = selectMapLanguage(entity) &lt;br /&gt;
	&lt;br /&gt;
	local geojson = {}&lt;br /&gt;
	local stroke = &amp;quot;#ff0000&amp;quot;&lt;br /&gt;
	local title = nil&lt;br /&gt;
	local opacity = 0.1&lt;br /&gt;
	if includeProperty then&lt;br /&gt;
		opacity = 0.0&lt;br /&gt;
	end&lt;br /&gt;
	showEntity(geojson,id,entity,stroke,title,opacity)&lt;br /&gt;
	if args[&amp;#039;marker&amp;#039;] and lat and lon then&lt;br /&gt;
    	local point = mappoint(lat,lon)&lt;br /&gt;
		table.insert(geojson, point)&lt;br /&gt;
	end&lt;br /&gt;
	includeLocation(geojson,entity)&lt;br /&gt;
	if includeProperty then&lt;br /&gt;
		local props = mw.text.split( includeProperty, &amp;#039;,&amp;#039;, true )&lt;br /&gt;
		for i,pid in ipairs(props) do&lt;br /&gt;
			includeProp(geojson,entity,pid)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local frameargs = {&lt;br /&gt;
    		[&amp;#039;height&amp;#039;] = height,&lt;br /&gt;
    		[&amp;#039;width&amp;#039;] = width,&lt;br /&gt;
    		[&amp;#039;align&amp;#039;] = align,&lt;br /&gt;
    		[&amp;#039;lang&amp;#039;] = lang&lt;br /&gt;
    	}&lt;br /&gt;
	if zoom and zoom == &amp;#039;auto&amp;#039; then&lt;br /&gt;
  	&lt;br /&gt;
    	centerLat = bbox.center.latitude&lt;br /&gt;
    	centerLon = bbox.center.longitude&lt;br /&gt;
    	local factor = width/300&lt;br /&gt;
    	zoom = bboxzoom(factor)&lt;br /&gt;
    	if visKoord == &amp;quot;debug&amp;quot; then&lt;br /&gt;
    		text = text .. &amp;quot; &amp;quot; .. dump(bbox)   -- for debug&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
    if zoom and zoom ~= &amp;#039;auto&amp;#039; then&lt;br /&gt;
   	&lt;br /&gt;
    	frameargs[&amp;#039;zoom&amp;#039;] = zoom&lt;br /&gt;
    	frameargs[&amp;#039;latitude&amp;#039;] = centerLat&lt;br /&gt;
    	frameargs[&amp;#039;longitude&amp;#039;] = centerLon&lt;br /&gt;
    end&lt;br /&gt;
	local linkargs = {&lt;br /&gt;
    		[&amp;#039;height&amp;#039;] = height,&lt;br /&gt;
    		[&amp;#039;width&amp;#039;] = width,&lt;br /&gt;
    		[&amp;#039;align&amp;#039;] = align,&lt;br /&gt;
    		[&amp;#039;latitude&amp;#039;] = lat,&lt;br /&gt;
    		[&amp;#039;longitude&amp;#039;] = lon,&lt;br /&gt;
    		[&amp;#039;zoom&amp;#039;] = zoom or 8,&lt;br /&gt;
    		[&amp;#039;lang&amp;#039;] = lang&lt;br /&gt;
    	}&lt;br /&gt;
    if out == &amp;quot;geojson&amp;quot; then&lt;br /&gt;
    	return &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.jsonEncode(geojson, mw.text.JSON_PRETTY) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
    	local mlink = &amp;#039;&amp;#039;&lt;br /&gt;
        local klink = &amp;#039;&amp;#039;&lt;br /&gt;
     	if text then&lt;br /&gt;
    		if infobox then&lt;br /&gt;
    			local koordmal = &amp;quot;[[Kategori:Sider med lokal koord mal til tittelfelt]]&amp;quot;&lt;br /&gt;
    			if not hasLocalCoord() then&lt;br /&gt;
    				visKoord = &amp;quot;tittel&amp;quot;&lt;br /&gt;
    				koordmal = &amp;quot;&amp;quot;&lt;br /&gt;
    			end&lt;br /&gt;
--    			mlink = &amp;#039;&amp;lt;br/&amp;gt;&amp;#039; .. mw.getCurrentFrame():extensionTag(&amp;#039;maplink&amp;#039;, mw.text.jsonEncode(geojson), linkargs)&lt;br /&gt;
                if visKoord and visKoord == &amp;#039;tittel&amp;#039; then&lt;br /&gt;
    	            klink = &amp;#039;&amp;lt;br/&amp;gt;&amp;#039; .. mw.getCurrentFrame():expandTemplate{title=&amp;#039;koord&amp;#039;,args = { lat, lon , vis=&amp;#039;tekst,tittel&amp;#039;} }&lt;br /&gt;
    	        else&lt;br /&gt;
    	            klink = &amp;#039;&amp;lt;br/&amp;gt;&amp;#039; .. mw.getCurrentFrame():expandTemplate{title=&amp;#039;koord&amp;#039;,args = { lat, lon , vis=&amp;#039;tekst&amp;#039;} }&lt;br /&gt;
    	        end&lt;br /&gt;
    			frameargs[&amp;#039;frameless&amp;#039;] = &amp;#039;frameless&amp;#039;&lt;br /&gt;
    			return  mw.getCurrentFrame():extensionTag(&amp;#039;mapframe&amp;#039;, mw.text.jsonEncode(geojson), frameargs) .. &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;&lt;br /&gt;
    			.. makeLegend() .. text .. mlink .. klink&lt;br /&gt;
    			.. osmLink(entity) .. koordmal .. coordcat&lt;br /&gt;
    		end&lt;br /&gt;
    		frameargs[&amp;#039;text&amp;#039;] = makeLegend() .. text .. mlink .. klink&lt;br /&gt;
    	end&lt;br /&gt;
	return  mw.getCurrentFrame():extensionTag(&amp;#039;mapframe&amp;#039;, mw.text.jsonEncode(geojson), frameargs)&lt;br /&gt;
	end&lt;br /&gt;
--    return &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.jsonEncode(geojson, mw.text.JSON_PRETTY) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot; &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function maptest(args,infobox,visKoord)&lt;br /&gt;
	local ids = getIds(args)&lt;br /&gt;
	local id = ids[1] or nil&lt;br /&gt;
	if id == &amp;quot;&amp;quot; then&lt;br /&gt;
		id = nil&lt;br /&gt;
	end&lt;br /&gt;
	local entity = mw.wikibase.getEntity(id) or nil&lt;br /&gt;
	if not id then&lt;br /&gt;
		if not entity then&lt;br /&gt;
			return &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		id = entity.id&lt;br /&gt;
	end&lt;br /&gt;
	local out = args[&amp;quot;out&amp;quot;] or nil&lt;br /&gt;
	local width = args[&amp;quot;width&amp;quot;] or nil&lt;br /&gt;
	if width ~= &amp;quot;full&amp;quot; then&lt;br /&gt;
		width = tonumber(args[&amp;quot;width&amp;quot;]) or 300&lt;br /&gt;
	end&lt;br /&gt;
	local height  = tonumber(args[&amp;quot;height&amp;quot;]) or width&lt;br /&gt;
	if height == &amp;quot;full&amp;quot; then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for idx,ident in ipairs(ids) do&lt;br /&gt;
		local entity = mw.wikibase.getEntity(ident) or nil&lt;br /&gt;
		addBbox(entity)&lt;br /&gt;
	end&lt;br /&gt;
	local zoom = args[&amp;quot;zoom&amp;quot;] or 8&lt;br /&gt;
	local zoomadd = args[&amp;quot;zoomadd&amp;quot;] or 0&lt;br /&gt;
	local lat = args[&amp;quot;latitude&amp;quot;] or args[&amp;quot;lat&amp;quot;]&lt;br /&gt;
	local lon = args[&amp;quot;longitude&amp;quot;] or args[&amp;quot;lon&amp;quot;]&lt;br /&gt;
	local includeProperty = args[&amp;quot;vis egenskap&amp;quot;]  or args[&amp;quot;include property&amp;quot;] or nil&lt;br /&gt;
	local wdlat,wdlon,coordcat = wdCoords(entity)&lt;br /&gt;
	if not lat or not lon then&lt;br /&gt;
		lat = wdlat&lt;br /&gt;
		lon = wdlon&lt;br /&gt;
	end&lt;br /&gt;
	local centerLat = lat&lt;br /&gt;
	local centerLon = lon&lt;br /&gt;
    if #ids&amp;lt;2 and (not lon or not lat) then&lt;br /&gt;
    	return &amp;quot;[[Kategori:Sider hvor kartmodul mangler koordinater]]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
	local text = args[&amp;quot;text&amp;quot;]  or mw.wikibase.label(id) or &amp;quot;&amp;quot;&lt;br /&gt;
	local align = args[&amp;quot;align&amp;quot;]  or &amp;#039;right&amp;#039;&lt;br /&gt;
	local lang = selectMapLanguage(entity) &lt;br /&gt;
	&lt;br /&gt;
	local geojson = {}&lt;br /&gt;
	local stroke = &amp;quot;#ff0000&amp;quot;&lt;br /&gt;
	local title = nil&lt;br /&gt;
	local opacity = 0.1&lt;br /&gt;
	if includeProperty then&lt;br /&gt;
		opacity = 0.0&lt;br /&gt;
	end&lt;br /&gt;
	for idx,ident in ipairs(ids) do&lt;br /&gt;
		local entity = mw.wikibase.getEntity(ident) or nil&lt;br /&gt;
		local symbol = nil&lt;br /&gt;
		if numLegend &amp;lt; 99 then&lt;br /&gt;
				symbol = &amp;quot;1&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		visEntity(geojson,ident,stroke,opacity,&amp;quot;geoshape&amp;quot;,symbol)&lt;br /&gt;
		--showEntity(geojson,ident,entity,stroke,title,opacity)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;marker&amp;#039;] and lat and lon then&lt;br /&gt;
    	local point = mappoint(lat,lon)&lt;br /&gt;
		table.insert(geojson, point)&lt;br /&gt;
	end&lt;br /&gt;
	includeLocation(geojson,entity)&lt;br /&gt;
	if includeProperty then&lt;br /&gt;
		local props = mw.text.split( includeProperty, &amp;#039;,&amp;#039;, true )&lt;br /&gt;
		for i,pid in ipairs(props) do&lt;br /&gt;
			includeProp(geojson,entity,pid)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local frameargs = {&lt;br /&gt;
    		[&amp;#039;height&amp;#039;] = height,&lt;br /&gt;
    		[&amp;#039;width&amp;#039;] = width,&lt;br /&gt;
    		[&amp;#039;align&amp;#039;] = align,&lt;br /&gt;
    		[&amp;#039;lang&amp;#039;] = lang&lt;br /&gt;
    	}&lt;br /&gt;
	if zoom and zoom == &amp;#039;auto&amp;#039; then&lt;br /&gt;
  	&lt;br /&gt;
    	centerLat = bbox.center.latitude&lt;br /&gt;
    	centerLon = bbox.center.longitude&lt;br /&gt;
    	local factor = width/300&lt;br /&gt;
    	zoom = tostring(tonumber(bboxzoom(factor))+tonumber(zoomadd))&lt;br /&gt;
    	if visKoord == &amp;quot;debug&amp;quot; then&lt;br /&gt;
    		text = text .. &amp;quot; &amp;quot; .. dump(bbox)   -- for debug&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
    if zoom and zoom ~= &amp;#039;auto&amp;#039; then&lt;br /&gt;
   	&lt;br /&gt;
    	frameargs[&amp;#039;zoom&amp;#039;] = zoom&lt;br /&gt;
    	frameargs[&amp;#039;latitude&amp;#039;] = centerLat&lt;br /&gt;
    	frameargs[&amp;#039;longitude&amp;#039;] = centerLon&lt;br /&gt;
    end&lt;br /&gt;
	local linkargs = {&lt;br /&gt;
    		[&amp;#039;height&amp;#039;] = height,&lt;br /&gt;
    		[&amp;#039;width&amp;#039;] = width,&lt;br /&gt;
    		[&amp;#039;align&amp;#039;] = align,&lt;br /&gt;
    		[&amp;#039;latitude&amp;#039;] = lat,&lt;br /&gt;
    		[&amp;#039;longitude&amp;#039;] = lon,&lt;br /&gt;
    		[&amp;#039;zoom&amp;#039;] = zoom or 8,&lt;br /&gt;
    		[&amp;#039;lang&amp;#039;] = lang&lt;br /&gt;
    	}&lt;br /&gt;
    if out == &amp;quot;geojson&amp;quot; then&lt;br /&gt;
    	return &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.jsonEncode(geojson, mw.text.JSON_PRETTY) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
    	local mlink = &amp;#039;&amp;#039;&lt;br /&gt;
        local klink = &amp;#039;&amp;#039;&lt;br /&gt;
     	if text then&lt;br /&gt;
    		if infobox then&lt;br /&gt;
    			local koordmal = &amp;quot;[[Kategori:Sider med lokal koord mal til tittelfelt]]&amp;quot;&lt;br /&gt;
    			if not hasLocalCoord() then&lt;br /&gt;
    				visKoord = &amp;quot;tittel&amp;quot;&lt;br /&gt;
    				koordmal = &amp;quot;&amp;quot;&lt;br /&gt;
    			end&lt;br /&gt;
--    			mlink = &amp;#039;&amp;lt;br/&amp;gt;&amp;#039; .. mw.getCurrentFrame():extensionTag(&amp;#039;maplink&amp;#039;, mw.text.jsonEncode(geojson), linkargs)&lt;br /&gt;
                if visKoord and visKoord == &amp;#039;tittel&amp;#039; then&lt;br /&gt;
    	            klink = &amp;#039;&amp;lt;br/&amp;gt;&amp;#039; .. mw.getCurrentFrame():expandTemplate{title=&amp;#039;koord&amp;#039;,args = { lat, lon , vis=&amp;#039;tekst,tittel&amp;#039;} }&lt;br /&gt;
    	        else&lt;br /&gt;
    	            klink = &amp;#039;&amp;lt;br/&amp;gt;&amp;#039; .. mw.getCurrentFrame():expandTemplate{title=&amp;#039;koord&amp;#039;,args = { lat, lon , vis=&amp;#039;tekst&amp;#039;} }&lt;br /&gt;
    	        end&lt;br /&gt;
    			frameargs[&amp;#039;frameless&amp;#039;] = &amp;#039;frameless&amp;#039;&lt;br /&gt;
    			return  mw.getCurrentFrame():extensionTag(&amp;#039;mapframe&amp;#039;, mw.text.jsonEncode(geojson), frameargs) .. &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;&lt;br /&gt;
    			.. makeLegend() .. text .. mlink .. klink&lt;br /&gt;
    			.. osmLink(entity) .. koordmal .. coordcat&lt;br /&gt;
    		end&lt;br /&gt;
    		frameargs[&amp;#039;text&amp;#039;] = text ..  &amp;quot;&amp;lt;br /&amp;gt;(test)&amp;lt;br /&amp;gt;&amp;quot; ..makeLegend() ..  mlink .. klink&lt;br /&gt;
    	end&lt;br /&gt;
		return  mw.getCurrentFrame():extensionTag(&amp;#039;mapframe&amp;#039;, mw.text.jsonEncode(geojson), frameargs)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.infoboxLocation(frame)&lt;br /&gt;
--	return &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.jsonEncode(frame:getParent().args, mw.text.JSON_PRETTY) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
    local args = lonlat(mw.getCurrentFrame():getParent().args)&lt;br /&gt;
    local argframe = mw.getCurrentFrame().args&lt;br /&gt;
    local vis = args[&amp;quot;vis kart&amp;quot;] or args[&amp;quot;vis&amp;quot;] or argframe[&amp;quot;vis&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
    if vis == &amp;quot;nei&amp;quot; then&lt;br /&gt;
    	return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    args[&amp;quot;width&amp;quot;] = args[&amp;quot;width&amp;quot;] or argframe[&amp;quot;width&amp;quot;] or 300&lt;br /&gt;
    local zoom = args[&amp;quot;zoom&amp;quot;] or argframe[&amp;quot;zoom&amp;quot;] or nil&lt;br /&gt;
    if zoom and zoom ~= &amp;#039;auto&amp;#039; then&lt;br /&gt;
	    args[&amp;quot;zoom&amp;quot;] = tonumber(args[&amp;quot;zoom&amp;quot;]) or tonumber(argframe[&amp;quot;zoom&amp;quot;]) or 8&lt;br /&gt;
	else &lt;br /&gt;
		if not zoom then&lt;br /&gt;
			args[&amp;quot;zoom&amp;quot;] = 8&lt;br /&gt;
		else&lt;br /&gt;
			args[&amp;quot;zoom&amp;quot;] = &amp;#039;auto&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
	if not args[&amp;quot;vis egenskap&amp;quot;] then&lt;br /&gt;
		args[&amp;quot;vis egenskap&amp;quot;] = argframe[&amp;quot;vis egenskap&amp;quot;] or nil&lt;br /&gt;
	end&lt;br /&gt;
    args[1] = &amp;quot;&amp;quot;&lt;br /&gt;
    args[&amp;quot;align&amp;quot;] = &amp;quot;center&amp;quot;&lt;br /&gt;
    if argframe[&amp;quot;karttest&amp;quot;] == &amp;quot;ja&amp;quot; then&lt;br /&gt;
		return maptest(args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local maptxt = map2(args,1,vis)&lt;br /&gt;
	if not maptxt or maptxt ==&amp;quot;&amp;quot; then&lt;br /&gt;
		return mapNoWikidata(args,1)&lt;br /&gt;
	end&lt;br /&gt;
	return maptxt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mapkilde(args)&lt;br /&gt;
	local pageWikitext = mw.title.getCurrentTitle():getContent()&lt;br /&gt;
	local kartid = args[&amp;quot;kartid&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local regtxt = &amp;quot;{{[Kk]artlenke|[^}]+}}&amp;quot;&lt;br /&gt;
	local txt = kartid&lt;br /&gt;
&lt;br /&gt;
	for kartmal in mw.ustring.gmatch(pageWikitext, regtxt )  do&lt;br /&gt;
		local aa = {}&lt;br /&gt;
		local xxx = mw.text.split(kartmal, &amp;#039;|&amp;#039;, true )&lt;br /&gt;
		for j,pkval in ipairs(xxx) do&lt;br /&gt;
			local pk = mw.text.split(pkval, &amp;#039;=&amp;#039;, true )&lt;br /&gt;
		&lt;br /&gt;
			aa[pk[1]] = pk[2]&lt;br /&gt;
		end&lt;br /&gt;
		if aa[&amp;quot;kartid&amp;quot;] and mw.ustring.find(aa[&amp;quot;kartid&amp;quot;], kartid ) then&lt;br /&gt;
&lt;br /&gt;
		txt = txt .. &amp;quot;&amp;lt;br/&amp;gt;&amp;quot; .. kartmal&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local argmap = {}&lt;br /&gt;
	argmap[&amp;quot;zoom&amp;quot;] = &amp;quot;auto&amp;quot;&lt;br /&gt;
	argmap[&amp;quot;id&amp;quot;] = txt&lt;br /&gt;
	return maptest(argmap)&lt;br /&gt;
--	return nil&lt;br /&gt;
&lt;br /&gt;
	--return txt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local regtxtid = &amp;quot;Q%d+&amp;quot;&lt;br /&gt;
local regtxtpoint = &amp;quot;Point%(.*%)&amp;quot;&lt;br /&gt;
local regtxtlink = &amp;quot;https://no.wikipedia.org/wiki/.*&amp;gt;&amp;quot; -- &amp;lt;https://no.wikipedia.org/wiki/Vikeholmen_fyr&amp;gt;&lt;br /&gt;
local regtxtimg = &amp;quot;commons:.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local function gsparqlid(txt)&lt;br /&gt;
	for ident in mw.ustring.gmatch(txt, regtxtid )  do&lt;br /&gt;
		return ident&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function gsparqltxt(txt,regtxt,lstart,lend)&lt;br /&gt;
	if not txt then return nil end&lt;br /&gt;
	for ix, txt1 in ipairs(txt )  do&lt;br /&gt;
		for txt2 in mw.ustring.gmatch(txt1, regtxt )  do&lt;br /&gt;
			local len = mw.ustring.len( txt2 )&lt;br /&gt;
			return mw.ustring.sub( txt2, lstart, len-lend )&lt;br /&gt;
			--return mw.text.split(p, &amp;#039;[ ,]&amp;#039;, false )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function gsparqlpos(txt)&lt;br /&gt;
	local p = gsparqltxt(txt,regtxtpoint,7,1)&lt;br /&gt;
	if P then&lt;br /&gt;
		return mw.text.split(p, &amp;#039;[ ,]&amp;#039;, false )&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function gsparqlimg(txt)&lt;br /&gt;
	return gsparqltxt(txt,regtxtimg,9,0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function gsparqlpos2(txt)&lt;br /&gt;
	if not txt then return nil end&lt;br /&gt;
	for ix, txt1 in ipairs(txt )  do&lt;br /&gt;
		for postxt in mw.ustring.gmatch(txt1, regtxtpoint )  do&lt;br /&gt;
			local len = mw.ustring.len( postxt )&lt;br /&gt;
			local p = mw.ustring.sub( postxt, 7, len-1 )&lt;br /&gt;
			return mw.text.split(p, &amp;#039;[ ,]&amp;#039;, false )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function gsparqllink(txt)&lt;br /&gt;
	if not txt then return nil end&lt;br /&gt;
	for postxt in mw.ustring.gmatch(txt, regtxtlink )  do&lt;br /&gt;
		local len = mw.ustring.len( postxt )&lt;br /&gt;
		return mw.ustring.sub( postxt, 31, len-1 )&lt;br /&gt;
		--return mw.text.split(p, &amp;#039;[ ,]&amp;#039;, false )&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local log = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function gsparqlLine(geojson,line,ix)&lt;br /&gt;
	local g = {}&lt;br /&gt;
	local g2 = {}&lt;br /&gt;
	local xxx = mw.text.split(line, &amp;#039;	&amp;#039;, true )&lt;br /&gt;
	local id = gsparqlid(xxx[1])&lt;br /&gt;
	local pos = gsparqlpos2(xxx)&lt;br /&gt;
	local link = gsparqllink(line)&lt;br /&gt;
	local img = gsparqlimg(xxx) or &amp;quot;&amp;quot;&lt;br /&gt;
	if id and pos then&lt;br /&gt;
		g[&amp;quot;ix&amp;quot;] = ix&lt;br /&gt;
		&lt;br /&gt;
		g[&amp;quot;xxx&amp;quot;] = xxx&lt;br /&gt;
		g[&amp;quot;id&amp;quot;] = id&lt;br /&gt;
		g[&amp;quot;name&amp;quot;] = xxx[2]&lt;br /&gt;
		local title = xxx[2]&lt;br /&gt;
		--title = gsparqllink(line)&lt;br /&gt;
		--local link = nil -- mw.wikibase.label(id)&lt;br /&gt;
		if title and link then&lt;br /&gt;
			title = &amp;quot;[[&amp;quot; .. link .. &amp;quot;|&amp;quot; .. title .. &amp;quot;]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		g[&amp;quot;pos&amp;quot;] = pos&lt;br /&gt;
		local description = nil&lt;br /&gt;
		if xxx[3] and (img and img ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
			local lang = mw.language.getContentLanguage()&lt;br /&gt;
			description = lang:ucfirst( xxx[3]) .. &amp;quot;[[File:&amp;quot; .. img .. &amp;quot;]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		local artikkel = nil&lt;br /&gt;
		local stroke = &amp;quot;#880000&amp;quot;&lt;br /&gt;
		local opacity = 0.1&lt;br /&gt;
		local symbol = &amp;quot;1&amp;quot;&lt;br /&gt;
		log = g&lt;br /&gt;
		--local marker = mappoint(tonumber(pos[1]),tonumber(pos[2]),title,bilde,symbol)&lt;br /&gt;
		showEnt(geojson,id,tonumber(pos[2]),tonumber(pos[1]),artikkel,description,stroke,title,opacity,true,&amp;quot;geoshape&amp;quot;,symbol)&lt;br /&gt;
		--table.insert(geojson,marker)&lt;br /&gt;
	end&lt;br /&gt;
	return geojson&lt;br /&gt;
end&lt;br /&gt;
function gsparqlLines(geojson,sparql)&lt;br /&gt;
	local lines = mw.text.split(sparql, &amp;#039;\n&amp;#039;, true )&lt;br /&gt;
	for ix,line in ipairs(lines) do&lt;br /&gt;
		geojson = gsparqlLine(geojson,line,ix)&lt;br /&gt;
	end&lt;br /&gt;
	return geojson&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mapsparql(args)&lt;br /&gt;
	local sparql = &lt;br /&gt;
	--&amp;quot;wd:Q12316978	Vikeholmen fyr	Point(5.27605 59.1408)	commons:Vikaholmen, Karmøy - S-1602U1 114.jpg	&amp;lt;https://no.wikipedia.org/wiki/Vikeholmen_fyr&amp;gt;&amp;quot;--&lt;br /&gt;
	args[&amp;quot;id&amp;quot;] or &amp;quot;wd:Q281492	Birtevatn	Point(7.94993 59.04772)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local geojson = {}&lt;br /&gt;
	geojson = gsparqlLines(geojson,sparql)&lt;br /&gt;
	if true then&lt;br /&gt;
		frameargs = {}&lt;br /&gt;
		frameargs[&amp;quot;width&amp;quot;] = &amp;quot;600&amp;quot;&lt;br /&gt;
		frameargs[&amp;quot;height&amp;quot;] = &amp;quot;600&amp;quot;&lt;br /&gt;
		frameargs[&amp;#039;text&amp;#039;] = makeLegend() --.. text --.. mlink .. klink&lt;br /&gt;
	    			return  mw.getCurrentFrame():extensionTag(&amp;#039;mapframe&amp;#039;, mw.text.jsonEncode(geojson), frameargs) --.. &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;&lt;br /&gt;
    		--	.. makeLegend()  -- .. text .. mlink .. klink&lt;br /&gt;
    		--	.. osmLink(entity) .. koordmal .. coordcat&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.jsonEncode(geojson, mw.text.JSON_PRETTY) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
	.. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot; .. &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.jsonEncode(log, mw.text.JSON_PRETTY) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
	.. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot; .. makeLegend()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function gjsonpos(txt)&lt;br /&gt;
	local len = mw.ustring.len(txt)&lt;br /&gt;
	local p =  mw.ustring.sub( txt, 7, len-1 )&lt;br /&gt;
	return mw.text.split(p, &amp;#039;[ ,]&amp;#039;, false )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gsparqlJson(geojson,line,ix)&lt;br /&gt;
	local point = line[&amp;quot;loc&amp;quot;]&lt;br /&gt;
	if false then&lt;br /&gt;
		geojson[ix] = point&lt;br /&gt;
		return geojson&lt;br /&gt;
	end&lt;br /&gt;
	local pos = gjsonpos(point)&lt;br /&gt;
	local qid = gsparqlid(line[&amp;quot;item&amp;quot;])&lt;br /&gt;
	local artikkel = nil&lt;br /&gt;
	local description = line[&amp;quot;itemDescription&amp;quot;]&lt;br /&gt;
	local stroke = &amp;quot;#880000&amp;quot;&lt;br /&gt;
	local opacity = 0.1&lt;br /&gt;
	local symbol = &amp;quot;1&amp;quot;&lt;br /&gt;
	local title = line[&amp;quot;itemLabel&amp;quot;]&lt;br /&gt;
	showEnt(geojson,qid,tonumber(pos[2]),tonumber(pos[1]),artikkel,description,stroke,title,opacity,true,&amp;quot;geoshape&amp;quot;,symbol)&lt;br /&gt;
&lt;br /&gt;
	return geojson&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mapjson2(json)&lt;br /&gt;
	local geojson = {}&lt;br /&gt;
	for ix,line in ipairs(json) do&lt;br /&gt;
		geojson = gsparqlJson(geojson,line,ix)&lt;br /&gt;
	end&lt;br /&gt;
	if true then&lt;br /&gt;
		frameargs = {}&lt;br /&gt;
		frameargs[&amp;quot;width&amp;quot;] = &amp;quot;600&amp;quot;&lt;br /&gt;
		frameargs[&amp;quot;height&amp;quot;] = &amp;quot;600&amp;quot;&lt;br /&gt;
		frameargs[&amp;#039;text&amp;#039;] = makeLegend() --.. text --.. mlink .. klink&lt;br /&gt;
	    			return  mw.getCurrentFrame():extensionTag(&amp;#039;mapframe&amp;#039;, mw.text.jsonEncode(geojson), frameargs) --.. &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;&lt;br /&gt;
    		--	.. makeLegend()  -- .. text .. mlink .. klink&lt;br /&gt;
    		--	.. osmLink(entity) .. koordmal .. coordcat&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function jsonfilter(json,type,val)&lt;br /&gt;
	local json2 = {}&lt;br /&gt;
	for ix,line in ipairs(json) do&lt;br /&gt;
		if line[type] and ( gsparqlid(line[type]) == gsparqlid(val) ) then&lt;br /&gt;
			&lt;br /&gt;
			table.insert(json2, line)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return json2&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mapjson(args)&lt;br /&gt;
	local a = args[&amp;quot;json&amp;quot;]&lt;br /&gt;
	local b = mw.text.jsonDecode(a)&lt;br /&gt;
	local c = {&amp;quot;Q2245&amp;quot;,&amp;quot;Q2272&amp;quot;}&lt;br /&gt;
	local maps = &amp;quot;&amp;quot;&lt;br /&gt;
	for ix,cc in ipairs(c) do&lt;br /&gt;
		local d = jsonfilter(b,&amp;quot;adm&amp;quot;,cc)&lt;br /&gt;
		maps = maps .. mapjson2(d)&lt;br /&gt;
		legend = {}&lt;br /&gt;
		numLegend = 0&lt;br /&gt;
	end&lt;br /&gt;
	return maps&lt;br /&gt;
--	local c = mw.text.decode(a,true)&lt;br /&gt;
--	return dump(geojson)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.map(frame)&lt;br /&gt;
--	return &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.jsonEncode(frame:getParent().args, mw.text.JSON_PRETTY) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
	local args = mw.getCurrentFrame():getParent().args&lt;br /&gt;
	if args[&amp;quot;karttest&amp;quot;] == &amp;quot;ja&amp;quot; then&lt;br /&gt;
		return maptest(args)&lt;br /&gt;
	end&lt;br /&gt;
	if args[&amp;quot;test&amp;quot;] == &amp;quot;ja&amp;quot; then&lt;br /&gt;
		return maptest(args)&lt;br /&gt;
	end&lt;br /&gt;
	if args[&amp;quot;test&amp;quot;] == &amp;quot;test&amp;quot; then&lt;br /&gt;
		return mapsparql(args)&lt;br /&gt;
	end&lt;br /&gt;
	if args[&amp;quot;test&amp;quot;] == &amp;quot;kilde&amp;quot; then&lt;br /&gt;
		return mapkilde(args)&lt;br /&gt;
	end&lt;br /&gt;
	if args[&amp;quot;test&amp;quot;] == &amp;quot;json&amp;quot; then&lt;br /&gt;
		return mapjson(args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return map2(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>nb&gt;Haros</name></author>
	</entry>
</feed>