Módulo:Infobox/Funções/Geolocalização

Documentação do módulo[ver] [editar] [histórico] [purgar]


Descrição

Este módulo tem funções auxiliares para criar infocaixas.

Uso

Outra documentação:

local localdata = require( 'Módulo:Infobox/Localdata' )
local item = localdata.item
local id
if item then
	id = item.id
end
local wd = require "Módulo:Infobox/Wikidata"
-- Módulos carregado se necessário :
-- local countrymodule = require "Módulo:Country data"
-- local coord = require "Módulo:Coordenadas"
local p = {}

function p.country()
	local function formatCountry(country)
		if not country then
			return nil
		end
		local countrymodule = require "Módulo:Country data"
		local val, success = countrymodule.standarddisplay(country) -- val = nil se o país não for reconhecido
		if success then
			return val
		end
	end

	return  {
		type = 'mixed',
		label = 'País',
                plurallabel = 'Países',
		value = function() return formatCountry(localdata['país']) or localdata['pais'] end,
		wikidata = {
			property = 'P17', 
			conjtype = 'new line', 
			displayformat = function(snak) 
				local id = wd.getId(snak) 
				return formatCountry(id) or wd.formatSnak(snak)
			end
		}
	}
end

function p.coordvalor(moduleparams) -- coordena valores, sem configuração de infobox
	local coord = require "Módulo:Coordenadas"
	if not moduleparams then
		moduleparams = {}
	end

	local function toboolean(val) -- transforma um "-" em falso no tempo desejado
		if val == '-' or val == 'não' then
			return false
		end
		return true
	end

	-- parâmetros Wikidata
	local wikidata = tostring(toboolean(localdata['wikidata'] or true)) -- deve ser string em Módulo: Coordenadas
	local maxdistance = moduleparams.maxdistance
	local wikidataquery = moduleparams.wikidataquery or {property = 'P625'}
	if not wikidataquery.entity then
		wikidataquery.entity = item
	end

	-- configurações de exibição
	local displayformat = localdata['formata coordenadas'], moduleparams.displayformat
	
	local displayplace = ''
	local displayinline = toboolean(localdata['coords online'] or moduleparams.displayinline or true)
	-- padrão: colocamos as coordenadas do título da infobox principal
	local displaytitle = localdata['coords no título']
		or moduleparams.displaytitle
		or (localdata['infoboxrank'] == 'main')
	if displayinline and (displayinline ~= '-') then
		displayplace = displayplace .. 'inline'
	end
	if displaytitle and (displaytitle ~= '-')  then
		displayplace = displayplace .. 'title,'
	end
	
	-- dados sobre geográficas
	local globe = localdata['globe'] or localdata['planeta'] or moduleparams['globe'] or 'earth'
	local latitude = localdata['latitude']
	local longitude = localdata['longitude']

	local parameterlist = {
		latitude = latitude,
		longitude = longitude,
		displayformat = displayformat,
		display= displayplace,
		globe = globe,
		wikidata = wikidata,
		wikidataquery = wikidataquery,
		maxdistance = maxdistance,
	}
	
	local val = coord._coord(parameterlist)
	if (not val) and moduleparams.fallbackquery then -- se não houver valor, tente a consulta de substituição
		parameterlist.wikidataquery = moduleparams.fallbackquery
		parameterlist.wikidataquery.entity = item
		val = coord._coord(parameterlist)
	end
	if val and latitude and longitude and localdata['referência geolocalização'] then
		val = val .. ' ' .. localdata['referência geolocalização']
	end
	if val and not localdata['latitude'] then
		val = wd.addLinkBack(val, item, wikidataquery.property)
	end
	if displayinline == false then
		return -- type: texto para não ter uma linha vazia na infobox
		{
		type = 'external text',
		sortkey = sortkey,
 		value = val
 		}
 	else 
 		return val
 	end
end

function p.coordenadas (moduleparams)
	if not moduleparams then
		moduleparams = {}
	end
	-- A coordenada dos parâmetros tem prioridade sobre a "geolocalização" (= mapa
	local relevant = localdata['coordenadas'] or localdata['geolocalização'] 
	if relevant == '-' or relevant == 'não' then
		return nil
	end
	-- inicialize os parâmetros com os valores do módulo infobox (moduleparams)
	return {
		type = 'mixed',
		label = 'Coordenadas',
		maintenancecat = moduleparams.maintenancecat or '!Página geolocalizável sem parâmetro coordenadas',
		sortkey = moduleparams.sortkey,
 		value = function (localdata) return p.coordvalor(moduleparams) end
 	}	
end

function p.geoloc(params)

	if not params then
		params = {}
	end
	if (localdata['geolocalização'] == '-') or (localdata['geolocalização'] == 'não relevante') then
		return nil
	end
	
	return   { 
		type = 'map',
		latitude = 'latitude',
		longitude = 'longitude',
		wikidata = params.wikidata or {{property = 'P625'}},
		entity = item,
		maps = function() return localdata['geolocalização'] or params.defaultmaps or "interactive" end, -- parâmetro para a lista de mapas para usar
		staticmaps = 'mapa', -- mapa em modo image simple
		staticmapsWD = {property = "P242", numval = 1}, -- p
		pointtype = params.pointtype,
		maptype = params.maptype,
		globe = localdata.globe or localdata['planeta'] or params.globe,
		marker = params.marker,
		markercolor = params.markercolor,
		shapecolor = params.shapecolor,
		default_zoom = localdata['zoom'] or params.default_zoom,
		ids = params.ids or id,
		params = {guessmaps = params.guessmaps} -- = quais mapas usar na ausência de dados fornecidos na |geolocalização
	}
end

function p.locationmap(size)
	return {
		type = 'images',
		imageparameters =  {'mapa'},
		sizeparameter = 'tamanho mapa',
		captionparameter = {'legenda mapa'},
		defaultsize = 	size,
		property = 'P242',
		numval = 1,
	}
end

return p