/*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 = {
/*
Variavel: GEOXML
Armazena o nome dos objetos geoXml adicionados ao mapa pela API do google maps
Tipo:
{Array}
*/
GEOXML: [],
/*
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;}
if(!$i(elemento)){return;}
var imagemxi,imagemyi,imagemxref,imagemyref,dc,c;
try{
imagemxi = 0;
imagemyi = 0;
imagemxref = 0;
imagemyref = 0;
dc = $i(elemento);
while ((dc.offsetParent) && (dc.offsetParent.id !== "i3geo")){
dc = dc.offsetParent;
imagemxi = imagemxi + dc.offsetLeft;
imagemyi = 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
Parametros:
codigo {string} - código da camada
*/
ativaTema: function(codigo){
var noArvoreCamadas = $i("arrastar_"+codigo),
noAtualArvoreCamadas = $i("arrastar_"+i3GEO.temaAtivo);
i3GEO.temaAtivo = codigo;
if(noAtualArvoreCamadas){
noAtualArvoreCamadas.style.color = "";
}
if(noArvoreCamadas){
noArvoreCamadas.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") || (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(i3GEO.mapa.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 (i3GEO.mapa.recupera.TENTATIVA === 1){
i3GEO.mapa.recupera.TENTATIVA = 2;
//i3GEO.contadorAtualiza++;
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(i3GEO.mapa.recupera.TENTATIVA === 0){
i3GEO.mapa.recupera.TENTATIVA++;
i3GEO.mapa.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 temp = function(retorno){
var s,ins,elementos,i;
if(i3GEO.mapa.legendaHTML.ID !== "" && $i(i3GEO.mapa.legendaHTML.ID)){
if ((retorno.data !== "erro") && (retorno.data !== undefined)){
s = i3GEO.configura.locaplic+"/imagens/solta.gif";
ins = "";
if(i3GEO.mapa.legendaHTML.incluiBotaoLibera === true)
{ins += "
";}
ins += "