<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wikiromandie.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ACarte</id>
	<title>Module:Carte - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wikiromandie.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ACarte"/>
	<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Module:Carte&amp;action=history"/>
	<updated>2026-04-09T10:35:29Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Module:Carte&amp;diff=15390&amp;oldid=prev</id>
		<title>Stefannein : 1 version importée</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Module:Carte&amp;diff=15390&amp;oldid=prev"/>
		<updated>2025-08-20T16:57:50Z</updated>

		<summary type="html">&lt;p&gt;1 version importée&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 20 août 2025 à 18:57&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mariadb:diff:1.41:old-15389:rev-15390 --&gt;
&lt;/table&gt;</summary>
		<author><name>Stefannein</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Module:Carte&amp;diff=15389&amp;oldid=prev</id>
		<title>wikipedia&gt;GrandEscogriffe : retour de fonction effacée par inadvertance</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Module:Carte&amp;diff=15389&amp;oldid=prev"/>
		<updated>2025-07-25T03:24:34Z</updated>

		<summary type="html">&lt;p&gt;retour de fonction effacée par inadvertance&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local pointmod = require(&amp;#039;Module:Carte/Points&amp;#039;)&lt;br /&gt;
local linguistic = require(&amp;#039;Module:Linguistique&amp;#039;)&lt;br /&gt;
local maintenance = &amp;#039;&amp;#039;&lt;br /&gt;
local coord  = require(&amp;#039;Module:Coordinates&amp;#039;)&lt;br /&gt;
local wd = require(&amp;#039;Module:Wikidata&amp;#039;)&lt;br /&gt;
local function loaddata(name) &lt;br /&gt;
	return require(&amp;#039;Module:Carte/données/&amp;#039; .. mw.ustring.lower(name))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local maxwidth = 325 --largeur max en pixels de la classe infobox_v3 sur MediaWiki:Gadget-Mobile.css et MediaWiki:Common.css&lt;br /&gt;
local defaultmargin = 10&lt;br /&gt;
&lt;br /&gt;
local divstyle = {&lt;br /&gt;
	[&amp;#039;clear&amp;#039;] = &amp;#039;both&amp;#039;,&lt;br /&gt;
	[&amp;#039;text-align&amp;#039;] = &amp;#039;center&amp;#039;,&lt;br /&gt;
	[&amp;#039;font-size&amp;#039;] = &amp;#039;0.9em&amp;#039;,&lt;br /&gt;
	[&amp;#039;line-height&amp;#039;] = &amp;#039;1.4em&amp;#039;,&lt;br /&gt;
	[&amp;#039;word-wrap&amp;#039;] = &amp;#039;break-word&amp;#039;,&lt;br /&gt;
	[&amp;#039;max-width&amp;#039;] = maxwidth .. &amp;#039;px&amp;#039;,&lt;br /&gt;
	[&amp;#039;height&amp;#039;] = &amp;#039;auto&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function addmaintenancecat(cat, sortkey) -- ajoute du texte à la string maintenance en cas de problème&lt;br /&gt;
	if mw.title.getCurrentTitle().namespace ~= 0 then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	maintenance = maintenance .. &amp;#039;[[Category:&amp;#039; .. cat .. &amp;#039;]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--longitude équirectangulaire&lt;br /&gt;
local function equirecLong(longitude, mapdata)&lt;br /&gt;
	local left, right = mapdata.left, mapdata.right&lt;br /&gt;
	if right &amp;lt; left then -- si la carte passe le méridien 180&lt;br /&gt;
		right = 360 + right&lt;br /&gt;
		if longitude &amp;lt; 0 then longitude = (360 + longitude) end&lt;br /&gt;
	end&lt;br /&gt;
	return  (longitude - left) / (right - left) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function equirecLat(latitude, mapdata)&lt;br /&gt;
	return (latitude - mapdata.top) / (mapdata.bottom - mapdata.top) 	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- &amp;#039;Projection conique avec DL&amp;#039;  &lt;br /&gt;
local function dllat(latitude, longitude, mapdata) -- conique avec DL&lt;br /&gt;
	local val = &lt;br /&gt;
	 	(mapdata.y0 +&lt;br /&gt;
	 		( mapdata.iheight/2 - mapdata.y0 ) *&lt;br /&gt;
	 		(1 - mapdata.t *&lt;br /&gt;
	 			(latitude - mapdata.centrallat) *&lt;br /&gt;
	 			(0.01745329252 + 0.00000177219231 * (latitude - mapdata.centrallat) ^2)&lt;br /&gt;
	 		)*&lt;br /&gt;
	 		( 1- 0.00015230871 * (longitude-mapdata.centrallong) ^2 * mapdata.s^2)&lt;br /&gt;
	 	) / mapdata.iheight&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
local function dllong(latitude, longitude, mapdata)&lt;br /&gt;
	local val = &lt;br /&gt;
		( (mapdata.x0 or (mapdata.iwidth/2)) + &lt;br /&gt;
			( mapdata.iheight/2 - mapdata.y0 ) *&lt;br /&gt;
			( 1 -mapdata.t * &lt;br /&gt;
				(latitude-mapdata.centrallat) *&lt;br /&gt;
				( 0.01745329252 + 0.00000177219231 * (latitude-mapdata.centrallat) * (latitude-mapdata.centrallat) )&lt;br /&gt;
			) * &lt;br /&gt;
		(longitude-mapdata.centrallong) * mapdata.s *&lt;br /&gt;
		(0.01745329252 - 0.000000886096156 * (longitude-(mapdata.centrallong)) * (longitude-(mapdata.centrallong))&lt;br /&gt;
			* mapdata.s^2&lt;br /&gt;
		)&lt;br /&gt;
	) / mapdata.iwidth&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------&lt;br /&gt;
local function numericcoord(val) -- met en format numériques les coordonnées qui sont parfois sous la forme degré/min/sec&lt;br /&gt;
	return tonumber(val) or tonumber(coord.dms2dec({args={val}}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function pointposition(latitude, longitude, mapdata)&lt;br /&gt;
	if not (latitude and longitude) then&lt;br /&gt;
		return nil --?&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if longitude &amp;gt; 180 then -- les caprices des coordonnées extraterrestres&lt;br /&gt;
		longitude = -360 + longitude&lt;br /&gt;
	elseif longitude &amp;lt; -180 then&lt;br /&gt;
		longitude = 360 - longitude&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	local ypos, xpos&lt;br /&gt;
	if mapdata.x and mapdata.y then -- pour les cartes complexes : calcul de la position à partir de formules en Wikicode dans les clés &amp;quot;x&amp;quot; et &amp;quot;y&amp;quot;&lt;br /&gt;
		xpos = mapdata.x(latitude, longitude) / 100&lt;br /&gt;
		ypos = mapdata.y(latitude, longitude) / 100&lt;br /&gt;
&lt;br /&gt;
	elseif mapdata.projection ==  &amp;#039;Projection équirectangulaire&amp;#039; then&lt;br /&gt;
		ypos = equirecLat(latitude, mapdata)&lt;br /&gt;
		xpos =  equirecLong(longitude, mapdata)&lt;br /&gt;
	elseif mapdata.projection == &amp;#039;Projection conique avec DL&amp;#039; then&lt;br /&gt;
		ypos = dllat(latitude, longitude, mapdata)&lt;br /&gt;
		xpos = dllong(latitude, longitude, mapdata)&lt;br /&gt;
	end&lt;br /&gt;
	return ypos, xpos&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function placepoint(mapdata, point) -- fonction d&amp;#039;aide pour buildmap. point est une table contenant latitude, longitude, type de point...&lt;br /&gt;
&lt;br /&gt;
	local ypos, xpos = pointposition(point.latitude, point.longitude, mapdata)&lt;br /&gt;
&lt;br /&gt;
	if (not xpos) or (not ypos) then&lt;br /&gt;
		return &amp;quot;données de géolocalisation invalides&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (ypos &amp;gt; 1.1) or (xpos) &amp;gt; 1.1 or (ypos &amp;lt; -0.1) or (xpos &amp;lt; -0.1) then &lt;br /&gt;
		return &amp;#039;[[Category:Article avec une géolocalisation hors-carte]]&amp;#039; .. &amp;#039;les coordonnées indiquées sont hors de la carte de géolocalisation demandée&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local pointsize = tostring(point.pointsize or &amp;#039;8&amp;#039;)&lt;br /&gt;
	local pointtext = point.text or &amp;#039;&amp;#039;&lt;br /&gt;
	local pointtype = point.pointtype or &amp;#039;default&amp;#039;&lt;br /&gt;
	local pointimage = pointmod[pointtype]&lt;br /&gt;
	if not pointimage then&lt;br /&gt;
		pointimage = pointmod.default&lt;br /&gt;
		addmaintenancecat(&amp;#039;Page avec un modèle de point de carte non pris en charge&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local htmlheight = tostring(ypos * 100) .. &amp;#039;%&amp;#039;&lt;br /&gt;
	local htmlwidth = tostring(xpos * 100) .. &amp;#039;%&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	local pointdiv = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:css{position = &amp;#039;absolute&amp;#039;, border = &amp;#039;none&amp;#039;, top = htmlheight, left = htmlwidth}&lt;br /&gt;
		:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:css{position = &amp;#039;absolute&amp;#039;, top = &amp;#039;-4px&amp;#039;, left = &amp;#039;-4px&amp;#039;, [&amp;#039;line-height&amp;#039;] = &amp;#039;0&amp;#039;, width = &amp;#039;8px&amp;#039;}&lt;br /&gt;
			:wikitext(&amp;#039;[[Fichier:&amp;#039; .. pointimage .. &amp;#039;|&amp;#039; .. pointsize .. &amp;#039;px|class=noviewer]]&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;span&amp;#039;) &lt;br /&gt;
			:css{position = &amp;#039;absolute&amp;#039;, [&amp;#039;text-align&amp;#039;] = &amp;#039;left&amp;#039;, width = &amp;#039;150px&amp;#039;}&lt;br /&gt;
			:wikitext(pointtext)&lt;br /&gt;
			:done()&lt;br /&gt;
		:allDone()&lt;br /&gt;
			&lt;br /&gt;
	return pointdiv&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function buildmap(file, caption, alt, width, mapdata, pointtable, defaultpoint)&lt;br /&gt;
	divstyle.width = width&lt;br /&gt;
	local margin = (maxwidth - width)/2&lt;br /&gt;
	divstyle[&amp;#039;margin&amp;#039;] = &amp;#039;0 &amp;#039; .. margin .. &amp;#039;px 5px &amp;#039; .. margin .. &amp;#039;px&amp;#039;&lt;br /&gt;
	local map = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:css(divstyle)&lt;br /&gt;
		:addClass(&amp;quot;geobox&amp;quot;)&lt;br /&gt;
		:wikitext(caption)&lt;br /&gt;
		:tag(&amp;#039;table&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;DebutCarte&amp;#039;)&lt;br /&gt;
			:attr({border=&amp;quot;0&amp;quot;, cellspacing=&amp;quot;0&amp;quot;, cellpadding=&amp;quot;0&amp;quot;})&lt;br /&gt;
			:css({margin = &amp;#039;0&amp;#039;, border = &amp;#039;none&amp;#039;, padding = &amp;#039;0&amp;#039;, width = &amp;#039;auto&amp;#039;})&lt;br /&gt;
				:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
					:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
						:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
							:css({position= &amp;#039;relative&amp;#039;, margin = &amp;quot;auto&amp;quot;, [&amp;#039;text-align&amp;#039;] = &amp;#039;left&amp;#039; })&lt;br /&gt;
							:wikitext(&amp;#039;[[File:&amp;#039; .. file .. &amp;#039;|frameless|&amp;#039; .. width .. &amp;#039;px&amp;#039; .. &amp;#039;|&amp;#039; .. alt .. &amp;#039;|class=noviewer]]&amp;#039; )&lt;br /&gt;
	for i, j in pairs(pointtable or{}) do -- pour chque point à placer, do&lt;br /&gt;
		if not j.pointtype then&lt;br /&gt;
			j.pointtype = defaultpoint&lt;br /&gt;
		end&lt;br /&gt;
		map:node(placepoint(mapdata,j))&lt;br /&gt;
	end&lt;br /&gt;
	return map:done():done():done():done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function maxpoints(points)&lt;br /&gt;
	if not points then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local minlat, maxlat, minlong, maxlong = points[1].latitude, points[1].latitude, points[1].longitude, points[1].longitude&lt;br /&gt;
	for i, point in ipairs(points) do&lt;br /&gt;
		minlat = math.min(point.latitude, minlat)&lt;br /&gt;
		maxlat = math.max(point.latitude, maxlat)&lt;br /&gt;
		minlong = math.min(point.longitude, minlong)&lt;br /&gt;
		maxlong = math.max(point.longitude, maxlong)&lt;br /&gt;
	end&lt;br /&gt;
	return minlat, maxlat, minlong, maxlong&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
local function guesszoom(ids)&lt;br /&gt;
	if (not ids) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local item = ids[1]&lt;br /&gt;
	local area = wd.formatStatements{entity = item, property = &amp;quot;P2046&amp;quot;, targetunit = &amp;quot;square kilometer&amp;quot;, displayformat = &amp;quot;raw&amp;quot;}&lt;br /&gt;
	if (not area) or not(tonumber(area)) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	area = tonumber(area)&lt;br /&gt;
	if area &amp;gt; 100000 then&lt;br /&gt;
		return 3&lt;br /&gt;
	end&lt;br /&gt;
	if area &amp;gt; 10000 then&lt;br /&gt;
		return 4&lt;br /&gt;
	end&lt;br /&gt;
	if area &amp;gt; 1000 then&lt;br /&gt;
		return 5&lt;br /&gt;
	end&lt;br /&gt;
	if area &amp;gt; 100 then&lt;br /&gt;
		return 6&lt;br /&gt;
	end&lt;br /&gt;
	return 7&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function guesszoom2(minlat, maxlat, minlong, maxlong)&lt;br /&gt;
	if not (minlat and maxlat and minlong and maxlong) or ((minlat == maxlat) and (minlong == maxlong) ) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local x = coord._distance({latitude = (maxlat + minlat / 2), longitude = minlong}, {latitude = (maxlat + minlat / 2), longitude =  maxlong })&lt;br /&gt;
	local y = coord._distance({latitude = 0, longitude = minlong}, {latitude = 0, longitude = maxlong})&lt;br /&gt;
	local dist = math.max(x, y) -- à ajuster si la carte n&amp;#039;est pas carrée&lt;br /&gt;
	if (dist &amp;gt; 512) then&lt;br /&gt;
		return 4&lt;br /&gt;
	elseif (dist &amp;gt; 256) then&lt;br /&gt;
		return 5		&lt;br /&gt;
	elseif (dist &amp;gt; 128) then&lt;br /&gt;
		return 6&lt;br /&gt;
	elseif (dist&amp;gt; 64) then&lt;br /&gt;
		return 7&lt;br /&gt;
	elseif (dist &amp;gt; 32) then&lt;br /&gt;
		return 8&lt;br /&gt;
	elseif (dist &amp;gt; 16) then&lt;br /&gt;
		return 9&lt;br /&gt;
	elseif (dist &amp;gt; 8) then&lt;br /&gt;
		return 10&lt;br /&gt;
	elseif (dist &amp;gt; 4) then&lt;br /&gt;
		return 11&lt;br /&gt;
	elseif (dist &amp;gt; 2) then&lt;br /&gt;
		return 12&lt;br /&gt;
	end&lt;br /&gt;
	return 13&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function buildInteractiveMap(width, pointtable, default_zoom, ids, shapecolor)&lt;br /&gt;
	-- On fait un hack pour générer une valeur par défaut pour la latitude et la longitude&lt;br /&gt;
	local geojson = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	shapecolor = shapecolor or &amp;#039;#800000&amp;#039;&lt;br /&gt;
	for i, point in pairs(pointtable or{}) do -- pour chque point à placer, do&lt;br /&gt;
		table.insert(geojson, {&lt;br /&gt;
			[&amp;#039;type&amp;#039;] = &amp;#039;Feature&amp;#039;,&lt;br /&gt;
			[&amp;#039;geometry&amp;#039;] = {&lt;br /&gt;
				[&amp;#039;type&amp;#039;] = &amp;quot;Point&amp;quot;,&lt;br /&gt;
				[&amp;#039;coordinates&amp;#039;] = { point.longitude, point.latitude }&lt;br /&gt;
			},&lt;br /&gt;
			[&amp;#039;properties&amp;#039;] = {&lt;br /&gt;
				[&amp;#039;title&amp;#039;] = point.text or &amp;#039;&amp;#039;,&lt;br /&gt;
				[&amp;#039;marker-symbol&amp;#039;] = point.marker,&lt;br /&gt;
				[&amp;#039;marker-color&amp;#039;] =  point.markercolor or &amp;quot;#224422&amp;quot;,&lt;br /&gt;
			}&lt;br /&gt;
    	})&lt;br /&gt;
&lt;br /&gt;
	if ids then&lt;br /&gt;
		local geojson2 = {&lt;br /&gt;
		[&amp;#039;type&amp;#039;] = &amp;#039;ExternalData&amp;#039;,&lt;br /&gt;
    		[&amp;#039;service&amp;#039;] = &amp;#039;geoshape&amp;#039;,&lt;br /&gt;
  		[&amp;#039;ids&amp;#039;] = ids,&lt;br /&gt;
  		properties = {&lt;br /&gt;
  		  	[&amp;#039;fill&amp;#039;] = shapecolor or &amp;#039;#800000&amp;#039;,&lt;br /&gt;
  		},&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(geojson, geojson2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local minlat, maxlat, minlong, maxlong = maxpoints(pointtable)&lt;br /&gt;
	local center_lat = (maxlat + minlat) / 2&lt;br /&gt;
	local center_long = (maxlong + minlong) / 2&lt;br /&gt;
	-- 180e méridien&lt;br /&gt;
	if (maxlong - minlong) &amp;gt; 180 then&lt;br /&gt;
		centerlong = centerlong - 180&lt;br /&gt;
	end&lt;br /&gt;
	local args = {&lt;br /&gt;
    		[&amp;#039;height&amp;#039;] = width,&lt;br /&gt;
    		[&amp;#039;width&amp;#039;] = width,&lt;br /&gt;
    		[&amp;#039;frameless&amp;#039;] = &amp;#039;frameless&amp;#039;,&lt;br /&gt;
    		[&amp;#039;align&amp;#039;] = &amp;#039;center&amp;#039;,&lt;br /&gt;
    		[&amp;#039;latitude&amp;#039;] = center_lat,&lt;br /&gt;
    		[&amp;#039;longitude&amp;#039;] = center_long,&lt;br /&gt;
    		[&amp;#039;zoom&amp;#039;] = default_zoom or guesszoom(ids) or guesszoom2(minlat, maxlat, minlong, maxlong) or 13&lt;br /&gt;
    	}&lt;br /&gt;
	return mw.getCurrentFrame():extensionTag(&amp;#039;mapframe&amp;#039;, mw.text.jsonEncode(geojson), args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function builddynamicmap(map, maptype, width, pointtable, caption, defaultpoint, globe, default_zoom, ids, shapecolor) -- fonction d&amp;#039;aide pour multimap&lt;br /&gt;
	if map == &amp;#039;-&amp;#039; then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	if map == &amp;#039;interactive&amp;#039; then&lt;br /&gt;
		if (globe and (globe ~= &amp;#039;earth&amp;#039;)) then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		return buildInteractiveMap(width, pointtable, default_zoom, ids, shapecolor)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local success, mapdata = pcall(loaddata, map)&lt;br /&gt;
	if not success or not mapdata.images then&lt;br /&gt;
		addmaintenancecat(&amp;#039;Page avec des données de géolocalisation non prises en charge&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local name = mapdata.name or &amp;#039;?&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- analyse linguistique pour le texte de la carte&lt;br /&gt;
	local datagender = mapdata.genre or &amp;#039;&amp;#039;&lt;br /&gt;
	local gender = string.sub(datagender, 1, 1) -- ms = masculin-singulier, fp = féminin pluriel etc.&lt;br /&gt;
	local number = string.sub(datagender, 2, 2)&lt;br /&gt;
	local determiner = mapdata.determiner&lt;br /&gt;
	local ofstring = linguistic.of(name, gender, number, determiner) -- restitue &amp;quot;de France&amp;quot; ou &amp;quot;du Japon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local mapname = mapdata.name&lt;br /&gt;
	local file = mapdata.images[maptype] or mapdata.images[&amp;#039;default&amp;#039;]  or mapdata.images[1]&lt;br /&gt;
	if not file then&lt;br /&gt;
		 file = mapdata.images[&amp;#039;default&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
	local alt = &amp;#039;voir sur la carte &amp;#039; .. ofstring&lt;br /&gt;
	local caption = &amp;#039;Localisation sur la carte &amp;#039; .. ofstring&lt;br /&gt;
	return buildmap(file, caption, alt, width, mapdata, pointtable, defaultpoint)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function guessmaps(params)&lt;br /&gt;
	-- cas non terriens&lt;br /&gt;
	local globe = params.globe&lt;br /&gt;
	if globe and (globe ~= &amp;#039;earth&amp;#039;) then&lt;br /&gt;
		local maps = {&lt;br /&gt;
			moon = &amp;#039;Lune&amp;#039;,&lt;br /&gt;
			mars = &amp;#039;Mars&amp;#039;,&lt;br /&gt;
			mercury = &amp;#039;Mercure&amp;#039;,&lt;br /&gt;
			neptune = &amp;#039;Neptune&amp;#039;,&lt;br /&gt;
			venus = &amp;#039;Vénus&amp;#039;,&lt;br /&gt;
			callisto = &amp;#039;Callisto&amp;#039;,&lt;br /&gt;
			ceres = &amp;#039;Cérès&amp;#039;,&lt;br /&gt;
			charon = &amp;#039;Charon&amp;#039;,&lt;br /&gt;
			enceladus = &amp;#039;Encelade&amp;#039;,&lt;br /&gt;
			europa = &amp;#039;Europe&amp;#039;,&lt;br /&gt;
			io = &amp;#039;Io&amp;#039;,&lt;br /&gt;
			iapetus = &amp;#039;Japet&amp;#039;,&lt;br /&gt;
			ganymede = &amp;#039;Ganymède&amp;#039;,&lt;br /&gt;
			pluto = &amp;#039;Pluton&amp;#039;,&lt;br /&gt;
			tethys = &amp;#039;Téthys&amp;#039;,&lt;br /&gt;
			titan = &amp;#039;Titan&amp;#039;,&lt;br /&gt;
			triton = &amp;#039;Triton&amp;#039;,&lt;br /&gt;
			vesta = &amp;#039;Vesta&amp;#039;,&lt;br /&gt;
		}&lt;br /&gt;
		return maps[mw.ustring.lower(globe)]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- autres cas&lt;br /&gt;
&lt;br /&gt;
	local data = require(&amp;#039;Module:Carte/données&amp;#039;)&lt;br /&gt;
	local validmaps = {}&lt;br /&gt;
	local lat = tonumber(params.latitude) or tonumber(coord.dms2dec({args={params.latitude}}))&lt;br /&gt;
	local long = tonumber(params.longitude) or tonumber(coord.dms2dec({args={params.longitude}}))&lt;br /&gt;
	if not lat or not long then return nil end&lt;br /&gt;
	for i, map in pairs(data) do&lt;br /&gt;
		if lat &amp;lt; map.top and lat &amp;gt; map.bottom then&lt;br /&gt;
			if map.left &amp;gt; map.right  then -- correction pour les cartes passant le méridien 180&lt;br /&gt;
				if long &amp;lt; 0 then&lt;br /&gt;
					map.left = map.left - 360&lt;br /&gt;
				else&lt;br /&gt;
					map.right = 360 + map.right&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if (long &amp;gt; map.left and long &amp;lt; map.right) then&lt;br /&gt;
				table.insert(validmaps, map)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #validmaps == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function area(map) -- fonction simple juste pour pouvoir classer apprximativement les cartes pas superficie&lt;br /&gt;
		return (math.abs(map.top - map.bottom)) * (math.abs(map.left- map.right)) &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.sort(validmaps, function(a, b) return area(a) &amp;lt; area(b) end)&lt;br /&gt;
&lt;br /&gt;
	local chosenmaps = {} -- on ne les gardes pas toutes, ça serait souvent trop&lt;br /&gt;
&lt;br /&gt;
	local havezone = {} -- paramètre &amp;quot;zone&amp;quot; des carte déjà obtenu, pour ne pas avoir le même deux fois: { zone = {nom de la carte, position de la carte} }&lt;br /&gt;
&lt;br /&gt;
	local forbiddenzones = { -- zone peu utiles, à ne pas utiliser par défaut&lt;br /&gt;
		[&amp;#039;future région française&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;france&amp;#039;] = true, -- utilisé pour des zone non administratives, généalement pas pratique&lt;br /&gt;
		[&amp;#039;italie&amp;#039;] = true,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local function addmap(map, pos) -- ajoute la carte à la liste et enregistre qu&amp;#039;elle a une carte avec ce paramètre &amp;quot;zone&amp;quot;&lt;br /&gt;
		if pos then&lt;br /&gt;
			chosenmaps[pos] = map.name&lt;br /&gt;
			havezone[map.zone] = {map, pos} &lt;br /&gt;
		else&lt;br /&gt;
			table.insert(chosenmaps, map.name)&lt;br /&gt;
			if map.zone then&lt;br /&gt;
				havezone[map.zone] = {map, #chosenmaps} &lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function centrality(map)&lt;br /&gt;
		-- retourne un indice ah hoc de centralité, plus faible si le point est près d&amp;#039;un bord&lt;br /&gt;
		local function compute(point, end1, end2)&lt;br /&gt;
			local pct = (point - end1) / (end2- end1)&lt;br /&gt;
			return 0.5 - math.abs(0.5 - pct)&lt;br /&gt;
		end&lt;br /&gt;
		local latcentrality = compute(lat, map.top, map.bottom)&lt;br /&gt;
		local longcentrality = compute(long, map.left, map.right)&lt;br /&gt;
		return math.min(latcentrality, longcentrality)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i, map in pairs(validmaps) do&lt;br /&gt;
		if not(havezone[map.zone]) and  (not forbiddenzones[map.zone]) and #chosenmaps &amp;lt; 3 then&lt;br /&gt;
			addmap(map)&lt;br /&gt;
		end&lt;br /&gt;
		if map.zone and havezone[map.zone] and (centrality(map) &amp;gt; centrality(havezone[map.zone][1] ))  then -- si deux cartes ont le même paramètre &amp;quot;zone&amp;quot;, on prend la mieux centrée&lt;br /&gt;
			addmap(map, havezone[map.zone][2])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	addmaintenancecat(&amp;#039;Carte de localisation ajoutée par Module:Carte&amp;#039;)&lt;br /&gt;
	return chosenmaps&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.multimap(params)&lt;br /&gt;
	local maplist = params.maplist&lt;br /&gt;
	local globe = params.globe&lt;br /&gt;
	if not maplist and params.guessmaps ~= &amp;#039;-&amp;#039; then -- guessmaps pourrait prendre d&amp;#039;autres paramètres (échelle, etc.)&lt;br /&gt;
		maplist = guessmaps(params)&lt;br /&gt;
	end&lt;br /&gt;
	if type(maplist) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		if maplist == &amp;#039;non&amp;#039; or maplist == &amp;#039;pas pertinent&amp;#039; or maplist == &amp;#039;non&amp;#039; then&lt;br /&gt;
			return&lt;br /&gt;
		elseif maplist == &amp;#039;interactive&amp;#039; and globe and globe ~= &amp;#039;earth&amp;#039; then&lt;br /&gt;
			maplist = guessmaps(params)&lt;br /&gt;
		end&lt;br /&gt;
		maplist = mw.text.split(maplist, &amp;#039;/&amp;#039;, true)&lt;br /&gt;
	end&lt;br /&gt;
	local staticmaps = params.staticmaps&lt;br /&gt;
	if type(staticmaps == &amp;#039;string&amp;#039;) then&lt;br /&gt;
		staticmaps = {staticmaps}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (not maplist)  and (not staticmaps) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local maptype = params.maptype -- à retravailler pour quand on veut la même région, mais avec plusieurs types de carte&lt;br /&gt;
	local width = params.width&lt;br /&gt;
	local pointtable = params.pointtable&lt;br /&gt;
	local caption = params.caption&lt;br /&gt;
	local defaultpoint = params.pointtype&lt;br /&gt;
	local default_zoom = params.default_zoom&lt;br /&gt;
	local ids = params.ids -- wikidata ids&lt;br /&gt;
	if not pointtable then -- pointtable est la liste des points à placer, mais lorsqu&amp;#039;il n&amp;#039;y a qu&amp;#039;un seul, on peut simplement avoir latitude et longitude&lt;br /&gt;
		pointtable = {{latitude = params.latitude, longitude = params.longitude, marker = params.marker, markercolor = params.markercolor}}&lt;br /&gt;
	end&lt;br /&gt;
	for i=#pointtable, 1, -1 do&lt;br /&gt;
		local point = pointtable[i]&lt;br /&gt;
		point.latitude =  numericcoord(point.latitude)&lt;br /&gt;
		point.longitude =  numericcoord(point.longitude)&lt;br /&gt;
		if not ( point.latitude and point.longitude ) then&lt;br /&gt;
			table.remove( pointtable, i )&lt;br /&gt;
		end&lt;br /&gt;
		point.markercolor = point.markercolor or params.markercolor&lt;br /&gt;
		point.marker = point.marker or params.marker&lt;br /&gt;
	end&lt;br /&gt;
	if #pointtable == 0 then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	-- traitement de la largeur&lt;br /&gt;
	if width and tonumber(width) then&lt;br /&gt;
		width = tonumber(width)&lt;br /&gt;
	else&lt;br /&gt;
		width = maxwidth - 2*defaultmargin&lt;br /&gt;
	end-- si pas un nombre, erreur ?&lt;br /&gt;
	local div =  mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;img_toggle&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
 	--transition: appel aux [[Modèle:Géolocalisation/]] n en l&amp;#039;absence de données dans le module&lt;br /&gt;
	for i, j in ipairs(maplist or {}) do&lt;br /&gt;
		if j == &amp;#039;&amp;#039; then break end&lt;br /&gt;
		if j ~= &amp;#039;interactive&amp;#039; then&lt;br /&gt;
			local success, data = pcall(loaddata, j) &lt;br /&gt;
			if not success then&lt;br /&gt;
		 		local mapliststring = table.concat(maplist, &amp;#039;/&amp;#039;)&lt;br /&gt;
				return mw.getCurrentFrame():expandTemplate{title = &amp;#039;Infobox/Géolocalisation multiple/transition&amp;#039;, args = {[&amp;#039;géolocalisation&amp;#039;] = mapliststring, type = maptype, latitude = params.latitude or pointtable[1].latitude, longitude = params.longitude or pointtable[1].longitude}} &lt;br /&gt;
					.. &amp;#039;[[Catégorie:Page avec des données de géolocalisation non prises en charge]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i = #maplist, 1, -1 do&lt;br /&gt;
		if maplist[i] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local newmap = builddynamicmap( maplist[i], maptype, width, pointtable, caption, defaultpoint, globe, default_zoom, ids, params.shapecolor)&lt;br /&gt;
			div:node(newmap)&lt;br /&gt;
			div:tag(&amp;#039;span&amp;#039;):wikitext(maintenance)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i, file in pairs(staticmaps or {}) do&lt;br /&gt;
		if j == &amp;#039;&amp;#039; then break end&lt;br /&gt;
		local caption = &amp;quot;Carte de localisation&amp;quot;&lt;br /&gt;
		local alt = &amp;quot;Voir la carte détaillée&amp;quot;&lt;br /&gt;
		local newmap = buildmap( file, caption, alt, width)&lt;br /&gt;
		div:node(newmap)&lt;br /&gt;
		div:tag(&amp;#039;span&amp;#039;):wikitext(maintenance)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(div)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.map(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	-- utilisation du franaçs&lt;br /&gt;
	args.maplist =  mw.text.split( args.carte, &amp;#039;/&amp;#039;, true)&lt;br /&gt;
	return p.multimap(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wikipedia&gt;GrandEscogriffe</name></author>
	</entry>
</feed>