跳转到内容

模組:Infobox mapframe/sandbox

本页使用了标题或全文手工转换
维基百科,自由的百科全书
文档图示 模块文档[查看] [编辑] [历史] [清除缓存]

用法

[编辑]

该模块可自动生成适合信息框的mapframe,编者只需输入少量信息即可。

通用用法

[编辑]

只需使用模板{{Infobox mapframe}},按照其文档进行操作即可。该模块也可以导入到另一个Lua模块中。

信息框中的自动地图

[编辑]
示例编辑: Template:Infobox prisonTemplate:Infobox prison/doc

编辑信息框模板(或其沙盒)。

在信息框中添加类似以下示例的行。将数字(4,或9799)替换为适当的数字,具体数字取决于已有多少其他图像或data参数。

如果放在信息框顶部附近 如果放置在信息框底部或底部附近
| image4     = {{#invoke:Infobox mapframe|auto}}
| caption4   = {{#invoke:Infobox mapframe|autocaption}}
| header97   = {{#if:{{{mapframe|}}}|地图}}
| data98     = {{#invoke:Infobox mapframe|auto}}
| data99     = {{#invoke:Infobox mapframe|autocaption}}

如果模板中使用了{{#invoke:Check for unknown parameters}},请向其添加以下参数:

|mapframe|mapframe-area_km2|mapframe-area_mi2|mapframe-caption|mapframe-coord|mapframe-coordinates|mapframe-custom|mapframe-frame-coord|mapframe-frame-coordinates|mapframe-frame-height|mapframe-frame-width|mapframe-geomask|mapframe-geomask-fill|mapframe-geomask-fill-opacity|mapframe-geomask-stroke-color|mapframe-geomask-stroke-colour|mapframe-geomask-stroke-width|mapframe-height|mapframe-id|mapframe-length_km|mapframe-length_mi|mapframe-marker|mapframe-marker-color|mapframe-marker-colour|mapframe-point|mapframe-shape|mapframe-shape-fill|mapframe-shape-fill-opacity|mapframe-stroke-color|mapframe-stroke-colour|mapframe-stroke-width|mapframe-switcher|mapframe-width|mapframe-wikidata|mapframe-zoom

完成此操作后,模板即可使用上述参数。 这些参数也可以在前述#invoke调用中指定默认值,例如{{#invoke:Infobox mapframe|auto|mapframe-marker=library}}表示默认使用“library”图标,除非向模板传递不同的值。

  • 默认情况下地图是关闭的,这意味着除非在模板调用时出现|mapframe=yes,否则地图不会显示。要默认打开地图,可在上述#invoke调用中添加|onByDefault=yes——这意味着除非模板调用中包含|mapframe=no,否则将显示地图。onByDefault也可以设置为一个条件,例如:|onByDefault={{#if:{{pushpin_map|}}|no|yes}}
  • 更新模板文档中的参数说明。可以使用{{Infobox mapframe/doc/parameters}}。通过以|参数名=值的形式指定默认值(如果在#invoke调用中使用了默认值)。以下是默认输出:
延伸內容
  • 基本参数:
    • mapframe — 指定yesno以显示或隐藏地图,覆盖默认值。默认:no
    • mapframe-caption — 地图说明。默认: 空白(或如果设置了|mapframe-geomask=,则:“在遮罩标签的位置”)
    • mapframe-custom — 使用自定义地图代替自动地图框架。请使用{{maplink}}模板(或其他可生成地图框架的模板)或图像文件名称。如果使用,后续的mapframe参数将被忽略。默认:未指定
    • mapframe-ididqid — 要使用的维基数据项QID。默认:当前页面对应数据项
    • mapframe-coordinatesmapframe-coordcoordinatescoord — 指定的坐标,而不是维基数据上的坐标。使用{{Coord}}模板,例如:|coord={{Coord|12.34|N|56.78}}默认:来自维基数据的坐标
    • mapframe-wikidata — 当设置了|coord=时,设为yes以显示维基数据中的面/线特征(如果有)。默认: 未指定
  • 自定义显示哪些特征:
    • mapframe-point — 设为none时关闭点标记的显示。设为on时强制显示点标记。默认: 未指定
    • mapframe-line — 设为none时关闭线特征的显示。默认: 未指定
    • mapframe-shape — 设为none时关闭面特征的显示。设为inverse时使用反转形状(geomask)代替常规形状。默认: 未指定
    • mapframe-geomask — 用作遮罩的维基数据项(遮罩边界外的区域变暗)。可以是特定的维基数据项(QID),或数据项的属性(例如,P17表示国家 (P17)P131表示所在行政领土实体 (P131))。默认: 未指定
    • mapframe-switcher — 设置为autogeomaskszooms,以启用切换多个地图框架的功能(以Template:Switcher的风格)。默认: 未指定
      • auto — 以维基数据项的位置 (P276)所在行政领土实体 (P131)声称为遮罩进行切换,递归搜索。例如,数据项的城市、该城市的州以及该州的国家。
      • geomasks — 在mapframe-geomask参数中的维基数据项(QID)列表(以逗号分隔)指定的遮罩之间切换。
      • zooms — 在“zoomed in”/“zoomed midway”/“zoomed out”之间切换,其中“zoomed in”为默认缩放(最小值为3),“zoomed out”为1,而“zoomed midway”为平均值。
  • 其他可选参数:
    • mapframe-frame-widthmapframe-width — 框架宽度。默认:270
    • mapframe-frame-heightmapframe-height — 框架高度。默认:200
    • mapframe-shape-fill — 面特征的填充颜色。默认:#606060
    • mapframe-shape-fill-opacity — 面特征填充的不透明度,数值介于0和1之间。默认:0.5
    • mapframe-stroke-colormapframe-stroke-colour — 线特征、面特征轮廓的颜色。默认:#ff0000
    • mapframe-stroke-width — 线特征、面特征轮廓的粗细。默认:5
    • mapframe-marker — 用于坐标点标记的符号;具体选项参见mw:Help:Extension:Kartographer/Icons默认: 未指定(即blank)
      • 也可以设置为blank以覆盖默认标记符号。
    • mapframe-marker-colormapframe-marker-colour — 点标记的背景颜色。默认:#5E74F3
    • mapframe-geomask-stroke-colormapframe-geomask-stroke-colour — 遮罩轮廓的颜色。默认:#555555
    • mapframe-geomask-stroke-width — 遮罩轮廓的粗细。默认:2
    • mapframe-geomask-fill — 遮罩外部区域的填充颜色。默认:#606060
    • mapframe-geomask-fill-opacity — 遮罩外部区域填充的不透明度,数值介于0和1之间。默认:0.5
    • mapframe-zoom — 设置缩放级别,从“1”(全球地图)到 “18”(最大级别),用于无法根据对象长度或面积自动确定缩放级别的情况。默认:10
    • mapframe-length_kmmapframe-length_mimapframe-area_km2mapframe-area_mi2 — 通过输入对象的长度(以公里或英里为单位)或面积(以平方公里或平方英里为单位)来确定缩放级别。默认:未指定
    • mapframe-frame-coordinatesmapframe-frame-coord — 地图初始位置的备用坐标,使用使用{{coord}}模板。默认:衍生自项目坐标
  • 模板数据部分可插入下面的示例来更新:
延伸內容

无描述。

模板参数

参数描述类型状态
Show mapframe mapmapframe

Specify yes or no to show or hide the map, overriding the default

默认值
no
示例值
yes
字符串推荐
Mapframe captionmapframe-caption

Caption for the map. If mapframe-geomask is set, then the default is "Location in <<geomask's label>>"

字符串可选
Custom mapframemapframe-custom

Use a custom map instead of the automatic mapframe. Specify either a {{maplink}} template, or another template that generates a mapframe map, or an image name. If used, other mapframe parameters will be ignored.

模板可选
Mapframe Wikidata itemmapframe-id id qid

Id (Q-number) of Wikidata item to use.

默认值
(item for current page)
字符串可选
Mapframe coordinates mapframe-coordinates mapframe-coord coordinates coord

Coordinates to use, instead of any on Wikidata. Use the {{Coord}} template.

默认值
(coordinates from Wikidata)
示例值
{{Coord|12.34|N|56.78|E}}
模板可选
Mapframe shapes from Wikidatamapframe-wikidata

et to yes to show shape/line features from the wikidata item, if any, when coordinates are specified by parameter

示例值
yes
字符串可选
Mapframe point featuremapframe-point

Override display of mapframe point feature. Turn off display of point feature by setting to "none". Force point marker to be displayed by setting to "on"

字符串可选
Mapframe shape featuremapframe-shape

Override display of mapframe shape feature. Turn off by setting to "none". Use an inverse shape (geomask) instead of a regular shape by setting to "inverse"

字符串可选
Mapframe widthmapframe-frame-width mapframe-width

Frame width in pixels

默认值
270
数字可选
Mapframe heightmapframe-frame-height mapframe-height

Frame height in pixels

默认值
200
数字可选
Mapframe shape fillmapframe-shape-fill

Color used to fill shape features

默认值
#606060
字符串可选
Mapframe shape fill opacitymapframe-shape-fill-opacity

Opacity level of shape fill, a number between 0 and 1

默认值
0.5
数字可选
Mapframe stroke colormapframe-stroke-color mapframe-stroke-colour

Color of line features, and outlines of shape features

默认值
#ff0000
字符串可选
Mapframe stroke widthmapframe-stroke-width

Width of line features, and outlines of shape features

默认值
5
数字可选
Mapframe markermapframe-marker

Marker symbol to use for coordinates; see [[mw:Help:Extension:Kartographer/Icons]] for options

示例值
museum
字符串可选
Mapframe marker colormapframe-marker-color mapframe-marker-colour

Background color for the marker

默认值
#5E74F3
字符串可选
Mapframe geomaskmapframe-geomask

Wikidata item to use as a geomask (everything outside the boundary is shaded darker). Can either be a specific Wikidata item (Q-number), or a property that specifies the item to use (e.g. P17 for country, or P131 for located in the administrative territorial entity)

示例值
Q100
页面名称可选
Mapframe geomask stroke colormapframe-geomask-stroke-color mapframe-geomask-stroke-colour

Color of outline of geomask shape

默认值
#555555
字符串可选
Mapframe geomask stroke widthmapframe-geomask-stroke-width

Width of outline of geomask shape

默认值
2
数字可选
Mapframe geomask fillmapframe-geomask-fill

Color used to fill outside geomask features

默认值
#606060
字符串可选
Mapframe geomask fill opacitymapframe-geomask-fill-opacity

Opacity level of fill outside geomask features, a number between 0 and 1

默认值
0.5
数字可选
Mapframe zoommapframe-zoom

Set the zoom level, from "1" to "18", to used if the zoom level cannot be determined automatically from object length or area

默认值
10
示例值
12
数字可选
Mapframe length (km)mapframe-length_km

Object length in kilometres, for automatically determining zoom level. ONLY use ONE of the available parameters for length or area

数字可选
Mapframe length (mi)mapframe-length_mi

Object length in miles, for automatically determining zoom level. ONLY use ONE of the available parameters for length or area

数字可选
Mapframe area (km^2)mapframe-area_km2

Object arean square kilometres, for automatically determining zoom level. ONLY use ONE of the available parameters for length or area

数字可选
Mapframe area (mi^2)mapframe-area_mi2

Object area in square miles, for automatically determining zoom level. ONLY use ONE of the available parameters for length or area

数字可选
Mapframe frame coordinatesmapframe-frame-coordinates mapframe-frame-coord

Alternate latitude and longitude coordinates for initial placement of map, using {{coord}}

示例值
{{Coord|12.35|N|56.71|E}}
模板可选
Mapframe switchermapframe-switcher

Set to "auto" or "geomasks" or "zooms" to enable Template:Switcher-style switching between multiple mapframes. IF SET TO auto – switch geomasks found in location (P276) and located in the administrative territorial entity (P131) statements on the page's Wikidata item, searching recursively. E.g. an item's city, that city's state, and that state's country. IF SET TO geomasks – switch between the geomasks specified as a comma-separated list of Wikidata items (Q-numbers) in the mapframe-geomask parameter. IF SET TO zooms – switch between "zoomed in"/"zoomed midway"/"zoomed out", where "zoomed in" is the default zoom (with a minimum of 3), "zoomed out" is 1, and "zoomed midway" is the average.

字符串可选

参见

[编辑]
local mf = require('Module:Mapframe')
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local infoboxImage = require('Module:InfoboxImage').InfoboxImage

-- Defaults
local DEFAULT_FRAME_WIDTH = "270"
local DEFAULT_FRAME_HEIGHT = "200"
local DEFAULT_ZOOM = 10
local DEFAULT_GEOMASK_STROKE_WIDTH = "1"
local DEFAULT_GEOMASK_STROKE_COLOR = "#777777"
local DEFAULT_GEOMASK_FILL = "#888888"
local DEFAULT_GEOMASK_FILL_OPACITY = "0.5"
local DEFAULT_SHAPE_STROKE_WIDTH = "3"
local DEFAULT_SHAPE_STROKE_COLOR = "#FF0000"
local DEFAULT_SHAPE_FILL = "#606060"
local DEFAULT_SHAPE_FILL_OPACITY = "0.5"
local DEFAULT_LINE_STROKE_WIDTH = "5"
local DEFAULT_LINE_STROKE_COLOR = "#FF0000"
local DEFAULT_MARKER_COLOR = "#5E74F3"


-- Trim whitespace from args, and remove empty args
function trimArgs(argsTable)
	local cleanArgs = {}
	for key, val in pairs(argsTable) do
		if type(val) == 'string' then
			val = val:match('^%s*(.-)%s*$')
			if val ~= '' then
				cleanArgs[key] = val
			end
		else
			cleanArgs[key] = val
		end
	end
	return cleanArgs
end

function getBestStatement(item_id, property_id)
	if not(item_id) or not(mw.wikibase.isValidEntityId(item_id)) or not(mw.wikibase.entityExists(item_id)) then
		return false
	end
	local statements = mw.wikibase.getBestStatements(item_id, property_id)
	if not statements or #statements == 0 then
		return false
	end
	local hasNoValue = ( statements[1].mainsnak and statements[1].mainsnak.snaktype == 'novalue' )
	if hasNoValue then
		return false
	end
	return statements[1]
end

function hasWikidataProperty(item_id, property_id)
	return getBestStatement(item_id, property_id) and true or false
end

function getStatementValue(statement)
	return statement and statement.mainsnak and statement.mainsnak.datavalue and statement.mainsnak.datavalue.value or nil
end

function relatedEntity(item_id, property_id)
	local value = getStatementValue( getBestStatement(item_id, property_id) )
	return value and value.id or false
end

function idType(id)
	if not id then 
		return nil
	elseif mw.ustring.match(id, "[Pp]%d+") then
		return "property"
	elseif mw.ustring.match(id, "[Qq]%d+") then
		return "item"
	else
		return nil
	end
end

function getZoom(value, unit)
	local length_km
	if unit == 'km' then
		length_km = tonumber(value)
	elseif unit == 'mi' then
		length_km = tonumber(value)*1.609344
	elseif unit == 'km2' then
		length_km = math.sqrt(tonumber(value))
	elseif unit == 'mi2' then
		length_km = math.sqrt(tonumber(value))*1.609344
	end
	-- max for zoom 2 is 6400km, for zoom 3 is 3200km, for zoom 4 is 1600km, etc
	local zoom = math.floor(8 - (math.log10(length_km) - 2)/(math.log10(2)))
	-- limit to values below 17
	zoom = math.min(17, zoom)
	-- take off 1 when calculated from area, to account for unusual shapes
	if unit == 'km2' or unit == 'mi2' then
		zoom = zoom - 1
	end
	-- minimum value is 1
	return math.max(1, zoom)
end

function shouldAutoRun(frame)
	-- Check if should be running
	local explicitlyOn = yesno(mw.text.trim(frame.getParent(frame).args.mapframe or "")) -- true of false or nil
	local onByDefault = (explicitlyOn == nil) and yesno(mw.text.trim(frame.args.onByDefault or ""), false) -- true or false
	return explicitlyOn or onByDefault
end

function argsFromAuto(frame)
	-- Get args from the frame (invoke call) and the parent (template call).
	-- Frame arguments are default values which are overridden by parent values
	-- when both are present
	local args = getArgs(frame, {parentFirst = true})
	
	-- Discard args not prefixed with "mapframe-", remove that prefix from those that remain
	local fixedArgs = {}
	for name, val in pairs(args) do
		local fixedName = string.match(name, "^mapframe%-(.+)$" )
		if fixedName then
			fixedArgs[fixedName] = val
		-- allow coord, coordinates, etc to be unprefixed
		elseif name == "coordinates" or name == "coord" or name == "coordinate" and not fixedArgs.coord then
			fixedArgs.coord = val
		-- allow id, qid to be unprefixed, map to id (if not already present)
		elseif name == "id" or name == "qid" and not fixedArgs.id then
			fixedArgs.id = val
		end
	end
	return fixedArgs
end

local p = {}

p.autocaption = function(frame)
	if not shouldAutoRun(frame) then return "" end
	local args = argsFromAuto(frame)
	if args.caption then
		return args.caption
	elseif args.switcher then 
		return ""
	end
	local maskItem
	local maskType = idType(args.geomask)
	if maskType == 'item' then
		maskItem = args.geomask
	elseif maskType == "property" then
		maskItem = relatedEntity(args.id or mw.wikibase.getEntityIdForCurrentPage(), args.geomask)
	end
	local maskItemLabel = maskItem and mw.wikibase.getLabel( maskItem )
	return maskItemLabel and "在" .. maskItemLabel .. "的位置" or ""
end

function parseCustomWikitext(customWikitext)
	-- infoboxImage will format an image if given wikitext containing an
	-- image, or else pass through the wikitext unmodified
	return infoboxImage({
		args = {
			image = customWikitext
		}
	})
end

p.auto = function(frame)
	if not shouldAutoRun(frame) then return "" end
	local args = argsFromAuto(frame)
	if args.custom then
		return frame:preprocess(parseCustomWikitext(args.custom))
	end
	local mapframe = p._main(args)
	return frame:preprocess(mapframe)
end

p.main = function(frame)
	local parent = frame.getParent(frame)
	local parentArgs = parent.args
	local mapframe = p._main(parentArgs)
	return frame:preprocess(mapframe)
end

p._main = function(_config)
	-- `config` is the args passed to this module
	local config = trimArgs(_config)
	
	-- Require wikidata item, or specified coords
	local wikidataId = config.id or mw.wikibase.getEntityIdForCurrentPage()
	if not(wikidataId) and not(config.coord) then
		return ''
	end

	-- Require coords (specified or from wikidata), so that map will be centred somewhere
	-- (P625 = coordinate location)
	local hasCoordinates = hasWikidataProperty(wikidataId, 'P625') or config.coordinates or config.coord
	if not hasCoordinates then  
		return ''
	end

	-- `args` is the arguments which will be passed to the mapframe module
	local args = {}

	-- Some defaults/overrides for infobox presentation
	args.display = "inline"
	args.frame = "yes"
	args.plain = "yes"
	args["frame-width"]  = config["frame-width"] or config.width or DEFAULT_FRAME_WIDTH
	args["frame-height"] = config["frame-height"] or config.height or DEFAULT_FRAME_HEIGHT
	args["frame-align"]  = "center"

	args["frame-coord"] = config["frame-coordinates"] or config["frame-coord"] or ""
	-- Note: config["coordinates"] or config["coord"] should not be used for the alignment of the frame;
	-- see talk page ( https://en.wikipedia.org/wiki/Special:Diff/876492931 )

	-- deprecated lat and long parameters
	args["frame-lat"]    = config["frame-lat"] or config["frame-latitude"] or ""
	args["frame-long"]   = config["frame-long"] or config["frame-longitude"] or ""

	-- Calculate zoom from length or area (converted to km or km2)
	if config.length_km then
		args.zoom = getZoom(config.length_km, 'km')
	elseif config.length_mi then
		args.zoom = getZoom(config.length_mi, 'mi')
	elseif config.area_km2 then
		args.zoom = getZoom(config.area_km2, 'km2')
	elseif config.area_mi2 then
		args.zoom = getZoom(config.area_mi2, 'mi2')
	else
		args.zoom = config.zoom or DEFAULT_ZOOM
	end

	-- Conditionals: whether point, geomask should be shown
	local hasOsmRelationId = hasWikidataProperty(wikidataId, 'P402') -- P402 is OSM relation ID
	local shouldShowPointMarker;
	if config.point == "on" then
		shouldShowPointMarker = true 
	elseif config.point == "none" then
		shouldShowPointMarker = false
	else
		shouldShowPointMarker = not(hasOsmRelationId) or (config.marker and config.marker ~= 'none') or (config.coordinates or config.coord)
	end
	local shouldShowShape = config.shape ~= 'none'
	local shapeType = config.shape == 'inverse' and 'shape-inverse' or 'shape'
	local shouldShowLine = config.line ~= 'none'
	local maskItem
	local useWikidata = wikidataId and true or false -- Use shapes/lines based on wikidata id, if there is one
	-- But do not use wikidata when local coords are specified (and not turned off), unless explicitly set
	if useWikidata and config.coord and shouldShowPointMarker then
		useWikidata = config.wikidata and true or false
	end
	
	-- Switcher
	if config.switcher == "zooms" then
		-- switching between zoom levels
		local maxZoom = math.max(tonumber(args.zoom), 3) -- what zoom would have otherwise been (if 3 or more, otherwise 3)
		local minZoom = 1 -- completely zoomed out
		local midZoom = math.floor((maxZoom + minZoom)/2) -- midway between maxn and min
		args.switch = "zoomed in, zoomed midway, zoomed out"
		args.zoom = string.format("SWITCH:%d,%d,%d", maxZoom, midZoom, minZoom)
	elseif config.switcher == "auto" then
		-- switching between P276 and P131 areas with recursive lookup, e.g. item's city,
		-- that city's state, and that state's country
		args.zoom = nil -- let kartographer determine the zoom
		local maskLabels = {}
		local maskItems = {}
		local maskItemId = relatedEntity(wikidataId, "P276") or  relatedEntity(wikidataId, "P131") 
		local maskLabel = mw.wikibase.getLabel(maskItemId)
		while maskItemId and maskLabel and mw.text.trim(maskLabel) ~= "" do
			table.insert(maskLabels, maskLabel)
			table.insert(maskItems, maskItemId)
			maskItemId = maskItemId and relatedEntity(maskItemId, "P131")
			maskLabel = maskItemId and mw.wikibase.getLabel(maskItemId)
		end
		if #maskLabels > 1 then
			args.switch = table.concat(maskLabels, "###")
			maskItem = "SWITCH:" .. table.concat(maskItems, ",")
		elseif #maskLabels == 1 then
			maskItem = maskItemId[1]
		end
	elseif config.switcher == "geomasks" and config.geomask then
		-- switching between items in geomask parameter
		args.zoom = nil -- let kartographer determine the zoom
		local separator = (mw.ustring.find(config.geomask, "###", 0, true ) and "###") or
			(mw.ustring.find(config.geomask, ";", 0, true ) and ";") or ","
		local pattern = "%s*"..separator.."%s*"
		local maskItems = mw.text.split(mw.ustring.gsub(config.geomask, "SWITCH:", ""), pattern)
		local maskLabels = {}
		if #maskItems > 1 then
			for i, item in ipairs(maskItems) do
				table.insert(maskLabels, mw.wikibase.getLabel(item))
			end
			args.switch = table.concat(maskLabels, "###")
			maskItem = "SWITCH:" .. table.concat(maskItems, ",")
		end
	end
	
	-- resolve geomask item id (if not using geomask switcher)
	if not maskItem then --  
		local maskType = idType(config.geomask)
		if maskType == 'item' then
			maskItem = config.geomask
		elseif maskType == "property" then
			maskItem = relatedEntity(wikidataId, config.geomask)
		end
	end
	
	-- Keep track of arg numbering
	local argNumber = ''
	local function incrementArgNumber()
		if argNumber == '' then
			argNumber = 2
		else
			argNumber = argNumber + 1
		end
	end
	
	-- Geomask
	if maskItem then
		args["type"..argNumber] = "shape-inverse"
		args["id"..argNumber] = maskItem
		args["stroke-width"..argNumber] = config["geomask-stroke-width"] or DEFAULT_GEOMASK_STROKE_WIDTH
		args["stroke-color"..argNumber] = config["geomask-stroke-color"] or config["geomask-stroke-colour"] or DEFAULT_GEOMASK_STROKE_COLOR
		args["fill"..argNumber] = config["geomask-fill"] or DEFAULT_GEOMASK_FILL
		args["fill-opacity"..argNumber] = config["geomask-fill-opacity"] or DEFAULT_SHAPE_FILL_OPACITY
		-- Let kartographer determine zoom and position, unless it is explicitly set in config
		if not config.zoom and not config.switcher then
			args.zoom = nil
			args["frame-coord"] = nil
			args["frame-lat"] = nil
			args["frame-long"] = nil 	
			local maskArea = getStatementValue( getBestStatement(maskItem, 'P2046') )
		end
		incrementArgNumber()
		-- Hack to fix phab:T255932
		if not args.zoom then
			args["type"..argNumber] = "line"
			args["id"..argNumber] = maskItem
			args["stroke-width"..argNumber] = 0
			incrementArgNumber()
		end
	end
	
	-- Shape (or shape-inverse)
	if useWikidata and shouldShowShape then
		args["type"..argNumber] = shapeType
		if config.id then args["id"..argNumber] = config.id end
		args["stroke-width"..argNumber] = config["shape-stroke-width"] or config["stroke-width"] or DEFAULT_SHAPE_STROKE_WIDTH
		args["stroke-color"..argNumber] = config["shape-stroke-color"] or config["shape-stroke-colour"] or config["stroke-color"] or config["stroke-colour"] or DEFAULT_SHAPE_STROKE_COLOR
		args["fill"..argNumber] = config["shape-fill"] or DEFAULT_SHAPE_FILL
		args["fill-opacity"..argNumber] = config["shape-fill-opacity"] or DEFAULT_SHAPE_FILL_OPACITY
		incrementArgNumber()
	end
	
	-- Line
	if useWikidata and shouldShowLine then
		args["type"..argNumber] = "line"
		if config.id then args["id"..argNumber] = config.id end
		args["stroke-width"..argNumber] = config["line-stroke-width"] or config["stroke-width"] or DEFAULT_LINE_STROKE_WIDTH
		args["stroke-color"..argNumber] = config["line-stroke-color"] or config["line-stroke-colour"] or config["stroke-color"] or config["stroke-colour"] or DEFAULT_LINE_STROKE_COLOR
		incrementArgNumber()
	end

	-- Point
	if shouldShowPointMarker then
		args["type"..argNumber] = "point"
		if config.id then args["id"..argNumber] = config.id end
		if config.coord then args["coord"..argNumber] = config.coord end
		if config.marker then args["marker"..argNumber] = config.marker end
		args["marker-color"..argNumber] = config["marker-color"] or config["marker-colour"] or DEFAULT_MARKER_COLOR
		incrementArgNumber()
	end

	local mapframe = args.switch and mf.multi(args) or mf._main(args)
	local tracking = hasOsmRelationId and '' or '[[Category:Infobox mapframe在维基数据上没有OSM关系标识符]]'
	return mapframe .. tracking
end

return p