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