/*
Title: Mapa de referência
File: i3geo/classesjs/classe_maparef.js
About: Licença
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;
tanto a versão 2 da Licença.
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 = new Array();
}
/*
Class: i3GEO.maparef
Cria e processa o mapa de referência
Exemplo:
i3Geo.maparef.inicia()
*/
i3GEO.maparef = {
/*
Variable: fatorZoomDinamico
Define o fator de zoom inicial do mapa de referência quando o modo dinâmico for ativado
*/
fatorZoomDinamico: -3,
/*
Property: SELETORTIPO
Inclui ou não o seletor de tipo de mapa de referência
Type:
{Boolean}
Default:
{true}
*/
SELETORTIPO:true,
/*
Property: PERMITEFECHAR
Mostra o botão para fechar a janela ou não.
Type:
{boolean}
*/
PERMITEFECHAR: true,
/*
Property: PERMITEDESLOCAR
Permite deslocar janela ou não.
Type:
{boolean}
*/
PERMITEDESLOCAR: true,
/*
Property: TRANSICAOSUAVE
Altera a transparência quando o mouse sobrepõe ao mapa de referência e quando sai
Essa opção como true não funciona bem no IE
Type:
{boolean}
Default:
{true}
*/
TRANSICAOSUAVE: false,
/*
Property: OPACIDADE
Valor da transparência mínima utilizada quando TRANSICAOSUAVE for igual a true.
Varia de 0 a 100
Type:
{numeric}
Default:
{65}
*/
OPACIDADE: 35,
/*
Property: TOP
Posição da janela em relação ao topo do mapa
{Numeric}
*/
TOP: 4,
/*
Property: RIGHT
Posição da janela em relação ao lado direito do mapa
{Numeric}
*/
RIGHT:0,
/*
Function: inicia
Inicializa o mapa de referência
*/
inicia: function(){
//YAHOO.log("initJanelaRef", "i3geo");
if (!$i("i3geo_winRef")){
var novoel = document.createElement("div");
novoel.id = "i3geo_winRef";
novoel.style.display="none";
novoel.style.borderColor="gray";
var ins = "";
if(i3GEO.maparef.PERMITEDESLOCAR){
ins += '
';
ins += ' ';
var temp = "javascript:if(i3GEO.maparef.fatorZoomDinamico == -1){i3GEO.maparef.fatorZoomDinamico = 1};i3GEO.maparef.fatorZoomDinamico = i3GEO.maparef.fatorZoomDinamico + 1 ;$i(\"refDinamico\").checked = true;i3GEO.maparef.atualiza();";
ins += "";
var temp = "javascript:if(i3GEO.maparef.fatorZoomDinamico == 1){i3GEO.maparef.fatorZoomDinamico = -1};i3GEO.maparef.fatorZoomDinamico = i3GEO.maparef.fatorZoomDinamico - 1 ;$i(\"refDinamico\").checked = true;i3GEO.maparef.atualiza();";
ins += " ";
if(i3GEO.maparef.SELETORTIPO){
ins += "";
}
ins += "
";
}
ins += '
';
ins += '';
ins += '
';
novoel.innerHTML = ins;
document.body.appendChild(novoel);
if(i3GEO.maparef.TRANSICAOSUAVE){
var novoel = $i("imagemReferencia");
if (navm)
{novoel.style.filter='alpha(opacity='+i3GEO.maparef.OPACIDADE+')';}
else
{novoel.style.opacity= i3GEO.maparef.OPACIDADE / 100;}
novoel.onmouseover = function(){
if (navm)
{novoel.style.filter='alpha(opacity=100)';}
else
{novoel.style.opacity= 1;}
};
novoel.onmouseout = function(){
if (navm)
{novoel.style.filter='alpha(opacity='+i3GEO.maparef.OPACIDADE+')';}
else
{novoel.style.opacity= i3GEO.maparef.OPACIDADE / 100;}
}
}
}
if($i("i3geo_winRef").style.display != "block"){
$i("i3geo_winRef").style.display = "block";
YAHOO.namespace("janelaRef.xp");
var temp = "none";
if(i3GEO.maparef.PERMITEDESLOCAR)
var temp = "shadow";
YAHOO.janelaRef.xp.panel = new YAHOO.widget.Panel("i3geo_winRef", { height:"200px", width:"156px", fixedcenter: false, constraintoviewport: true, underlay:temp, close:i3GEO.maparef.PERMITEFECHAR, visible:true, draggable:i3GEO.maparef.PERMITEDESLOCAR, modal:false } );
YAHOO.janelaRef.xp.panel.render();
var r = $i("i3geo_winRef_c");
if(r){
r.style.clip = "rect(0px, 160px, 179px, 0px)";
r.style.position = "absolute";
}
var pos = i3GEO.util.pegaPosicaoObjeto($i(i3GEO.interface.IDCORPO));
var moveX = pos[0] + i3GEO.parametros.w + 153 - i3GEO.maparef.RIGHT - 300;
var moveY = pos[1] + i3GEO.maparef.TOP;
YAHOO.janelaRef.xp.panel.moveTo(moveX,moveY);
var escondeRef = function(){
YAHOO.util.Event.removeListener(YAHOO.janelaRef.xp.panel.close, "click");
YAHOO.janelaRef.xp.panel.destroy();
i3GEO.util.insereCookie("i3GEO.configura.mapaRefDisplay","none");
};
YAHOO.util.Event.addListener(YAHOO.janelaRef.xp.panel.close, "click", escondeRef);
i3GEO.util.insereCookie("i3GEO.configura.mapaRefDisplay","block");
if(typeof(atualizaLocalizarxy) == "function"){
if(i3GEO.gadgets.PARAMETROS.mostraCoordenadasGEO.idhtml)
YAHOO.util.Event.addListener($i("imagemReferencia"),"mousemove", atualizaLocalizarxy);
}
}
//YAHOO.log("Fim initJanelaRef", "i3geo");
if(i3GEO.eventos.NAVEGAMAPA.toString().search("i3GEO.maparef.atualiza()") < 0)
{i3GEO.eventos.NAVEGAMAPA.push("i3GEO.maparef.atualiza()");}
this.atualiza();
$i("i3geo_winRef_h").className = "hd2";
},
/*
Function: atualiza
Atualiza o mapa de referência.
Se o modo cgi estiver ativado, o mapa de referência é desenhado utilizando-se como src da imagem o programa cgi do Mapserver.
No modo dinâmico, a imagem é gerada de forma diferenciada. Nesse caso, o modo cgi é desabilitado.
O atualizaReferencia é sempre chamado após o mapa ser redesenhado.
Se houve alteração na extensão, é preciso refazer o mapa de referência se não, a imagem atual é armazenada no quado de animação
*/
atualiza: function(){
var dinamico = false;
if ($i("refDinamico"))
{var tiporef = $i("refDinamico").value;}
else
{var tiporef = "fixo";}
if ($i("mapaReferencia")){
var temp = $i("maparefmaismenosZoom");
if(tiporef == "dinamico"){
i3GEO.php.referenciadinamica(i3GEO.maparef.processaImagem,i3GEO.maparef.fatorZoomDinamico,tiporef);
if(temp){temp.style.display="inline";}
}
if(tiporef == "fixo"){
if(($i("imagemReferencia").src == "") || (i3GEO.parametros.cgi != "sim")){
i3GEO.php.referencia(i3GEO.maparef.processaImagem);
if(temp){temp.style.display="none";}
}
else{
var re = new RegExp("&mode=map", "g");
$i("imagemReferencia").src = $i(i3GEO.interface.IDMAPA).src.replace(re,'&mode=reference');
i3GEO.gadgets.quadros.grava("referencia",$i("imagemReferencia").src);
}
}
if(tiporef == "mapa"){
i3GEO.php.referenciadinamica(i3GEO.maparef.processaImagem,i3GEO.maparef.fatorZoomDinamico,tiporef);
if(temp){temp.style.display="inline";}
}
}
else{
if($i("imagemReferencia"))
i3GEO.gadgets.quadros.grava("referencia",$i("imagemReferencia").src);
i3GEO.eventos.NAVEGAMAPA.remove("i3GEO.maparef.atualiza()");
}
},
/*
Function: processaImagem
Substituí a imagem do mapa de referência pela última gerada.
Esta função processa os dados de uma chamada AJAX para atualizar o mapa de referência
Parameters:
retorno - string no formato "var refimagem='nome da imagem'".
*/
processaImagem: function(retorno){
i3GEO.janela.fechaAguarde("ajaxreferencia1");
if ((retorno.data != "erro") && (retorno.data != undefined)){
eval(retorno.data);
i3GEO.parametros.celularef = g_celularef;
i3GEO.parametros.extentref = extentref;
if ($i("imagemReferencia")){
var m = new Image();
m.src = refimagem;
$i("imagemReferencia").src=m.src;
}
i3GEO.gadgets.quadros.grava("referencia",refimagem);
var tiporef = "fixo";
if ($i("refDinamico"))
{var tiporef = $i("refDinamico").value;}
var box = $i("boxref");
if(tiporef != "fixo"){
if (box){box.style.display = "none"}
return;
}
//
//box movel sobre o mapa
//
if (!box){
var novoel = document.createElement("div");
novoel.id = "boxref";
novoel.style.zIndex=10;
novoel.style.position = 'absolute';
novoel.style.cursor = "move";
novoel.style.backgroundColor = "RGB(120,220,220)";
if (navm){novoel.style.filter='alpha(opacity=40)';}
else{novoel.style.opacity= .4;}
$i("mapaReferencia").appendChild(novoel);
var boxrefdd = new YAHOO.util.DD("boxref");
novoel.onmouseup = function(){
var rect = $i("boxref");
var telaminx = parseInt(rect.style.left);
var telamaxy = parseInt(rect.style.top);
var telamaxx = telaminx + parseInt(rect.style.width);
var telaminy = telamaxy + parseInt(rect.style.height);
var m = i3GEO.calculo.tela2dd(telaminx,telaminy,i3GEO.parametros.celularef,i3GEO.parametros.extentref);
var x = i3GEO.calculo.tela2dd(telamaxx,telamaxy,i3GEO.parametros.celularef,i3GEO.parametros.extentref);
var ext = m[0]+" "+m[1]+" "+x[0]+" "+x[1];
i3GEO.navega.zoomExt(i3GEO.configura.locaplic,i3GEO.configura.sid,"",ext);
}
var box = $i("boxref");
}
i3GEO.calculo.ext2rect("boxref",extentref,i3GEO.parametros.mapexten,g_celularef,$i("mapaReferencia"));
if(parseInt(box.style.width) > 120)
box.style.display = "none";
else{
box.style.display = "block";
box.style.top = parseInt(box.style.top)+2;
box.style.left = parseInt(box.style.left)+2;
}
}
},
/*
Function: click
Ocorre quando o usuário clica sobre o mapa de referência, alterando a extensão geográfica do mapa principal
*/
click: function(){
try{
i3GEO.janela.abreAguarde("i3GEO.atualiza",$trad("o1"));
i3GEO.php.pan(i3GEO.atualiza,i3GEO.parametros.mapscale,"ref",objposicaocursor.refx,objposicaocursor.refy);
}
catch(e)
{var e = "";i3GEO.janela.fechaAguarde("i3GEO.atualiza");}
}
};
//YAHOO.log("carregou classe maparef", "Classes i3geo");