p =
function p.main(frame) if frame.args.item
nil then return "not a valid item" end local coordtable = local usecoordy = nil local usecoordx = nil local cminy = nil local cmaxy = nil local closetag = nil local i = 0 -- if far east, west, north, south if mw.wikibase.getBestStatements(frame.args.item, "P1334")[1] and mw.wikibase.getBestStatements(frame.args.item, "P1334")[1].mainsnak.datavalue and mw.wikibase.getBestStatements(frame.args.item, "P1335")[1] and mw.wikibase.getBestStatements(frame.args.item, "P1335")[1].mainsnak.datavalue and mw.wikibase.getBestStatements(frame.args.item, "P1332")[1] and mw.wikibase.getBestStatements(frame.args.item, "P1332")[1].mainsnak.datavalue and mw.wikibase.getBestStatements(frame.args.item, "P1333")[1] and mw.wikibase.getBestStatements(frame.args.item, "P1333")[1].mainsnak.datavalue then -- getting locations of farthest points in each direction in the area local statementa = mw.wikibase.getBestStatements(frame.args.item, "P1334")[1].mainsnak table.insert(coordtable, statementa.datavalue.value.longitude) local statementb = mw.wikibase.getBestStatements(frame.args.item, "P1335")[1].mainsnak table.insert(coordtable, statementb.datavalue.value.longitude) local statementc = mw.wikibase.getBestStatements(frame.args.item, "P1332")[1].mainsnak table.insert(coordtable, statementc.datavalue.value.latitude) local statementd = mw.wikibase.getBestStatements(frame.args.item, "P1333")[1].mainsnak table.insert(coordtable, statementd.datavalue.value.latitude) -- figuring out the center position of the map, but also used for zoom levels local cminx = math.min(tonumber(coordtable[1]), tonumber(coordtable[2])) local sizex = math.max(tonumber(coordtable[1]), tonumber(coordtable[2])) - cminx usecoordx = tonumber(cminx + (sizex / 2)) cminy = math.min(tonumber(coordtable[3]), tonumber(coordtable[4])) cmaxy = math.max(tonumber(coordtable[3]), tonumber(coordtable[4])) local sizey = cmaxy - cminy usecoordy = tonumber(cminy + (sizey / 2)) -- Zoom level: each zoom level is half of the previous zoom level, with the highest being 360 degress (full circle) local x = 360 while math.max(sizex, sizey) < x do x = x / 2 i = i + 1 end -- if either central coordinate or basic coordinate along with instance of elseif mw.wikibase.getBestStatements(frame.args.item, "P31")[1] and mw.wikibase.getBestStatements(frame.args.item, "P31")[1].mainsnak.datavalue then if mw.wikibase.getBestStatements(frame.args.item, "P15140")[1] and mw.wikibase.getBestStatements(frame.args.item, "P15140")[1].mainsnak.datavalue then local statementa = mw.wikibase.getBestStatements(frame.args.item, "P15140")[1].mainsnak usecoordx = statementa.datavalue.value.longitude usecoordy = statementa.datavalue.value.latitude cminy = tonumber(usecoordy) cmaxy = tonumber(usecoordy) elseif mw.wikibase.getBestStatements(frame.args.item, "P625")[1] and mw.wikibase.getBestStatements(frame.args.item, "P625")[1].mainsnak.datavalue then local statementa = mw.wikibase.getBestStatements(frame.args.item, "P625")[1].mainsnak usecoordx = statementa.datavalue.value.longitude usecoordy = statementa.datavalue.value.latitude cminy = tonumber(usecoordy) cmaxy = tonumber(usecoordy) end local statementb = mw.wikibase.getBestStatements(frame.args.item, "P31")[1].mainsnak if statementb.datavalue.value.id
"Q515" then -- City i = 11 end end -- northern and southern hemisphere have different scaling, due to the earth being round. -- in other cases the calculated zoom is a bit tight, so easing that up. if cmaxy > 60 or cminy < -30 then i = i - 2 else i = i - 1 end if frame.args.closetag then closetag = " >" else closetag = " />" end return frame:preprocess(" This article is licensed under the GNU Free Documentation License. It uses material from the Wikipedia article "Module:Sandbox/autoscale". Except where otherwise indicated, Everything.Explained.Today is © Copyright 2009-2024, A B Cryer, All Rights Reserved. Cookie policy.