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

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
pas "équidistant", "linéaire" en fait mais ça ne marche pas pour l'instant, remplace par l'utilisation des données "x" et "y" comme dans le module anglais
0x010D (discussion | contributions)
fusion avec Module:Données cartes, plus cohérent avec les autres langues
Ligne 1 : Ligne 1 :
local p = {}
local p = {}
local mapdatamod = require('Module:Données cartes')
local pointmod = require('Module:Carte/Points')
local pointmod = require('Module:Carte/Points')
local linguistic = require('Module:Linguistique')
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'   
-- 'Projection conique avec DL'   
Ligne 41 : Ligne 47 :
return
return
end
end
local mapdata = mapdatamod.main(map)
local mapdata = loaddata(map)
if not mapdata or not mapdata.images then
if not mapdata 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')
Ligne 151 : Ligne 157 :
  local mapliststring = table.concat(maplist, '/')
  local mapliststring = table.concat(maplist, '/')
for i, j in pairs(maplist) do
for i, j in pairs(maplist) do
if not require('Module:Données cartes').main(j) then  
local success = pcall(loadata, j)
return
if not success then
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 }}
.. '[[Catégorie:Page avec des données de géolocalisation non supportées]]'
.. '[[Catégorie:Page avec des données de géolocalisation non supportées]]'
end
end
Ligne 162 : Ligne 168 :
end
end
return div
return div
end
function p.datadoc(frame) -- pour documenter les pages Carte/données/
local pagename = frame:preprocess('{{PAGENAME}}')
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 = '[[Catégorie:Module de paramétrage de carte (liste complète)|' .. placename .. ']]'
end
return "Cette page contient des données concernant les cartes de géolocalisation pour l'entité suivante : " .. placename
.. '<br />Voir [[Module:Carte]] pour connaître leur usage.'
.. cat
end
end



Version du 18 décembre 2014 à 19:49

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 mapdata = loaddata(map) if not mapdata or not mapdata.images then addmaintenancecat('Page avec des données de géolocalisation non supportées') return "carte non supportée: " .. map 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 = pcall(loadata, 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