Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Module:Carte interactive — Wikipédia
Module:Carte interactive — Wikipédia 👆 Click Here! Read More..
Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.

 Documentation[créer] [purger]
MIT

Ce module ne possède aucune documentation explicative en sous-page, pas même une description succincte.
Vous pouvez créer cette sous-page afin de documenter ce module adéquatement.

La documentation de ce module est générée par le modèle {{Documentation module}}.
Les éditeurs peuvent travailler dans le bac à sable (modifier).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.

    • Projet Scribunto Projet Scribunto
local p = {}
local coord = require( "Module:Coordinates" )

local function normalise(args)
	local lookup_table = {
		['largeur'] = 'width',
		['hauteur'] = 'height',
		['texte'] = 'text',
		['legende'] = 'text',
		['légende'] = 'text',
		['déscription'] = 'description',
		['titre'] = 'title',
		['sans_cadre'] = 'frameless',
		['symbole'] = 'symbol',
		['couleur'] = 'color',
		['taille'] = 'size',
		['epaisseur'] = 'size',
		['épaisseur'] = 'size',
		['opacite'] = 'opacity',
		['opacité'] = 'opacity',
		['epaisseur contour'] = 'outline_size',
		['épaisseur contour'] = 'outline_size',
		['couleur contour'] = 'outline_color',
		['opacite contour'] = 'opacity',
		['opacité contour'] = 'opacity',
		['couleur fond'] = 'fill_color',
		['opacite fond'] = 'fill_opacity',
		['opacité fond'] = 'fill_opacity',
		['geoline'] = 'contour',
		['requête'] = 'query',
		['requete'] = 'query',
		['request'] = 'query',
		['langue'] = 'lang',
	}
	
	for k, v in pairs(lookup_table) do
		if args[k] ~= nil then
			args[v] = args[k]
		end
	end
	
	return args
end

local function decodeJsonList(value)
	--[[ Plusieurs modèles, dont {{Carte interactive/Marqueur}}, ajoutent des
	virgules à la fin des représentations JSON des objets. Cela fonctionne avec
	le parsing JSON relaxé de HHVM, mais pas PHP7. Ce bug est détaillé ici:
		https://phabricator.wikimedia.org/T214984
	Cette fonction retire donc les virgules finales et initiales, avant
	d'appeler mw.text.jsonDecode sur la liste.
	]]
	local trimmedValue = mw.text.trim(value, ',')
	return mw.text.jsonDecode('[' .. trimmedValue .. ']')
end

function p.marker(frame)
	local args = normalise(frame:getParent().args)
	
	if args[1] == nil and args.latlng == nil then --One coordinate is mandatory
		return
	end
	
	local properties = {
		['marker-color'] = args.color == nil and '#555555' or args.color,
		['marker-size'] = args.size == nil and 'medium' or args.size,
		['marker-symbol'] = args.symbol == nil and '' or args.symbol,
		['title'] = args.title == nil and '' or args.title,
		['description'] = args.description == nil and '' or args.description,
	}
	
	local latlng = mw.text.split( (args[1] == nil and args.latlng or args[1]), ",", true )
	
	if args.randomise ~= nil then
		latlng[1] = latlng[1] + math.random(-tonumber(args.randomise), tonumber(args.randomise))/100000
		latlng[2] = latlng[2] + math.random(-tonumber(args.randomise), tonumber(args.randomise))/100000
	end
	
	local geojson = {
            type = "Feature",
            properties = properties,
            geometry = {
                type = "Point",
                coordinates = {
                	tonumber(latlng[2]), 
                	tonumber(latlng[1]),
                }
            }
        }
    return mw.text.jsonEncode(geojson) .. ','
end

