Módulo:Prop latilong
Apariencia
Este módulo no tiene página de documentación[crear]
-- Módulo creado en marzo de 2024 para generar latitud y longitud a partir de las coordenadas contenidas en la propiedad p625
-- Se utiliza en la plantilla ficha de cráter lunar, debido a que latitud y longitud han desaparecido de Wikidata
-- Se invoca de la siguiente manera:
-- * {{#invoke:Prop_latilong|PROLATI|1={{#property:P625}}}} (genera la LATITUD)
-- * {{#invoke:Prop_latilong|NOS |1={{#property:P625}}}} (genera la posición Norte o Sur [N o S])
-- * {{#invoke:Prop_latilong|PROLONG|1={{#property:P625}}}} (genera la LONGITUD)
-- * {{#invoke:Prop_latilong|EOW |1={{#property:P625}}}} (genera la posición Este u Oeste [E o O])
-- El parámetro 1 siempre serán las coordenadas recibidas de la llamada al módulo desde la propiedad P625
-- El valor de la propiedad P625 tiene este aspecto cuando se carga: "7°33'36"S, 87°40'12"E"
-- aunque puede tener menor precisión ("7°33'S, 87°40'E" o "7°S, 87°E")
local p = {}
function CoordsFromString(s)
local lat_deg, lat_min, lat_sec, lat_pos,
lon_deg, lon_min, lon_sec, lon_pos
lat_deg, lat_min, lat_sec, lat_pos, lon_deg, lon_min, lon_sec, lon_pos =
mw.ustring.match(s, "([0-9]+)°([0-9]+)'([0-9]+)"([NS]), ([0-9]+)°([0-9]+)'([0-9]+)"([EW])", 0)
if not lon_pos then
lat_sec, lon_sec = 0, 0
lat_deg, lat_min, lat_pos, lon_deg, lon_min, lon_pos =
mw.ustring.match(s, "([0-9]+)°([0-9]+)'([NS]), ([0-9]+)°([0-9]+)'([EW])", 0)
if not lon_pos then
lat_min, lon_min = 0, 0
lat_deg, lat_pos, lon_deg, lon_pos =
mw.ustring.match(s, "([0-9]+)°([NS]), ([0-9]+)°([EW])", 0)
if not lon_pos then
-- lat_deg, lon_deg = 0, 0
return nil, nil -- invalid coordinates
end
end
end
local lat, lon
lat = tonumber(lat_deg) + tonumber(lat_min)/60 + tonumber(lat_sec)/3600
if lat_pos == "S" then lat = -lat end
lon = tonumber(lon_deg) + tonumber(lon_min)/60 + tonumber(lon_sec)/3600
if lon_pos == "W" then lon = -lon end
return lat, lon
end
function p.NOS(frame)
local s = frame.args[1]
if s then
local lat, lon = CoordsFromString(s)
if lat then
if lat < 0 then
return 'S'
else
return 'N'
end
end
end
end
function p.EOW(frame)
local s = frame.args[1]
if s then
local lat, lon = CoordsFromString(s)
if lon then
if lon < 0 then
return 'W'
else
return 'E'
end
end
end
end
function p.PROLATI(frame)
local s = frame.args[1]
if s then
local lat, lon = CoordsFromString(s)
if lat then
return math.abs(lat)
end
end
end
function p.PROLONG(frame)
local s = frame.args[1]
if s then
local lat, lon = CoordsFromString(s)
if lon then
return math.abs(lon)
end
end
end
return p