Module:OSM/sandbox explained

local function buildquery(frame, target) local textToDisplay, leftLink, rightLink, runQueryRightAway, itemObject, itemID, query, coord, bbox, remark, overpassUrl, primitives, timeout, style, logo local args = frame.args if args.display then -- text to display on link textToDisplay = ' ' .. args.display else textToDisplay = end if args.timeout then timeout = '[timeout:' .. args.timeout .. '][out:json];\n' else timeout = '[timeout:20][out:json];\n' end if args.link and args.link

'no' then -- just return the url leftLink = rightLink = textToDisplay = else leftLink = '[' rightLink = ']' end if args.run and args.run

'no' then -- don't run immediately runQueryRightAway = else runQueryRightAway = '&R' end if frame.args.overpass then itemID = "" itemObject = nil elseif args.id then -- build query for specific Q-item(s) itemID = args.id pcall(function itemObject = mw.wikibase.getEntityObject(mw.text.split(itemID,";")[1]) end) else itemObject = mw.wikibase.getEntityObject if itemObject

nil then return "This page doesn't have a wikidata entry" end -- build query for current page itemID = itemObject.id end -- Always perform a regular expression based search -- The data may contain multiple values if frame.args.overpass

nil then itemID = '"~"(^|;)(' .. itemID:gsub(";", "%|") .. ')(;|$)' leftbracket = '["' rightbracket = '"]' else leftbracket = rightbracket = end

if args.query then -- user can add their own tags to filter on query = args.query else if frame.args.overpass then return "If you invoke with overpass, you have to include a query=" end query = end if args.coord and (args.limitToBBOX ~= 'no') then -- The user can provide coordinates and a zoom factor coord = '&C=' .. args.coord -- In that case we can limit the search to the area in view bbox = '' -- and tell them how to search wider. remark = ' // remove the ' .. bbox .. 'if you want the query to be executed globally' else coord = bbox = remark = end overpassUrl = timeout .. '(\n' -- if the user specifies prim(itives), but then leaves the string empty, abort if args.prim then if args.prim

then return "Please indicate which primitives you want to query for" end primitives = args.prim else primitives = 'nwr' end

if primitives:find("n") then -- Include nodes overpassUrl = overpassUrl .. 'node' .. leftbracket .. target .. itemID .. rightbracket .. query .. bbox .. ';' .. remark .. '\n' end if primitives:find("w") then -- Include ways overpassUrl = overpassUrl .. 'way' .. leftbracket .. target .. itemID .. rightbracket .. query .. bbox .. ';\n' end if primitives:find("r") then -- Include relations overpassUrl = overpassUrl .. 'relation' .. leftbracket .. target .. itemID .. rightbracket .. query .. bbox .. ';\n>>;\n' end overpassUrl = overpassUrl .. ');\n' overpassUrl = overpassUrl .. 'out geom;\n' if args.style then style = args.style else if args.logo then logo = " icon-image: url(" .. args.logo .. ');\n' else if itemObject then logo = tostring(itemObject:formatPropertyValues('P154')['value']):gsub("'", "'") end if logo and not(logo

) then logo = ' icon-image: url("https://commons.wikimedia.org/wiki/Special:Redirect/file/'.. logo .. '");\n' end end if logo then style = "node [".. target .."]" end end if style then overpassUrl = overpassUrl .. '\n' end

return leftLink .. 'http://overpass-turbo.eu/?Q=' .. mw.uri.encode(overpassUrl, "PATH") .. coord .. runQueryRightAway .. textToDisplay .. rightLinkend

local p =

function p.overpass(frame) frame.args.overpass = true return buildquery(frame, )end

function p.wd(frame) return buildquery(frame, 'wikidata')end

function p.pt(frame) frame.args.style = "node \nnode[highway=bus_stop], way[highway=bus_stop]" frame.args.prim = "r" frame.args.timeout = 50 return buildquery(frame, 'wikidata')end

function p.etym(frame) return buildquery(frame, 'name:etymology:wikidata')end

function p.subject(frame) return buildquery(frame, 'subject:wikidata')end

function p.artist(frame) return buildquery(frame, 'artist:wikidata')end

function p.architect(frame) return buildquery(frame, 'architect:wikidata')end

function p.operator(frame) return buildquery(frame, 'operator:wikidata')end

function p.brand(frame) return buildquery(frame, 'brand:wikidata')end

return p