« Module:Carte » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
fusion avec Module:Données cartes, plus cohérent avec les autres langues
0x010D (discussion | contributions)
mAucun résumé des modifications
Ligne 6 : Ligne 6 :
local p = {}
local p = {}


local function loaddata(name)
local function loaddata(name)  
return require('Module:Carte/données' .. string.lower(name))
return require('Module:Carte/données/' .. string.lower(name))
end
end


Ligne 47 : Ligne 47 :
return
return
end
end
local mapdata = loaddata(map)
local success, mapdata = pcall(loaddata, map)
if not mapdata or not mapdata.images then
if not success or not mapdata.images then
addmaintenancecat('Page avec des données de géolocalisation non supportées')
addmaintenancecat('Page avec des données de géolocalisation non supportées')
return "carte non supportée: " .. map
end
end
local name = mapdata.name or '?'
local name = mapdata.name or '?'
Ligne 157 : Ligne 156 :
  local mapliststring = table.concat(maplist, '/')
  local mapliststring = table.concat(maplist, '/')
for i, j in pairs(maplist) do
for i, j in pairs(maplist) do
local success = pcall(loadata, j)
local success, data = pcall(loaddata, j)  
if not success then
if not success then
return mw.getCurrentFrame():expandTemplate{ title = 'Infobox/Géolocalisation multiple/transition', args = {['géolocalisation'] = mapliststring, type = maptype, latitude = latitude, longitude = longitude }}
return mw.getCurrentFrame():expandTemplate{ title = 'Infobox/Géolocalisation multiple/transition', args = {['géolocalisation'] = mapliststring, type = maptype, latitude = latitude, longitude = longitude }}

Version du 18 décembre 2014 à 20:00

local p = {} local pointmod = require('Module:Carte/Points') local linguistic = require('Module:Linguistique')


local p = {}

local function loaddata(name) return require('Module:Carte/données/' .. string.lower(name)) end

-- 'Projection conique avec DL' local function dllat(latitude, longitude, mapdata) -- conique avec DL local val = 100* (mapdata.y0 + ( mapdata.iheight/2 - mapdata.y0 ) * (1 - mapdata.t * (latitude - mapdata.centrallat) * (0.01745329252 + 0.00000177219231 * (latitude - mapdata.centrallat) ^2) )* ( 1- 0.00015230871 * (longitude-mapdata.centrallong) ^2 * mapdata.s^2) ) / mapdata.iheight

return val end local function dllong(latitude, longitude, mapdata) local val = 100 * ( ( (mapdata.x0 or (mapdata.iwidth/2)) + ( mapdata.iheight/2 - mapdata.y0 ) * ( 1 -mapdata.t * (latitude-mapdata.centrallat) * ( 0.01745329252 + 0.00000177219231 * (latitude-mapdata.centrallat) * (latitude-mapdata.centrallat) ) ) * (longitude-mapdata.centrallong) * mapdata.s * (0.01745329252 - 0.000000886096156 * (longitude-(mapdata.centrallong)) * (longitude-(mapdata.centrallong)) * mapdata.s^2 ) ) ) / mapdata.iwidth return val end


local function buildmap(map, maptype, width, latitude, longitude, pointtype, caption) -- fonction d'aige pour buildmap if map == '-' then return end local success, mapdata = pcall(loaddata, map) if not success or not mapdata.images then addmaintenancecat('Page avec des données de géolocalisation non supportées') end local name = mapdata.name or '?'

if (not pointtype) then pointtype = default end pointimage = pointmod[pointtype] if not pointimage then pointimage = pointmod.default end -- + message d'erreur ?

-- analyse linguistique pour le texte de la carte local datagender = mapdata.genre or local gender = string.sub(datagender, 1, 1) -- ms = masculin-singulier, fp = féminin pluriel etc. local number = string.sub(datagender, 2, 2) local determiner = mapdata.determiner local ofstring = linguistic.of(name, gender, number, determiner) -- restitue "de France" ou "du Japon"

local pointsize = tostring(8) local ypos, xpos if mapdata.x and mapdata.y then ypos, xpos = mapdata.y, mapdata.x