function p.line(frame)
	local args = normalise(frame:getParent().args)
	
	if args[2] == nil then --At least two coordinates are mandatory
		return
	end
	
	local properties = {
		["stroke"] = args.color == nil and '#555555' or args.color,
		["stroke-width"] = args.size == nil and 2 or tonumber(args.size),
		["stroke-opacity"] = args.opacity == nil and 1 or tonumber(args.opacity),
		['title'] = args.title == nil and '' or args.title,
		['description'] = args.description == nil and '' or args.description,
	}
	
	local coordinates = {}
	local i = 1
	while args[i] ~= nil do
		local latlng = mw.text.split( args[i], ",", true )
		coordinates[i] = {
        	tonumber(latlng[2]), 
        	tonumber(latlng[1]),
        }
		i = i+1
	end
	
	local geojson = {
            type = "Feature",
            properties = properties,
            geometry = {
                type = "LineString",
                coordinates = coordinates
            }
        }
    return mw.text.jsonEncode(geojson) .. ','
end

function p.polygon(frame)
	local args = normalise(frame:getParent().args)
	
	if args[3] == nil then --At least three coordinates are mandatory
		return
	end
	
	local properties = {
		["stroke"] = args.color == nil and '#555555' or args.color,
		["stroke-width"] = args.size == nil and 2 or tonumber(args.size),
		["stroke-opacity"] = args.opacity == nil and 1 or tonumber(args.opacity),
		["fill"] = args.fill_color == nil and '#555555' or args.fill_color,
		["fill-opacity"] = args.fill_opacity == nil and 0.3 or tonumber(args.fill_opacity),
		['title'] = args.title == nil and '' or args.title,
		['description'] = args.description == nil and '' or args.description,
	}
	
	local coordinates = {}
	local i = 1
	while args[i] ~= nil do
		local latlng = mw.text.split( args[i], ",", true )
		coordinates[i] = {
        	tonumber(latlng[2]), 
        	tonumber(latlng[1]),
        }
		i = i+1
	end
	local latlng = mw.text.split( args[1], ",", true )
	coordinates[i] = {
    	tonumber(latlng[2]), 
    	tonumber(latlng[1]),
    }
	
	local geojson = {
            type = "Feature",
            properties = properties,
            geometry = {
                type = "Polygon",
                coordinates = { coordinates }
            }
        }
    return mw.text.jsonEncode(geojson) .. ','
end

function p.query(frame)
	local args = normalise(frame:getParent().args)
	
	local query
	if args[1] ~= nil then
		query = args[1]
	else
		return
	end
	
	local properties = {
		["stroke"] = args.color == nil and '#555555' or args.color,
		["stroke-width"] = args.size == nil and 2 or tonumber(args.size),
		["stroke-opacity"] = args.opacity == nil and 1 or tonumber(args.opacity),
		["fill"] = args.fill_color == nil and '#555555' or args.fill_color,
		["fill-opacity"] = args.fill_opacity == nil and 0.3 or tonumber(args.fill_opacity),
		['title'] = args.title == nil and '' or args.title,
		['description'] = args.description == nil and '' or args.description,
	}
	
	local service = "geoshape"
	if args.contour ~= nil then
		service = "geoline"
	end
	
	local geojson = {
		type = "ExternalData",
		service = service,
		query = query,
		properties = properties,
	}
    return mw.text.jsonEncode(geojson) .. ','
end

function p.osm(frame)
	local args = normalise(frame:getParent().args)
	
	local qid
	if args[1] == nil then
		qid = mw.wikibase.getEntityIdForCurrentPage()
	else
		qid = mw.text.trim(args[1])
	end
	
	local properties = {
		["stroke"] = args.color == nil and '#555555' or args.color,
		["stroke-width"] = args.size == nil and 2 or tonumber(args.size),
		["stroke-opacity"] = args.opacity == nil and 1 or tonumber(args.opacity),
		["fill"] = args.fill_color == nil and '#555555' or args.fill_color,
		["fill-opacity"] = args.fill_opacity == nil and 0.3 or tonumber(args.fill_opacity),
		['title'] = args.title == nil and '' or args.title,
		['description'] = args.description == nil and '' or args.description,
	}
	
	local service = "geoshape"
	if args.contour ~= nil then
		service = "geoline"
	end
	
	local geojson = {
		type = "ExternalData",
		service = service,
		ids = qid,
		properties = properties,
	}
    return mw.text.jsonEncode(geojson) .. ','
end

