Modul:Coordinate

aus Wikipedia, der freien Enzyklopädie

Die Dokumentation für dieses Modul kann unter Modul:Coordinate/Doku erstellt werden

local p = {} --p stands for package

function p.CoordinateLAT( a )
	local lat = mw.text.split(a.args and (a.args[1] or a.args.lat) or a, '/')
	local D = tonumber(lat[1])
	assert( D, "Breitengrad: keine numerische Angabe")
	
	if #lat > 1 then
		local H = mw.text.trim(lat[4] or "")
		assert( H:match("^[NS]?$"),
			"Breitengrad: unbekannte Himmelsrichtung ›" .. H .. "‹" )
		local M = tonumber(lat[2])
		local S = tonumber(lat[3])
		assert( (D and not (D < 0) and math.fmod(D, 1) == 0) and
			    (M and not (M < 0)) and
			    (S and not (S < 0) and math.fmod(M, 1) == 0 or S == nil),
			"Breitengrad: DMS-Formatfehler" )
		assert( M < 60,
			"Breitengrad: Breitenminuten ≥ 60" )
		assert( S and S < 60 or S == nil,
			"Breitengrad: Breitensekunden ≥ 60" )
		D = (H == "S" and -1 or 1) * ( (S or 0)/(60*60) + M/60 + D )
	end
	
	D = D > 90 and 90 or (D < -90 and -90 or D)
	return D
end

function p.CoordinateLON( a )
	return p.CoordinateLONG( a )
end

function p.CoordinateLONG( a )
	local lon =	mw.text.split(a.args and (a.args[1] or a.args.lon
													or a.args.long) or a, '/')
	local D = tonumber(lon[1])
	assert( D, "Längengrad: keine numerische Angabe")
	
	if #lon > 1 then
		local H = mw.text.trim(lon[4] or "")
		assert( H:match("^[OEW]?$"),
			"Längengrad: unbekannte Himmelsrichtung ›" .. H .. "‹" )
		local M = tonumber(lon[2])
		local S = tonumber(lon[3])
		assert( (D and not (D < 0) and math.fmod(D, 1) == 0) and
			    (M and not (M < 0)) and
			    (S and not (S < 0) and math.fmod(M, 1) == 0 or S == nil),
			"Längengrad: DMS-Formatfehler" )
		assert( M < 60,
			"Längengrad: Längenminuten ≥ 60" )
		assert( S and S < 60 or S == nil,
			"Längengrad: Längensekunden ≥ 60" )
		D = (H == "W" and -1 or 1) * ( (S or 0)/(60*60) + M/60 + D )
	end
	
	D = math.fmod(D + 180, 360) - 180
	D = D + (D > -180 and 0 or 360)
	return D
end

return p