ypos = string.gsub(ypos, '$1', tostring(latitude)) ypos = string.gsub(ypos, '$2', tostring(longitude)) ypos = tonumber(mw.ext.ParserFunctions.expr(ypos)) xpos = string.gsub(xpos, '$1', tostring(latitude)) xpos = string.gsub(xpos, '$2', tostring(longitude)) xpos = tonumber(mw.ext.ParserFunctions.expr(xpos))

elseif mapdata.projection == 'Projection équirectangulaire' then ypos = 100 * (latitude - mapdata.top) / (mapdata.bottom - mapdata.top) xpos = 100 * (longitude - mapdata.left) / (mapdata.right - mapdata.left) elseif mapdata.projection == 'Projection conique avec DL' then ypos = dllat(latitude, longitude, mapdata) xpos = dllong(latitude, longitude, mapdata) else return "système cartographique non supporté" end if (ypos > 100) or (xpos) > 100 or (ypos < 0) or (xpos < 0) then return .. error(ypos .. ' ' .. xpos) end local htmlheight = tostring(ypos) .. '%' local htmlwidth = tostring(xpos) .. '%'

local pointdiv = mw.html.create('div') :css{position = 'absolute', border = 'none', top = htmlheight, left = htmlwidth} :tag('div') :css{position = 'absolute', top = '-4px', left = '-4px', ['line-height'] = '0', width = '8px'} :wikitext('Fichier:' .. pointimage .. '') :done() local mapname = mapdata.name local file if type(mapdata.images) == 'string' then file = mapdata.images else file = mapdata.images[maptype] or mapdata.images[1] or mapdata.images['default'] end local alt = 'voir sur la carte ' .. ofstring local map = mw.html.create('div') :css{['text-align'] = 'center'} :addClass("geobox") :wikitext('Géolocalisation sur la carte ' .. ofstring .. '') :tag('table') :addClass('DebutCarte') :attr({border="0", cellspacing="0", cellpadding="0"}) :css({margin = '0', border = 'none', padding = '0'}) :tag('tr') :tag('td') :tag('div') :css({position= 'relative', margin = "auto",}) :wikitext('' .. alt .. '' ) :node(pointdiv) :done() :done() :done() :done() return map end

function p.multimap(params) local maplist = params.maplist local width = params.width local latitude = params.latitude local longitude = params.longitude

-- les cartes s'affichent en ordre inversé, remettre bien local newlist = {} for i, j in pairs(maplist) do table.insert(newlist, 1, j) end maplist = newlist

-- traitement de la largeur if width and tonumber(width) then width = tonumber(width) else width = 280 end-- si pas un nombre, erreur ? local div = mw.html.create('div'):addClass('img_toogle')

if not pointimage then pointimage = 'Point carte.svg' end

--transition: appel aux Modèle:Géolocalisation/ n en l'absence de données dans le module

	local mapliststring = table.concat(maplist, '/')

for i, j in pairs(maplist) do local success, data = pcall(loaddata, j) if not success then return mw.getCurrentFrame():expandTemplate{ title = 'Infobox/Géolocalisation multiple/transition', args = {['géolocalisation'] = mapliststring, type = maptype, latitude = latitude, longitude = longitude }} .. end end for i, map in pairs(maplist) do local newmap = buildmap( map, maptype, width, latitude, longitude, pointimage, caption) div:node(newmap) end return div end

function p.datadoc(frame) -- pour documenter les pages Carte/données/ local pagename = frame:preprocess('Carte') local data = require('Module:Carte/données' .. mw.text.split(pagename , '/')[2]) local placename = data.name or -- ajouter ici un script vérifiant que toutes les champs requis sont fournis, et dans un format correct local cat = if not string.find(pagename, '/Documentation') then cat = end return "Cette page contient des données concernant les cartes de géolocalisation pour l'entité suivante : " .. placename .. '
Voir Module:Carte pour connaître leur usage.' .. cat end

function p.map(frame) local args = frame.args -- utilisation du franaçs args.maplist = mw.text.split( args.carte, '/', true) return p.multimap(args) end return p