function p.commons(frame)
	local args = normalise(frame:getParent().args)
	
	if args[1] == nil then
		return
	end
	
	local page_name = args[1]
	if mw.ustring.find(page_name, "Data:", 1, true) == 1 then
		page_name = string.sub(page_name, 6)
	end
	if mw.ustring.find(page_name, ".map", -4, true) == nil then
		page_name = page_name .. '.map'
	end
	
	local geojson = {
		type = "ExternalData",
		service = "page",
		title = page_name
	}
    return mw.text.jsonEncode(geojson) .. ','
end

function p.wikidata(frame)
	local args = normalise(frame:getParent().args)
	local qid
	
	local properties = {
		['marker-color'] = args.color == nil and '#555555' or args.color,
		['marker-size'] = args.size == nil and 'medium' or args.size,
		['marker-symbol'] = args.symbol == nil and '' or args.symbol,
		['title'] = args.title == nil and '' or args.title,
		['description'] = args.description == nil and '' or args.description,
	}
	
	if args[1] == nil then
		qid = mw.wikibase.getEntityIdForCurrentPage()
	else
		qid = args[1]
	end
	
	local entity = mw.wikibase.getEntity( qid )
	local value = entity:formatPropertyValues( 'P625', { mw.wikibase.entity.claimRanks.RANK_NORMAL, mw.wikibase.entity.claimRanks.RANK_PREFERRED, mw.wikibase.entity.claimRanks.RANK_TRUTH } ).value
	if value == nil then
		error('La propriété P625 "coordonnées géographiques" n\'est pas renseigné sur Wikidata')
	end
	latlng = mw.text.split( mw.text.decode(value), ", ", true )
	geojson = {
		type = "Feature",
		geometry = {
			type = "Point",
			coordinates = {
				coord._dms2dec(coord._parsedmsstring(latlng[2])), 
				coord._dms2dec(coord._parsedmsstring(latlng[1]))
			}
		},
		properties = properties
	}
	
	return mw.text.jsonEncode(geojson) .. ','
end

