/*jslint plusplus:false,white:false,undef: false, rhino: true, onevar: true, evil: false */
/*
Title: Mapa
Arquivo:
i3geo/classesjs/classe_mapa.js
Licenca:
GPL2
I3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil
Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br
Este programa é software livre; você pode redistribuí-lo
e/ou modificá-lo sob os termos da Licença Pública Geral
GNU conforme publicada pela Free Software Foundation;
Este programa é distribuído na expectativa de que seja útil,
porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
Consulte a Licença Pública Geral do GNU para mais detalhes.
Você deve ter recebido uma cópia da Licença Pública Geral do
GNU junto com este programa; se não, escreva para a
Free Software Foundation, Inc., no endereço
59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
*/
if(typeof(i3GEO) === 'undefined'){
i3GEO = [];
}
/*
Classe: i3GEO.mapa
Cria e processa o mapa principal
Em i3GEO.mapa.dialogo estão as funções de abertura dos diálogos para alteração das propriedades do mapa,
como cor de fundo, tipo de imagem, legenda etc.
*/
i3GEO.mapa = {
/*
Propriedade: AUTORESIZE
Indica se o tamanho do mapa será ajustado toda vez que o navegador for redimensionado
Type:
{boolean}
Default:
{false}
*/
AUTORESIZE: false,
/*
Variavel: GEOXML
Armazena o nome dos objetos geoXml adicionados ao mapa pela API do google maps
Tipo:
{Array}
*/
GEOXML: [],
/*
Function: insereDobraPagina
Insere o ícone do tipo "dobra de´página" que permite alterar o renderizador do mapa
Parametros:
tipo {string} - tipo de ícone googlemaps|openlayers
imagem {string} - endereço da imagem que será utilizada no ícone
*/
insereDobraPagina: function(tipo,imagem){
var novoel = $i("i3GEOdobraPagina");
if(!novoel){
novoel = document.createElement("img");
}
novoel.src = imagem;
novoel.id = "i3GEOdobraPagina";
if(tipo === "googlemaps")
{novoel.onclick = function(){i3GEO.Interface.atual2gm.inicia();};}
if(tipo === "openlayers")
{novoel.onclick = function(){i3GEO.Interface.atual2ol.inicia();};}
novoel.style.cursor = "pointer";
novoel.style.position = "absolute";
novoel.style.top = i3GEO.parametros.h - 35;
novoel.style.zIndex = "50000";
novoel.style.left = i3GEO.parametros.w - 35;
$i(i3GEO.Interface.IDMAPA).appendChild(novoel);
},
/*
Function: ativaAutoResize
Ativa o redimensionamento automático do mapa sempre que o navegador for redimensionado
É definido como um evento do elemento window
*/
ativaAutoResize: function(){
window.onresize = function(){
var temp,Dw,Dh, r = false;
Dw = YAHOO.util.Dom.getViewportWidth();
Dh = YAHOO.util.Dom.getViewportHeight();
if(Math.abs(Dw - i3GEO.tamanhodoc[0]) > 50){
r = true;
}
if(Math.abs(Dh - i3GEO.tamanhodoc[1]) > 50){
r = true;
}
if(r === false)
{return;}
i3GEO.tamanhodoc = [Dw,Dh];
temp = setTimeout(function(){
i3GEO.reCalculaTamanho();
i3GEO.barraDeBotoes.recria("i3geo_barra2");
if(i3GEO.Interface.TABLET === true)
{i3GEO.guias.escondeGuias();return;}
if(i3GEO.guias.TIPO === "movel")
{i3GEO.guias.guiaMovel.reposiciona();}
else
{i3GEO.guias.ajustaAltura();}
},2000);
};
},
/*
Function: ajustaPosicao
Ajusta o posicionamento do corpo do mapa
Esse ajuste é necessário na inicialização, uma vez que o mapa utiliza style.position='absolute'
Parameters:
elemento {String} - id do elemento HTML que deverá ser ajustado e que contém o mapa
*/
ajustaPosicao: function(elemento){
if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.ajustaPosicao()");}
if(arguments.length === 0){return;}
var imagemxi = 0,
imagemyi = 0,
imagemxref = 0,
imagemyref = 0,
dc = $i(elemento),
c;
if(!dc){return;}
try{
while ((dc.offsetParent) && (dc.offsetParent.id !== "i3geo")){
dc = dc.offsetParent;
imagemxi += dc.offsetLeft;
imagemyi += dc.offsetTop;
}
c = $i(i3GEO.Interface.IDCORPO);
if (c){
c.style.position="absolute";
if(navm)
{$left(i3GEO.Interface.IDCORPO,imagemxi - 1);}
else
{$left(i3GEO.Interface.IDCORPO,imagemxi);}
$top(i3GEO.Interface.IDCORPO,imagemyi);
}
}
catch(e){alert("Ocorreu um erro. i3GEO.mapa.ajustaPosicao "+e);}
},
/*
Function: ativaTema
Altera a variável i3GEO.temaAtivo e atualiza a interface em função do novo tema que for ativado
O tema anteriormente ativo tem sua cor alterada para a cor normal e o novo tema é destacado com uma cor diferente
Executa também as funções armazenadas em i3GEO.eventos.ATIVATEMA
Parametros:
codigo {string} - código da camada
*/
ativaTema: function(codigo){
if(codigo){
if(codigo === "")
{return;}
if(i3GEO.temaAtivo !== "")
{i3GEO.util.defineValor("ArvoreTituloTema"+i3GEO.temaAtivo,"style.color","");}
i3GEO.temaAtivo = codigo;
i3GEO.util.defineValor("ArvoreTituloTema"+codigo,"style.color","brown");
}
},
/*
Function: ativaLogo
Ativa ou desativa a logo marca.
*/
ativaLogo: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.ativaLogo()");}
if(i3GEO.Interface.ATUAL === "googlemaps")
{alert("Essa operação não funciona nessa interface");return;}
//i3GEO.contadorAtualiza++;
i3GEO.php.ativalogo(i3GEO.atualiza);
},
/*
Function: verifica
Verifica se ocorreu algum problema na atualização do corpo do mapa e inicia o processo de tentativa de recuperação
Parametro:
retorno {string} - objeto recebido da função PHP de atualização do mapa
*/
verifica:function(retorno){
if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.verifica()");}
try{
i3GEO.janela.abreAguarde("ajaxCorpoMapa",$trad("o3"));
if(retorno.data)
{retorno = retorno.data;}
if (retorno.variaveis)
{retorno = retorno.variaveis;}
if ((retorno === "erro") || (typeof(retorno) === 'undefined')){
i3GEO.mapa.ajustaPosicao();
i3GEO.janela.fechaAguarde();
i3GEO.mapa.recupera.inicia();
}
i3GEO.mapa.recupera.TENTATIVA = 0;
}
catch(e){
if(i3GEO.Interface.ATUAL === "openlayers" || i3GEO.Interface.ATUAL === "googlemaps"){
i3GEO.janela.fechaAguarde();
return;
}
if(this.recupera.TENTATIVA === 0){
alert("Erro no mapa. Sera feita uma tentativa de recuperacao.");
i3GEO.mapa.recupera.inicia();
}
else{
alert("Recuperacao impossivel. Sera feita uma tentativa de reiniciar o mapa.");
if (this.recupera.TENTATIVA === 1){
this.recupera.TENTATIVA = 2;
i3GEO.php.reiniciaMapa(i3GEO.atualiza);
}
}
if(typeof(console) !== 'undefined'){console.error(e);}
}
},
/*
Classe: i3GEO.mapa.recupera
Tenta recuperar o mapa caso ocorra algum problema
O i3Geo mantém sempre uma cópia do arquivo mapfile em uso. Essa função tenta
usar essa cópia para restaurar o funcionamento do mapa
*/
recupera:{
/*
Variavel: TENTATIVA
Armazena a quantidade de tentativas de recuperação que foram feitas
Tipo:
{Integer}
*/
TENTATIVA: 0,
/*
Function: inicia
Inicia a tentativa de recuperação
*/
inicia: function(){
i3GEO.mapa.ajustaPosicao();
i3GEO.janela.fechaAguarde();
if(this.recupera.TENTATIVA === 0){
this.recupera.TENTATIVA++;
this.recupera.restaura();
}
},
/*
Function: restaura
Restaura o mapa para a cópia de segurança existente no servidor
*/
restaura: function(){
i3GEO.php.recuperamapa(i3GEO.atualiza);
}
},
/*
Classe: i3GEO.mapa.legendaHTML
Controla a obtenção da legenda do mapa formatada em HTML.
Útil para mostrar a legenda na tela
*/
legendaHTML:{
/*
Propriedade: incluiBotaoLibera
Define se na legenda será incluido o botão para liberar a legenda e incluí-la em uma janela flutuante
Tipo:
{boolean}
Default:
{true}
*/
incluiBotaoLibera: true,
/*
Variavel: ID
Armazena o id definido na criação da legenda
*/
ID: "",
/*
Function: cria
Cria a legenda HTML
A legenda é incluida no id definido. Se id for igual a "", será apenas definido o evento de atualização
permitindo que seja criada a janela flutuante apenas, por exemplo:
i3GEO.mapa.legendaHTML.cria("");
i3GEO.mapa.legendaHTML.libera();
Parametros:
id {String} - id do elemento que receberá a legenda
*/
cria: function(id){
if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.legendaHTML.cria()");}
if(arguments.length === 0)
{id = "";}
i3GEO.mapa.legendaHTML.ID = id;
if(i3GEO.eventos.NAVEGAMAPA.toString().search("i3GEO.mapa.legendaHTML.atualiza()") < 0)
{i3GEO.eventos.NAVEGAMAPA.push("i3GEO.mapa.legendaHTML.atualiza()");}
i3GEO.mapa.legendaHTML.atualiza();
},
/*
Function: atualiza
Atualiza o elemento HTML do mapa utilizado para mostrar a legenda
*/
atualiza: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.mapa.legendaHTML.atualiza()");}
var idleg,
temp = function(retorno){
var s,ins,elementos,i,temp,re;
re = new RegExp("", "g");
if(i3GEO.mapa.legendaHTML.ID !== "" && $i(i3GEO.mapa.legendaHTML.ID)){
if ((retorno.data !== "erro") && (retorno.data !== undefined)){
s = i3GEO.configura.locaplic+"/imagens/branco.gif";
ins = "";
if(i3GEO.mapa.legendaHTML.incluiBotaoLibera === true)
{ins += '
Mostra a legenda em uma janela