Hoppa till innehållet

Modul:GeoData

Från Wikivoyage, den fria resehandboken.

Dokumentationen för denna modul kan skapas på Modul:GeoData/dok

local i = {}
 
local function __nospace(s)
	local newstr = '';
	newstr = mw.ustring.gsub(s or '', '%s', ''); --rimuovo gli spazi
	return newstr;
end

function i.nospace(frame)
	return __nospace(frame.args[1]); --rimuovo gli spazi
end


local function __nozeros(lat, long)
	local lat = lat or '';
	local long = long or '';

	--se uno dei due parametri è vuoto restituisco una stringa vuota per evidenziarne l'errore
	if lat=='' or long=='' then
		return "";
	end

	--normalizzo eventuali simboli non standard
	for _,search in ipairs({"'", "‘", "’", "′", "'"}) do
		lat = string.gsub(lat, search, "'");
		long = string.gsub(long, search, "'");
	end
	for _,search in ipairs({'"', "''", "“", "”", """}) do
		lat = string.gsub(lat, search, '"');
		long = string.gsub(long, search, '"');
	end

	--se hanno entrambi i secondi a 0 li sopprimo
	if string.find(lat, "'%s?0?0\"") and string.find(long, "'%s?0?0\"") then
		lat = string.gsub(lat, "'%s?0?0\"", "'");
		long = string.gsub(long, "'%s?0?0\"", "'");
	else
		return lat.." "..long;
	end

	--se hanno entrambi i minuti a 0 li sopprimo
	if string.find(lat, "°%s?0?0'") and string.find(long, "°%s?0?0'") then
		lat = string.gsub(lat, "°%s?0?0'", "°");
		long = string.gsub(long, "°%s?0?0'", "°");
	end

	return lat.." "..long;
end

function i.nozeros(frame)
	return __nozeros(frame.args[1], frame.args[2])

end


local function __dd2dms(p1,p2)
	local coordinate=__nozeros(__nospace(p1), __nospace(p2));
	--se minuti e/o secondi hanno una sola cifra gli antepongo uno zero
	coordinate=string.gsub(coordinate, "(° ?)(.')","%10%2");
	coordinate=string.gsub(coordinate, "(' ?)(.\")","%10%2");
	return coordinate;
end

function i.dd2dms(frame)
	return __dd2dms(frame.args[1], frame.args[2]);
end


function i.dd2dmsspan(frame)
	local coordinate = __dd2dms(frame.args[1], frame.args[2]);
	local lat, long = coordinate:match("(.+) (.+)");
	return '<span class="latitude">' .. lat .. '</span> ' .. '<span class="longitude">' .. long .. '</span>';
end

return i;