Module:Location map
Appearance
![]() | This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
![]() | This Lua module is used on approximately 776,000 pages, or roughly 1% of all pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
![]() | This module depends on the following other modules: |
![]() | This module uses TemplateStyles: |
Usage
This module implements the {{Location map}} and {{Location map~}} templates. Please see the template pages for usage instructions.
Known issues
Since the introduction of support for different captions when multiple maps are utilized, an issue has been highlighted.
Some infobox templates use their caption parameter directly instead of passing it to this module. This results in the display of a "##" between the two captions.
If you are unable to edit the infobox template, contact Bellezzasolo.
Tracking/maintenance categories
- Category:Location maps with possible errors
- Category:Location maps with different longitude and latitude precisions (6)
- Category:Location maps with marks outside map and outside parameter not set (599)
- Category:Location maps with a name containing a pipe (0)
- Category:Location maps with removed parameters (0)
- Category:Location maps with negative degrees and minutes or seconds (15)
- Tracking for a change (see talk): Category:Pages using location map with a double number sign in the caption (5)
See also
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function round(n, digits)
local mult = math.pow(10, digits)
return math.floor(n * mult + 0.5) / mult
end
local function decdeg(degrees, minutes, seconds, hemisphere, digits, decimal)
if decimal ~= nil then
return tonumber(decimal)
end
decimal = (degrees or 0) + (minutes or 0)/60 + (seconds or 0)/3600
if hemisphere == 'W' or hemisphere == 'w' or hemisphere == 'S' or hemisphere == 's' then
decimal = -decimal
end
if digits == nil then
digits = 7
end
return round(decimal, digits)
end
function p.tilde(frame) -- {{location map~}}
local args = getArgs(frame)
local retval = '<div style="position: absolute; top: '
local map_template = 'Location map ' .. args[1]
local map_y = frame:expandTemplate{title = map_template, args = { 'y' }}
if map_y and map_y ~= '' then
retval = retval .. frame:callParserFunction('#expr', frame:expandTemplate{title = map_template, args = { 'y', decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, nil, args.lat), decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, nil, args.long) }})
else
local map_top = frame:expandTemplate{title = map_template, args = { 'top' }}
local map_bottom = frame:expandTemplate{title = map_template, args = { 'bottom' }}
retval = retval .. round(100 * (map_top - decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, nil, args.lat) ) / (map_top - map_bottom), 1)
end
retval = retval .. '%; left: '
local map_x = frame:expandTemplate{title = map_template, args = { 'x' }}
local x
if map_x and map_x ~= '' then
x = frame:callParserFunction('#expr', frame:expandTemplate{title = map_template, args = { 'x', decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, nil, args.lat), decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, nil, args.long) }})
else
local map_crosses180 = frame:expandTemplate{title = map_template, args = { 'crosses180' }}
local map_left = frame:expandTemplate{title = map_template, args = { 'left' }}
local map_right = frame:expandTemplate{title = map_template, args = { 'right' }}
local crosses180_correction = map_crosses180 and map_crosses180 ~= '' and args.lon_dir == 'W' and (-36000/(map_left - map_right)) or 0
x = round(crosses180_correction + 100 * (decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, nil, args.long) - map_left) / (map_right - map_left), 1)
end
retval = retval .. x .. '%; height: 0; width: 0; margin: 0; padding: 0;"><div style="position: relative; text-align: center; '
local marksize = tonumber(args.marksize) or tonumber(frame:expandTemplate{title = map_template, args = { 'marksize' }}) or 8
retval = retval .. 'left: -' .. round(marksize / 2, 0) .. 'px; top: -' .. round(marksize / 2, 0) .. 'px; width: ' .. marksize .. 'px; font-size: ' .. marksize .. 'px; line-height:0;'
retval = retval .. '" title="' .. (args[2] or '') .. '">'
local mark = args.mark or frame:expandTemplate{title = map_template, args = { 'mark' }}
if mark == '' then mark = 'Red pog.svg' end
retval = retval .. '[[File:' .. mark .. '|' .. marksize .. 'x' .. marksize .. 'px|' .. (args.label or mw.title.getCurrentTitle().text) .. '|link=' .. (args.link or '') .. '|alt=' .. (args.alt or '') .. ']]'
retval = retval .. '</div>'
if args.position ~= 'none' then
retval = retval .. '<div style="font-size: ' .. (args.label_size or 90) .. '%; line-height: 110%; position: relative; top: -1.5em; width: ' .. (args.label_width or 6) .. 'em; '
if args.position == 'left' then
retval = retval .. 'left: -6.5em; text-align: right;'
elseif args.position == 'right' then
retval = retval .. 'left: 0.5em; text-align: left;'
elseif args.position == 'top' then
retval = retval .. 'top:-2.65em; left:-3em; text-align: center;'
elseif args.position == 'bottom' then
retval = retval .. 'top:-0.15em; left: -3em; text-align: center;'
elseif tonumber(x) > 70 then
retval = retval .. 'left: -6.5em; text-align: right;'
else
retval = retval .. 'left: 0.5em; text-align: left;'
end
retval = retval .. '"><span style="padding: 1px; '
if args.background then
retval = retval .. 'background-color: ' .. args.background .. ';'
end
retval = retval .. '">' .. (args.label or '') .. '</span></div>'
end
retval = retval .. '</div>'
return retval
end
return p