Modulo:Sandbox/M.casanova/DatiMappa: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
Annullata la modifica 87798665 di M.casanova (discussione)
Riga 36:
if (dx == 0) then scalax = 18 else scalax = math.floor(math.log(360/dx)/math.log(2)) end
if (dy == 0) then scalay = 18 else scalay = math.floor(math.log(180/dy)/math.log(2)) end
local scala
if ((dx == 0) and (dy == 0)) then
scala = 10 --valore default per singolo punto
else
scala = math.max(0,math.min(18,scalax, scalay)) --calcolo scala minima compresa tra 0 e 18
end
return scala
end
 
-- Calcola la scala adeguata per mappa OSM
-- esempio chiamata di funzione {{#invoke:Mappa OSM|scala|w|h|x1|y1|x2|y2|...}}
function p.scala2(frame)
local t = getArgs(frame)
local lat1, lat2, lon1, lon2 = 400, -400, 400, -400
local dimx = tonumber(t[1]) or 1 --larghezza
local dimy = tonumber(t[2]) or 1 --altezza
local vlr
for i,v in ipairs(t) do
if i>2 then
vlr = tonumber(t[i])
if (i % 2 == 0) then --calcolo latitudine minima e massima
if (lat1 > vlr) then lat1 = vlr end
if (lat2 < vlr) then lat2 = vlr end
else --calcolo longitudine minima e massima
if (lon1 > vlr) then lon1 = vlr end
if (lon2 < vlr) then lon2 = vlr end
end
end
end
 
-- problemi con latitudine oltre 85°
if ((lat2>85) or (lat1<-85)) then return 0 end
 
-- calcolo punti
plat1 = 128*(1+lat1/180)
plon1 = 128*(1-math.log(math.tan( math.pi/4 + math.pi*lon1/90)))
plat2 = 128*(1+lat2/180)
plon2 = 128*(1-math.log(math.tan( math.pi/4 + math.pi*lon2/90)))
 
-- per evitare punti troppo vicini al margine
local dy = 1.05*(plat2-plat1)
local dx = 1.05*(plon2-plon1)
if (dimx>dimy) then
if (dx<180) then dx = dx*dimy/dimx end
else
if (dy<90) then dy = dy*dimx/dimy end
end
-- calcolo scale per coordinate
local scalax, scalay
if (dx == 0) then scalax = 18 else scalax = math.floor(math.log(dimx/dx)/math.log(2)) end
if (dy == 0) then scalay = 18 else scalay = math.floor(math.log(dimy/dy)/math.log(2)) end
local scala
if ((dx == 0) and (dy == 0)) then