Module:Titled coords/sandbox
Appearance
| This is the module sandbox page for Module:Titled coords (diff). See also the companion subpage for test cases (run). |
| This module is rated as beta. It is considered ready for widespread use, but as it is still relatively new, it should be applied with some caution to ensure results are as expected. |
| This module depends on the following other modules: |
Description
This module generates titled coordinates from raw coordinates extracted from Wikidata. Currently, {{Wikidata}} does not support adding a title when requesting coordinates. So, when {{GeoGroup}} is used on a page with coordinates directly from Wikidata, the OpenStreetMap page will show an ordinal number as the title for each listed coordinate rather than a useful title. Using this module fixes the problem.
| Pages should not call this module directly but rather use {{Titled_coords}} as it supports both named and unnamed parameters. The template also extracts the raw coordinates from Wikidata using {{Wikidata}}. |
Usage
Call from Template
{{#invoke:Titled coords|main|Wikidata raw coords|title|options}}
Wikidata raw coords is the unformatted raw coordinates where each field is separated by an forward slash.
e.g. 50/27/40/N/122/17/42/W
Call from LUA modules
local Titled_coords = require('Module:Titled_coords')
local coords = Titled_coords.build(raw_coords, title, options)
-- *** Version 1.1 (Alpha) ***
local p = {}
function p.main(frame)
local raw_coords = frame.args[1]
local title = frame.args[2] or ""
local options = frame.args[3] or ""
local has_seconds = 1
local output = "", coords, sidx, eidx
local lat_d, lat_m, lat_s, lat_NS, lon_d, lon_m, lon_s, lon_WE
-- ** Display the raw coordinates obtained from {{wikidata}} **
if string.find(options,"raw") ~= nil then
output = output .. "raw_coords:" .. raw_coords
end
-- ** Extract the individual fields from the raw coordinates **
-- ** See https://www.lua.org/manual/5.3/manual.html#6.4.1 **
sidx, _, lat_d, lat_m, lat_s, lat_NS, lon_d, lon_m, lon_s, lon_WE =
string.find(raw_coords, "(%d+)/(%d+)/(%d+%.?%d+?)/(%a)/(%d+)/(%d+)/(%d+%.?%d+?)/(%a)")
if sidx == nil then -- extract without seconds
sidx, eidx, lat_d, lat_m, lat_NS, lon_d, lon_m, lon_WE =
string.find(raw_coords, "(%d+)/(%d+)/(%a)/(%d+)/(%d+)/(%a)")
if sidx == nil then
return output .. "<br/>Error: Failed to process raw_coords"
end
if string.find(options,"idx") ~= nil then
output = output .. "<br/>start: " .. sidx .. " end: " .. eidx .. " lat_d: " .. lat_d
return output
end
has_seconds = 0
end
if string.find(options,"debug") ~= nil then
if has_seconds == 1 then
output = output .. "<br/>raw_coords:" .. raw_coords .. "<br/>lat dms = " .. lat_d .. "|" .. lat_m .. "|" .. lat_s .. "|" .. lat_NS ..
"<br/>lon dms = " .. lon_d .. "|" .. lon_m .. "|" .. lon_s .. "|" .. lon_WE
else
output = output .. "<br/>raw_coords:" .. raw_coords .. "<br/>lat dm = " .. lat_d .. "|" .. lat_m .. "|" .. lat_NS ..
"<br/>lon dms = " .. lon_d .. "|" .. lon_m .. "|" .. lon_WE
end
end
-- ** URL encode spaces in the title with + **
local enc_title = title:gsub(" ", "+")
-- ** Call {{coord}} passing individual fields and setting the title **
local type_title = "type:mountain&title=" .. enc_title
if has_seconds == 1 then
coords = frame:expandTemplate{title='coord', args= { lat_d, lat_m, lat_s, lat_NS, lon_d, lon_m, lon_s, lon_WE, type_title}}
else
coords = frame:expandTemplate{title='coord', args= { lat_d, lat_m, lat_NS, lon_d, lon_m, lon_WE, type_title}}
-- ** Doesn't like me adding these args **
--"type:mountain","format=dms","name=" .. name}}
end
if output ~= "" then
return output .. "<br/>" .. coords
end
return coords
end
return p
--[[ Tried to invoke {{wikidata}} directly but not working:
local raw_coords = frame:expandTemplate{title='wikidata', args={'property','page=' .. page,'raw','coord'}}
]]