Modulo:GeoData

Da Wikivoyage.

Esempi[modifica]

Funzione nospace[modifica]

Esempio Input Risultato
{{#invoke:GeoData|nospace|}}
{{#invoke:GeoData|nospace|5° N}} 5° N 5°N
{{#invoke:GeoData|nospace|5° 10' N}} 5° 10' N 5°10'N
{{#invoke:GeoData|nospace|5° 01' 20" N}} 5° 01' 20" N 5°01'20"N
{{#invoke:GeoData|nospace|{{#dd2dms: 14.58|precision=0}}}} 15° 15°
{{#invoke:GeoData|nospace|{{#dd2dms: 14.58|precision=2}}}} 14° 35' 14°35'
{{#invoke:GeoData|nospace|{{#dd2dms: 14.58|precision=4}}}} 14° 34' 48" 14°34'48"
{{#invoke:GeoData|nospace|{{#dd2dms: 14.58}}}} 14° 34' 48" 14°34'48"
{{#invoke:GeoData|nospace|{{#dd2dms: 14.58N}}}} 14° 34' 48" N 14°34'48"N
{{#invoke:GeoData|nospace|{{#dd2dms: 14.58X}}}} Input non corretto Inputnoncorretto
{{#invoke:GeoData|nospace|{{#dd2dms:}}}} Input non corretto Inputnoncorretto

Funzione nozeros[modifica]

Esempio Input Risultato
{{#invoke:GeoData|nozeros|}} no lat, no long
{{#invoke:GeoData|nozeros|5° N}} 5° N, no long
{{#invoke:GeoData|nozeros||10° E}} no lat, 10° E
{{#invoke:GeoData|nozeros|5° 10' 00" N|10° 20' 40" E}} 5° 10' 00" N, 10° 20' 40" E 5° 10' 00" N 10° 20' 40" E
{{#invoke:GeoData|nozeros|5° 01' 20" N|10° 20' 00" E}} 5° 01' 20" N, 10° 20' 00" E 5° 01' 20" N 10° 20' 00" E
{{#invoke:GeoData|nozeros|5° 00' 20" N|10° 00' 00" E}} 5° 00' 20" N, 10° 00' 00" E 5° 00' 20" N 10° 00' 00" E
{{#invoke:GeoData|nozeros|5° 10' 00" N|10° 20' 00" E}} 5° 10' 00" N, 10° 20' 00" E 5° 10' N 10° 20' E
{{#invoke:GeoData|nozeros|5° 00' 00" N|10° 00' 00" E}} 5° 00' 00" N, 10° 00' 00" E 5° N 10° E
{{#invoke:GeoData|nozeros|5° 0' 0" N|10° 0' 0" E}} 5° 0' 0" N, 10° 0' 0" E 5° N 10° E
{{#invoke:GeoData|nozeros|{{#dd2dms: {{Dms2dec|5.005555N|4}} N|precision=4}}|{{#dd2dms: {{Dms2dec|10.333333E|4}}|precision=4}} E}} 5° 0' 20" N, 10° 20' 0" E 5° 0' 20" N 10° 20' 0" E
{{#invoke:GeoData|nozeros|{{#dd2dms: {{Dms2dec|5.033333N|4}}|precision=4}} N|{{#dd2dms: {{Dms2dec|10.333333E|4}}|precision=4}} E}} 5° 2' 0" N, 10° 20' 0" E 5° 2' N 10° 20' E
{{#invoke:GeoData|nozeros|{{#dd2dms: 15N|precision=4}}|{{#dd2dms: 16E|precision=4}}}} 15° 0' 0" N, 16° 0' 0" E 15° N 16° E

Funzione dd2dms[modifica]

Esempio Input Risultato
{{#invoke:GeoData|dd2dms||10° E}} no lat, 10° E
{{#invoke:GeoData|dd2dms|xyz|10° E}} xyz, 10° E xyz 10°E
{{#invoke:GeoData|dd2dms|{{#dd2dms: {{Dms2dec|5.000555N|4}} N|precision=4}}|{{#dd2dms: {{Dms2dec|10.333333E|4}}|precision=4}} E}} 5° 0' 2" N, 10° 20' 0" E 5°00'02"N 10°20'00"E
{{#invoke:GeoData|dd2dms|{{#dd2dms: {{Dms2dec|5.033333N|4}}|precision=4|plus=N|minus=S}}|{{#dd2dms: {{Dms2dec|10.333333E|4}}|precision=4|plus=E|minus=W}}}} 5° 2' 0" N, 10° 20' 0" E 5°02'N 10°20'E
{{#invoke:GeoData|dd2dms|{{#dd2dms: 15N|precision=4}}|{{#dd2dms: 16E|precision=4}}}} 15° 0' 0" N, 16° 0' 0" E 15°N 16°E

Per forzare il controllo sulla correttezza delle coordinare e ritornare una stringa vuota se errate, utilizzare la seguente sintassi:

{{#ifeq:{{#dd2dms:LAT}}|Input non corretto||{{#ifeq:{{#dd2dms:LONG}}|Input non corretto||{{#invoke:GeoData|dd2dms|LAT|LONG}}}}}}

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;