function p.tag(frame)
    local args = ( frame.getParent and normalise(frame:getParent().args) ) or frame
	
	-- Choose the tagname
	local tagname = 'mapframe'
	if args.lien ~= nil then
		tagname = 'maplink'
	end

	-- Manage the basics tag params
	local tagArgs = {
		zoom = args.zoom == nil and args.commons == nil and 14 or tonumber(args.zoom),
		height = args.height == nil and 420 or tonumber(args.height),
		width = args.width == nil and 420 or tonumber(args.width),
		align = args.align == nil and 'right' or args.align,
		text = args.text,
	}
	
	if args[1] ~= nil and (args.latitude ~= nil or args.longitude ~= nil) then
		error('La ou les valeurs de longitude et/ou de latitude ont été fournis via deux syntaxe différentes. Consultez la documentation du [[Modèle:Carte interactive]] pour obtenir une syntaxe correcte')
	elseif args.latitude ~= nil and args.latitude ~= ''
	and args.longitude ~= nil and args.longitude ~= '' then
		tagArgs.latitude = args.latitude
		tagArgs.longitude = args.longitude
	elseif args[1] ~= nil and args[2] ~= nil then
		tagArgs.latitude = args[1]
		tagArgs.longitude = args[2]
	elseif args.commons == nil and args.wikidata == nil
	and args.formes == nil and args.query == nil and args.externes == nil then --The only exceptions allowed to put latitude and longitude away are when using an external map stored on commons, coord from wikidata, formes, query or externes
		error('Les paramètres de latitude et/ou de longitude sont absent')
	end
	
	if tagArgs.latitude ~= nil and tagArgs.longitude ~= nil then
		if tonumber(tagArgs.latitude) then
			tagArgs.latitude = tonumber(tagArgs.latitude)
		else
			tagArgs.latitude = coord._dms2dec(coord._parsedmsstring(tagArgs.latitude))
		end
		if tonumber(tagArgs.longitude) then
			tagArgs.longitude = tonumber(tagArgs.longitude)
		else
			tagArgs.longitude = coord._dms2dec(coord._parsedmsstring(tagArgs.longitude))
		end
	end

	if args.frameless then
		tagArgs.frameless = ''
	end
	
	if args.lang ~= nil then
		tagArgs.lang = args.lang
	end
	
	-- Manage the basics GeoJSON params
	local geojson = {}
	
	if args.commons ~= nil then
		geojson[#geojson+1] = {
			type = "ExternalData",
			service = "page",
			title = args.commons,
		}
	end
	
	if args.marqueur ~= nil and args.marqueur ~= '' then
		geojson[#geojson+1] = {
			type = "Feature",
			geometry = {
				type = "Point",
				coordinates = {
					tagArgs.longitude, 
					tagArgs.latitude
				}
			},
			properties = {
				['marker-color'] = (args.color == nil or args.color == '') and '#555555' or args.color,
	 			['marker-size'] = (args.size == nil or args.size == '') and 'medium' or args.size,
				['marker-symbol'] = args.symbol == nil and '' or args.symbol,
				['title'] = args.title == nil and '' or args.title,
				['description'] = args.description == nil and '' or args.description,
			}
		}
	end
	
	if args.osm ~= nil and args.osm ~= '' then
		local qid
		if args.osm == 'oui' then
			qid = mw.wikibase.getEntityIdForCurrentPage()
			if qid == nil then
				qid = "Q1"
			end
		else
			qid = args.osm
		end
		
		local service = "geoshape"
		if args.contour ~= nil then
			service = "geoline"
		end
		
		geojson[#geojson+1] = {
			type = "ExternalData",
			service = service,
			ids = qid,
			properties = {
				['title'] = args.title == nil and '' or args.title,
				['description'] = args.description == nil and '' or args.description,
				['stroke'] = args.outline_color == nil and '#555555' or args.outline_color,
				['stroke-width'] = args.outline_size == nil and 2 or tonumber(args.outline_size),
			}
		}
	end
	
	local qid = args.wikidata
	if qid and not mw.wikibase.isValidEntityId( qid ) then
		qid = mw.wikibase.getEntityIdForCurrentPage()
	end
	if qid and mw.wikibase.isValidEntityId( qid ) then
		local entity = mw.wikibase.getEntity( qid )
		local value = entity:formatPropertyValues( 'P625', { mw.wikibase.entity.claimRanks.RANK_NORMAL, mw.wikibase.entity.claimRanks.RANK_PREFERRED, mw.wikibase.entity.claimRanks.RANK_TRUTH } ).value
		if value == '' then
			error('La propriété P625 "coordonnées géographiques" n\'est pas renseigné sur Wikidata')
		end
		latlng = mw.text.split( mw.text.decode(value), ", ", true )
		geojson[#geojson+1] = {
			type = "Feature",
			geometry = {
				type = "Point",
				coordinates = {
					coord._dms2dec(coord._parsedmsstring(latlng[2])), 
					coord._dms2dec(coord._parsedmsstring(latlng[1]))
				}
			},
			properties = {
				title = args.title == nil and '' or args.title,
				description = args.description == nil and '' or args.description,
			}
		}
	end
	
	if args.query ~= nil then
		local service = "geoshape"
		if args.contour ~= nil then
			service = "geoline"
		end
		
		geojson[#geojson+1] = {
			type = "ExternalData",
			service = service,
			query = args.query,
			properties = {
				title = args.title == nil and '' or args.title,
				description = args.description == nil and '' or args.description,
			}
		}
	end
	
	--Manage external GeoJSON datas included through models
	if args.formes ~= nil then
		geojson[#geojson+1] = {
			type = "FeatureCollection",
			features = decodeJsonList(args.formes)
		}
	end
	
	if args.externes ~= nil and args.externes ~= '' then
		local externes = decodeJsonList(args.externes)
		for k, externe in pairs(externes) do
			geojson[#geojson+1] = externe
		end
	end
	
	return frame:extensionTag(tagname, mw.text.jsonEncode(geojson), tagArgs)
end

return p
Ce document provient de « https://fr.teknopedia.teknokrat.ac.id/w/index.php?title=Module:Carte_interactive&oldid=190316004 ».
Catégories :
  • Module sans documentation
  • Module en langage Lua
Catégorie cachée :
  • Module en semi-protection étendue

  • indonesia
  • Polski
  • الرية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصر
  • Nederlands
  • 本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українска
  • Tiếng Việt
  • Winaray
  • 中文
  • Русски
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id