Módulo:Mapa de localización/sandbox
Uso
Este módulo implementa las plantillas {{Mapa de localización}}
y {{Mapa de localización~}}
. Por favor consulte las páginas de plantilla correspondientes para las instrucciones de uso.
Ejemplos
Múltiples mapas
{{#invoke:Mapa de localización|main|Gran Belfast#Irlanda del Norte#Isla de Irlanda#Reino Unido | pie = Ubicación en el [[Gran Belfast]]##Ubicación en [[Irlanda del Norte]]##Ubicación en la [[Isla de Irlanda]]##Ubicación en el [[Reino Unido]] | etiqueta = BHD | lat_gra = 54.615486 | lon_gra = -5.871233 }}
Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Gran Belfast ni la Plantilla:Mapa de localización de Gran Belfast.
{{#invoke:Mapa de localización|main|Gran Belfast#Irlanda del Norte#Isla de Irlanda#Reino Unido | pie = Ubicación cerca del Gran Belfast | etiqueta = BFS | lat_gra = 54.6575 | lon_gra = -6.215833 }}
Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Gran Belfast ni la Plantilla:Mapa de localización de Gran Belfast.
Ancho predeterminado y alineación, sin mapa ni etiqueta, pie predeterminado (coordenadas decimales)
Nota: Cuando no se especifica una etiqueta, el pie predeterminado es "Nombre de la página (Mapa nombre)" por lo que si este ejemplo se ve en una página llamada Pag, el título predeterminado sería "Pag (Tierra)". Del mismo modo, en una página llamada Pag (ciudad), el título predeterminado sería "Pag (ciudad) (Tierra)". Error de Lua en la línea 540: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Tierra ni la Plantilla:Mapa de localización de Tierra.
{{#invoke:Mapa de localización|main| | alt = Pag está en una isla. | lat_gra = 44.44 | lon_gra = 15.05 }}
Ancho predeterminado y alineación, sin etiqueta, pie predeterminado (coordenadas decimales)
Nota: Cuando no se especifica una etiqueta, el pie predeterminado es "Nombre de la página (Mapa nombre)" por lo que si este ejemplo se ve en una página llamada Pag, el título predeterminado sería "Pag (Croacia)". Del mismo modo, en una página llamada Pag (ciudad), el título predeterminado sería "Pag (ciudad) (Croacia)". Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Croacia ni la Plantilla:Mapa de localización de Croacia.
{{#invoke:Mapa de localización|main|Croacia | alt = Pag está en una isla. | lat_gra = 44.44 | lon_gra = 15.05 }}
Mapas con el pie por defecto (grados/minutos)
Nota: Cuando se especifica una etiqueta, el pie predeterminado es "texto de la etiqueta (Mapa nombre)", visto como "Pag (Croacia)" en este ejemplo. Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Croacia ni la Plantilla:Mapa de localización de Croacia.
{{#invoke:Mapa de localización|main|Croacia | ancho = 200 | alineación = right | alt = Pag está en una isla. | etiqueta = Pag | posición = right | marca = Green pog.svg <!-- punto verde --> | lat_gra = 44 | lat_min = 26 <!-- Por defecto: lat_dir = N --> | lon_gra = 15 | lon_min = 3 <!-- Por defecto: lon_dir = E --> }}
Marca fuera de los límites del mapa, sin pie
Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Croacia ni la Plantilla:Mapa de localización de Croacia.
{{#invoke:Mapa de localización|main|Croacia | ancho = 200 | alineación = right | pie = | alt = Rimini está en Italia (aparece fuera del mapa) | lat_gra = 44.05 | lon_gra = 12.57 <! - Fuera borde izquierdo del mapa a 13,1 -> lon_gra = 12,57 --> | fuera = 1 <! - Somos conscientes el punto está fuera del mapa, por lo suprimimos la categoría de alerta -> fuera = 1 --> | etiqueta = Rimini | posición = right }}
pie, tamaño_etiqueta, fondo_etiqueta, marca, tamaño_marca
Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Italia ni la Plantilla:Mapa de localización de Italia.
{{#invoke:Mapa de localización|main|Italia | ancho = 200 | alineación = right | pie = Ubicación de Rimini en Italia | alt = Mapa de Italia con la marca de la ubicación de Rimini | etiqueta = Rimini | tamaño_etiqueta = 150 <!--150% del tamaño normal--> | posición = bottom | color_etiqueta = orange <!-- naranja --> | marca = Orange_pog.svg | tamaño_marca = 12 <!--tamaño en pixels--> | lat_gra = 44.05 | lon_gra = 12.57 }}
Parámetro mapa_alternativo
Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Italia ni la Plantilla:Mapa de localización de Italia.
{{#invoke:Mapa de localización|main|Italia | mapa_alternativo = Italy location map.svg | ancho = 200 | alineación = right | pie = Ubicación de Roma en Italia | alt = Mapa de italia con una marca que muestra la ubicación de Roma. | etiqueta = Roma | lat_gra = 41.9 | lon_gra = 12.5 }}
Parámetro tipo
También demuestra el posicionamiento automático de etiqueta a la izquierda, debido a la posición de extremo derecho de marca. Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Nepal ni la Plantilla:Mapa de localización de Nepal.
{{#invoke:Mapa de localización|main|Nepal | tipo = relieve | pie = Ubicación del Aeropuerto Biratnagar en Nepal | alt = El Aeropuerto Biratnagar Airport se ubica al sureste de Nepal | etiqueta = Biratnagar | marca = Airplane silhouette.svg | tamaño_marca = 10 | lat_gra = 26 | lat_min = 28 | lat_seg = 53 | lat_dir = N | lon_gra = 87 | lon_min = 15 | lon_seg = 50 | lon_dir = E }}
Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Nepal ni la Plantilla:Mapa de localización de Nepal.
{{#invoke:Mapa de localización|main|Nepal | tipo = | pie = Ubicación del Aeropuerto Biratnagar en Nepal | alt = El Aeropuerto Biratnagar Airport se ubica al sureste de Nepal | etiqueta = Biratnagar | marca = Airplane silhouette.svg | tamaño_marca = 10 | lat_gra = 26 | lat_min = 28 | lat_seg = 53 | lat_dir = N | lon_gra = 87 | lon_min = 15 | lon_seg = 50 | lon_dir = E }}
Las mismas coordenadas en diferentes mapas
Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Escocia ni la Plantilla:Mapa de localización de Escocia.
{{#invoke:Mapa de localización|main|Escocia | tipo = relieve | ancho = 180 | alineación = right | pie = Lockerbie en Escocia, Reino Unido | alt = Lockerbie se encuentra en el sur de Escocia. | etiqueta = Lockerbie | marca = Blue_pog.svg | lon_segsize = 9 | lat_gra = 55 | lat_min = 07 | lat_seg = 16 | lat_dir = N | lon_gra = 03 | lon_min = 21 | lon_seg = 19 | lon_dir = W }}
Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Reino Unido ni la Plantilla:Mapa de localización de Reino Unido.
{{#invoke:Mapa de localización|main|Reino Unido | tipo = relieve | ancho = 180 | alineación = right | pie = Lockerbie en Escocia, Reino Unido | alt = Lockerbie se encuentra en el sur de Escocia. | etiqueta = Lockerbie | lon_seg = Blue_pog.svg | lon_segsize = 9 | lat_gra = 55 | lat_min = 07 | lat_seg = 16 | lat_dir = N | lon_gra = 03 | lon_min = 21 | lon_seg = 19 | lon_dir = W }}
Mapas que atraviesan el meridiano 180°
Error de Lua en la línea 525: No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/Fiyi ni la Plantilla:Mapa de localización de Fiyi.
{{#invoke:Mapa de localización|main|Fiyi | ancho = 180 | alineación = right | etiqueta = Suva | posición = right | color_etiqueta = yellow | marca = Locator_Dot.png | tamaño_marca = 7 | lat_gra = 18 | lat_min = 8 | lat_seg = 0 | lat_dir = S | lon_gra = 178 | lon_min = 26 | lon_seg = 0 | lon_dir = E }}
require('Módulo:No globals') local p = {} local getArgs = require('Módulo:Argumentos').obtenerArgumentos local function round(n, decimals) local pow = 10^(decimals or 0) return math.floor(n * pow + 0.5) / pow end function p.getMapParams(map, frame) if not map then error('Se debe especificar el nombre de la definición del mapa de localización que va a usar', 2) end map = mw.text.trim(map) --local moduletitle = mw.title.new('Módulo:Mapa de localización/datos/' .. map) --mw.log('Nombre ' .. 'Módulo:Mapa de localización/datos/' .. map) --if not moduletitle then -- mw.log('Nombre no válido ' .. 'Módulo:Mapa de localización/datos/' .. map) -- error('"' .. map .. '" no es un nombre válido para una definición de mapa de localización', 2) --elseif moduletitle.exists then -- local mapData = mw.loadData('Módulo:Mapa de localización/datos/' .. map) -- return function(name, params) -- if name == nil then -- return 'Módulo:Mapa de localización/datos/' .. map -- elseif mapData[name] == nil then -- return '' -- elseif params then -- return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain() -- else -- return mapData[name] -- end -- end --elseif mw.title.new('Plantilla:Mapa de localización de ' .. map).exists then if mw.title.new('Plantilla:Mapa de localización de ' .. map).exists then local cache = {} if type(frame) ~= 'table' or type(frame.expandTemplate) ~= 'function' then error('Debe proporcionar el objeto frame de la página si utiliza un mapa implementado mediante una plantilla') end return function(name, params) if params then return frame:expandTemplate{title = 'Plantilla:Mapa de localización de ' .. map, args = { name, unpack(params) }} else if name == nil then return 'Plantilla:Mapa de localización de ' .. map elseif cache[name] == nil then cache[name] = frame:expandTemplate{title = 'Plantilla:Mapa de localización de ' .. map, args = { name }} end return cache[name] end end else error('No se puede mostrar la ubicación especificada porque no existe el Módulo:Mapa de localización/datos/' .. map .. ' ni la Plantilla:Mapa de localización de ' .. map, 2) end end function p.data(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true}) end if not map then map = p.getMapParams(args[1], frame) end local params = {} for k,v in ipairs(args) do if k > 2 then params[k-2] = v end end return map(args[2], #params ~= 0 and params) end local hemisphereMultipliers = { longitude = { W = -1, w = -1, O = -1, o = -1, E = 1, e = 1 }, latitude = { S = -1, s = -1, N = 1, n = 1 } } local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction) if not degrees or degrees == '' then if not decimal or decimal == '' then return nil end local retval = tonumber(decimal) if not retval then error('El valor "' .. decimal .. '" provisto en ' .. direction .. ' no es válido', 2) end return retval end decimal = tonumber(degrees) if not decimal then error('El valor de grados "' .. degrees .. '" provisto en ' .. direction .. ' no es válido', 2) end if minutes and minutes == '' then minutes = 0 end if seconds and seconds == '' then seconds = 0 end if minutes and not tonumber(minutes) then error('El valor de minutos "' .. minutes .. '" provisto en ' .. direction .. ' no es válido', 2) end if seconds and not tonumber(seconds) then error('El valor de segundos "' .. seconds .. '" provisto en ' .. direction .. ' no es válido', 2) end decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600 if hemisphere and hemisphere ~= '' then local multiplier = hemisphereMultipliers[direction][hemisphere] if not multiplier then error('El hemisferio "' .. hemisphere .. '" provisto en ' .. direction .. ' no es válido', 2) end decimal = decimal * multiplier end return decimal end -- Efectivamente hacer removeBlanks false para el pie y mapLink, y true para todo lo demás -- Si useWikidata está presente, pero en blanco, convertirlo en false en lugar de cero -- p.top, p.bottom y sus interlocutores necesitan utilizar esto function p.valueFunc(key, value) if value then value = mw.text.trim(value) end if value ~= '' or key == 'pie' or key == 'caption' or key == 'maplink' or key == "enlace_mapa" then return value elseif key == 'useWikidata' or key == "usar_wikidata"then return false end end local function getContainerImage(args, map) if (args.AlternativeMap and args.AlternativeMap ~= '') or (args.mapa_alternativo and args.mapa_alternativo ~= '') then return args.AlternativeMap or args.mapa_alternativo elseif args.tipo and args.tipo ~= '' and map(args.tipo) and map(args.tipo) ~= '' then return map(args.tipo) elseif args.relief or args.relieve and map('image1') ~= '' then return map('image1') else return map('image') end end function p.top(frame, args, map) local alineacion, borde, pie, ancho, enlaceMapa, etiqueta, ImagenSuperpuesta if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end -- Variable con los parámetros en inglés o en español local width ancho = args.ancho or args.width alineacion = args['alineación'] or args.float pie = args.caption or args['pie'] enlaceMapa = args.enlace_mapa or args.maplink etiqueta = args.label or args.etiqueta borde = args.borde or args.border ImagenSuperpuesta = args.imagen_superpuesta or args.overlay_image if not ancho or ancho == '' then width = round((args.default_width or 240) * (tonumber(map('defaultscale')) or 1)) elseif mw.ustring.sub(ancho, -2) == 'px' then width = mw.ustring.sub(ancho, 1, -3) else width = ancho end local retval = alineacion == 'center' and '<div class="center">' or '' if pie and pie ~= '' and pie ~= 'no' then retval = retval .. '<div class="noviewer thumb ' if alineacion == '"left"' or alineacion == 'left' then retval = retval .. 'tleft' elseif alineacion == '"center"' or alineacion == 'center' or alineacion == 'centrado' or alineacion == '"none"' or alineacion == 'none' then retval = retval .. 'tnone' else retval = retval .. 'tright' end retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px' if borde == 'none' then retval = retval .. ';border:none' elseif borde then retval = retval .. ';border-color:' .. borde end retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (borde ~= 'none' and ';border:1px solid lightgray">' or '">') else retval = retval .. '<div style="width:' .. width .. 'px;' if alineacion == '"left"' or alineacion == 'left' then retval = retval .. 'float:left;clear:left' elseif alineacion == '"center"' or alineacion == 'center' or alineacion == 'centrado' then retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto' elseif alineacion == '"none"' or args.float == 'none' then retval = retval .. 'float:none;clear:none' else retval = retval .. 'float:right;clear:right' end retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">' end local image = getContainerImage(args, map) local currentTitle = mw.title.getCurrentTitle() retval = string.format( '%s[[Archivo:%s|%spx|%s%s]]', retval, image, width, args.alt or ('alt=' .. (etiqueta or mw.title.getCurrentTitle().text) .. ' ubicada en ' .. map('name')), enlaceMapa and ('|link=' .. enlaceMapa) or '' ) if args.pie and args.pie ~= '' then if (currentTitle.namespace == 0) and mw.ustring.find(args.pie, '##') then retval = retval .. '[[Categoría:Wikipedia:Páginas utilizando un mapa de localización con doble numeral en el pie]]' end end if args.overlay_image then return retval .. '<div style="position:absolute;top:0;left:0">[[Archivo:' .. ImagenSuperpuesta .. '|' .. width .. 'px]]</div>' else return retval end end function p.bottom(frame, args, map) local alineacion, borde, pie, ancho, enlaceMapa, etiqueta, pieNoDefinido if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end -- Variable con los parámetros en inglés o en español local width ancho = args.ancho or args.width alineacion = args['alineación'] or args.float pie = args.caption or args['pie'] enlaceMapa = args.enlace_mapa or args.maplink etiqueta = args.etiqueta or args.label borde = args.borde or args.border pieNoDefinido = args.pie_no_definido or args.caption_undefined local retval = '</div>' if not pie then retval = retval .. '<div style="font-size:90%;padding-top:3px">' .. (( etiqueta or mw.title.getCurrentTitle().text) .. ' (' .. map('name') .. ')') .. '</div>' elseif pie == '' or pie == 'no' then retval = retval .. '<div style="font-size:90%;padding-top:3px"></div>' else -- Creando un vínculo sin ningún texto a propósito para que el CSS nos pueda dar una buena imagen retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:Archivo:' .. getContainerImage(args, map) .. '| ]]</div>' .. pie .. '</div>' end if args.switcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>' elseif args.autoSwitcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">Mostrar mapa de ' .. map('name') .. '</span>' end retval = retval .. '</div></div>' retval = retval .. (alineacion == 'center' and '</div>' or '') if pieNoDefinido then mw.log('parámetro pie_no_definido eliminado') local parent = frame:getParent() if parent then mw.log('El padre es ' .. parent:getTitle()) end mw.logObject(args, 'args') retval = retval .. '[[Categoría:Wikipedia:Mapas de localización con parámetro eliminado en la llamada]]' end return retval end local function markOuterDiv(x, y, imageDiv, labelDiv) return mw.html.create('div') :cssText('position:absolute;top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%;height:0;width:0;margin:0;padding:0') :node(imageDiv) :node(labelDiv) end local function markImageDiv(mark, marksize, label, link, alt, title) local builder = mw.html.create('div') :cssText('position:absolute;text-align:center;left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px;width:' .. marksize .. 'px;font-size:' .. marksize .. 'px;line-height:0') :attr('title', title) if marksize ~= 0 then builder:wikitext(string.format( '[[Archivo:%s|%dx%dpx|%s|link=%s%s]]', mark, marksize, marksize, label, link, alt and ('|alt=' .. alt) or '' )) end return builder end local function markLabelDiv(label, label_size, label_width, position, background, x, marksize) local builder = mw.html.create('div') :cssText('font-size:' .. label_size .. '%;line-height:110%;position:absolute;width:' .. label_width .. 'em') local distance = round(marksize / 2 + 1) local spanCss if position == 'top' then -- specified top builder:cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em;text-align:center') elseif position == 'bottom' then -- specified bottom builder:cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em;text-align:center') elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left builder:cssText('top:-0.75em;right:' .. distance .. 'px;text-align:right') spanCss = 'float:right' else -- specified right or autodetected to right builder:cssText('top:-0.75em;left:' .. distance .. 'px;text-align:left') spanCss = 'float:left' end builder = builder:tag('span') :cssText('padding:1px') :cssText(spanCss) :wikitext(label) if background then builder:cssText('background-color:' .. background) end return builder:done() end local function getX(longitude, left, right) local width = (tonumber(right) - tonumber(left)) % 360 if width == 0 then width = 360 end local distanceFromLeft = (longitude - left) % 360 -- La distancia más allá de la derecha del mapa es igual a distanceFromLeft - ancho. -- La distancia más allá de la izquierda del mapa es igual a 360 - distanceFromLeft. -- para minimizar el estiramiento de la página será de cualquier manera más corta if distanceFromLeft - width / 2 >= 180 then distanceFromLeft = distanceFromLeft - 360 end return 100 * distanceFromLeft / width end local function getY(latitude, top, bottom) return 100 * (top - latitude) / (top - bottom) end function p.mark(frame, args, map) if not args then args = getArgs(frame, {wrappers = 'Mapa de localización~'}) end local mapnames = {} if not map then if args[1] and args[1] ~= "" and not string.match(args[1],"^%s*$") then map = {} for mapname in mw.text.gsplit(args[1], '#', true) do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) mapnames[#mapnames + 1] = mapname end if #map == 1 then map = map[1] end else map = p.getMapParams('Tierra', frame) args[1] = 'Tierra' end end if type(map) == 'table' then local outputs = {} local oldargs = args[1] for k,v in ipairs(map) do args[1] = mapnames[k] outputs[k] = tostring(p.mark(frame, args, v)) end args[1] = oldargs return table.concat(outputs, '#PlaceList#') .. '#PlaceList#' end local x, y, longitude, latitude, fuera, wikidata, declaraciones fuera = args.fuera or args.outside longitude = decdeg(args.lon_deg or args.lon_gra, args.lon_min, args.lon_sec or args.lon_seg, args.lon_dir, args.long, 'longitude') latitude = decdeg(args.lat_deg or args.lat_gra, args.lat_min, args.lat_sec or args.lat_seg, args.lat_dir, args.lat, 'latitude') wikidata = args.usar_wikidata or args.useWikidata if args.excludefrom then -- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps) for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do -- Check if this map is excluded. If so, return an empty string. if args[1] == exclusionmap then return '' end end end local builder = mw.html.create() local currentTitle = mw.title.getCurrentTitle() if args.coordenadas then -- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]] -- if longitude or latitude then -- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided') -- end longitude = coord2text('longitud', args.coordenadas) latitude = coord2text('latitud', args.coordenadas) elseif not longitude and not latitude and wikidata then -- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't. local entity = mw.wikibase.getEntity() if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then local value = entity.claims.P625[1].mainsnak.datavalue.value longitude, latitude = value.longitude, value.latitude end if args.link and (currentTitle.namespace == 0) then builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con marcadores enlazados con coordenadas de Wikidata]]') end end if not longitude then error('No se pasó ningun valor para la longitud') elseif not latitude then error('No se pasó ningun valor para la latitud') end if currentTitle.namespace > 0 then if (not args.lon_deg) ~= (not args.lat_deg) then builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con diferente precisión de longitud y latitud|Grados]]') elseif (not args.lon_min) ~= (not args.lat_min) then builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con diferente precisión de longitud y latitud|Minutos]]') elseif (not args.lon_sec) ~= (not args.lat_sec) then builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con diferente precisión de longitud y latitud|Segundos]]') elseif (not args.lon_dir) ~= (not args.lat_dir) then builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con diferente precisión de longitud y latitud|Hemisferio]]') elseif (not args.long) ~= (not args.lat) then builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con diferente precisión de longitud y latitud|Decimal]]') end end if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con grados, minutos, o segundos negativos]]') end if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con grados, minutos, o segundos negativos]]') end if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con grados, minutos, o segundos negativos]]') end if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con grados, minutos, o segundos negativos]]') end if args.skew or args.lon_shift or args.markhigh then mw.log('Parámetro utilizado en la invocación eliminado.') local parent = frame:getParent() if parent then mw.log('El padre es ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = (args.skew and 'skew' or '') .. (args.lon_shift and 'lon_shift' or '') .. (args.markhigh and 'markhigh' or '') builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con parámetro eliminado en la llamada|' .. key ..' ]]') end end --if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' then --or map('type') ~= '' then -- mw.log('Eliminados parámetros usados en la definición del mapa ' .. map()) -- builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con parámetro eliminado en la llamada]]') --end if map('x') and map('x') ~= '' and tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude }))) then mw.log('Existe x -' .. map('x')) x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude }))) else mw.log('No existe x') x = tonumber(getX(longitude, map('left'), map('right'))) end if map('y') and map('y') ~= '' and tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude }))) then mw.log('Existe y -' .. map('y')) y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude }))) else mw.log('No existe y') y = tonumber(getY(latitude, map('top'), map('bottom'))) end if (x < 0 or x > 100 or y < 0 or y > 100) and not fuera then mw.log('La localización está fuera de los límites del mapa. x = ' .. x .. ', y = ' .. y) local parent = frame:getParent() if parent then mw.log('El padre es ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = currentTitle.prefixedText builder:wikitext('[[Categoría:Wikipedia:Mapas de localización con la marca fuera de sus límites y marca fuera no asignada|' .. key .. ' ]]') end end local mark = args.marca or args.mark or map('marca') or map('mark') if mark == '' then mark = 'Red pog.svg' end local etiqueta = args.etiqueta or args.label local posicion = args['posición'] or args.position local marksize = tonumber(args.marksize) or tonumber(args['tamaño_marca']) or tonumber(map('marksize')) or tonumber(map('tamaño_marca')) or 8 local imageDiv = markImageDiv(mark, marksize, etiqueta or mw.title.getCurrentTitle().text, args.enlace or args.link or '', args.alt, args[2]) local labelDiv if etiqueta and posicion ~= 'none' then labelDiv = markLabelDiv(etiqueta, args['tamaño_etiqueta'] or args.label_size or 90, args['ancho_etiqueta'] or args.label_width or 6, args['posición'] or args.position, args['color_etiqueta'] or args.background, x, marksize) end return builder:node(markOuterDiv(x, y, imageDiv, labelDiv)) end local function switcherSeparate(s) if s == nil then return {} end local retval = {} for i in string.gmatch(s .. '#', '([^#]*)#') do i = mw.text.trim(i) retval[#retval + 1] = (i ~= '' and i) end return retval end function p.main(frame, args, map) local caption_list = {} if not args then args = getArgs(frame, {wrappers = 'Plantilla:Mapa de localización', valueFunc = p.valueFunc}) end if args.useWikidata == nil and args.usar_wikidata == nil then args.useWikidata = true end if not map then if args[1] and args[1] ~= "" and not string.match(args[1],"^%s*$") then map = {} for mapname in string.gmatch(args[1], '[^#]+') do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) end if args['pie'] then if args['pie'] == "" then while #caption_list < #map do caption_list[#caption_list + 1] = args['pie'] end else for caption in mw.text.gsplit(args['pie'], '##', true) do caption_list[#caption_list + 1] = caption end end end if #map == 1 then map = map[1] end else map = p.getMapParams('Tierra', frame) end end if type(map) == 'table' then local altmaps = switcherSeparate(args.mapa_alternativo) if #altmaps > #map then error(string.format('%d mapa_alternativo provistos, pero solo %d mapas se pasaron', #altmaps, #map)) end local overlays = switcherSeparate(args.imagen_superpuesta) if #overlays > #map then error(string.format('%d imagen_superpuesta provistas, pero solo %d mapas se pasaron', #overlays, #map)) end if #caption_list > #map then error(string.format('%d pie provistos, pero solo %d mapas se pasaron', #caption_list, #map)) end local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do args.mapa_alternativo= altmaps[k] args.imagen_superpuesta = overlays[k] if k <= #caption_list then args.pie = caption_list[k] else args.pie = false end outputs[k] = p.main(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map) end end return p