/*
Title: Navegação sobre o mapa
i3GEO.navega
Realiza operações de navegação do mapa, como zoom, pan, etc..
Quando todos os argumentos da função forem opcionais, basta usar nomeFuncao(),
nos casos em que os primeiros argumentos forem opcionais e os demais obrigatórios,
utilize "" no lugar do argumento que se quer usar o default, exemplo,
nomeFuncao("","",10)
Arquivo:
i3geo/classesjs/classe_navega.js
Licença:
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@gmail.com
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 ADEQUACÃ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'){
var i3GEO = {};
}
i3GEO.navega = {
/**
* Guarda as ultimas extensoes geograficas das operacoes de navegacao
*/
EXTENSOES: {
lista: ["","","","","","","","","","","","","","","","","","","","","","","","",""],
posicao: 0,
emAcao: false
},
/*
Tempo em milisegundos que será esperado para executar uma operação de navegação sobre o mapa.
Controla o lapso de tempo utilizado para disparar as funções do tipo navegação
Tipo:
{Numeric}
Default:
{1500}
*/
TEMPONAVEGAR: 600,
/*
Propriedade: FATORZOOM
Valor utilizado nas operações de zoom in e out. Fator de zoom.
Default:
{2}
Tipo:
{Numeric}
*/
FATORZOOM: 2,
/*
Objeto do tipo timer utilizado no contador de tempo para o delay de execução das funções de navegação
*/
timerNavega: null,
/**
* Registra uma extensao na variavel EXTENSOES
*/
registraExt: function(ext){
var n = i3GEO.navega.EXTENSOES.lista.length;
if(ext == "" || ext == i3GEO.navega.EXTENSOES.lista[n-1]){
i3GEO.navega.EXTENSOES.posicao = 0;
i3GEO.navega.EXTENSOES.emAcao = false;
return;
}
if(i3GEO.navega.EXTENSOES.emAcao === false){
i3GEO.navega.EXTENSOES.lista.shift();
i3GEO.navega.EXTENSOES.lista.push(ext);
i3GEO.navega.EXTENSOES.posicao = 0;
i3GEO.navega.EXTENSOES.emAcao = false;
}
i3GEO.navega.EXTENSOES.emAcao = false;
},
extensaoAnterior: function(){
i3GEO.navega.EXTENSOES.emAcao = true;
var n = i3GEO.navega.EXTENSOES.lista.length,
ext;
if(i3GEO.navega.EXTENSOES.posicao >= n){
i3GEO.navega.EXTENSOES.posicao = 0;
}
ext = i3GEO.navega.EXTENSOES.lista[(n - 1) - i3GEO.navega.EXTENSOES.posicao];
if(ext == i3GEO.parametros.mapexten){
ext = i3GEO.navega.EXTENSOES.lista[(n - 2) - i3GEO.navega.EXTENSOES.posicao];
}
i3GEO.navega.EXTENSOES.posicao++;
if(ext && ext != ""){
i3GEO.navega.zoomExt("","","",ext);
}
else{
i3GEO.navega.EXTENSOES.posicao = 0;
}
},
extensaoProximo: function(){
i3GEO.navega.EXTENSOES.posicao--;
i3GEO.navega.extensaoAnterior();
},
/*
Function: centroDoMapa
Obtém as coordenadas geográficas do centro do mapa
Retorno:
{array|false} - false se falhar ou [x,y] se não falhar
*/
centroDoMapa: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.centroDoMapa()");}
var xy;
switch(i3GEO.Interface.ATUAL)
{
case "openlayers":
xy = i3geoOL.getCenter();
if(xy)
{return [xy.lon,xy.lat];}
else
{return false;}
break;
case "googlemaps":
xy = i3GeoMap.getCenter();
if(xy)
{return [xy.lng(),xy.lat()];}
else
{return false;}
break;
default:
return false;
}
},
marcaCentroDoMapa: function(xy){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.marcaCentroDoMapa()");}
if(xy != false){
xy = i3GEO.calculo.dd2tela(xy[0]*1,xy[1]*1,$i(i3GEO.Interface.IDMAPA),i3GEO.parametros.mapexten,i3GEO.parametros.pixelsize);
i3GEO.util.criaPin("i3GeoCentroDoMapa",i3GEO.configura.locaplic+'/imagens/alvo.png','30px','30px');
i3GEO.util.posicionaImagemNoMapa("i3GeoCentroDoMapa",xy[0],xy[1]);
//FIXME ao passar sobre a marca de centro na operacao de pan dispara o evento que finaliza o pan
//YAHOO.util.Event.addListener($i("i3GeoCentroDoMapa"), "mouseover", function(){$i("i3GeoCentroDoMapa").style.display="none";});
}
},
/*
Function: zoomin
Aproxima o mapa aplicando um fator de modificação da escala
Parametros:
locaplic {String} - (opcional) endereço do i3geo utilizado na geração da URL para fazer a chamada AJAX
sid {String} - (opcional) código da seção aberta no servidor pelo i3geo
*/
zoomin: function(locaplic,sid){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.zoomin()");}
if(i3GEO.Interface.ATUAL === "openlayers"){
i3geoOL.zoomIn();
return;
}
if(sid){
i3GEO.configura.locaplic = locaplic;
i3GEO.configura.sid = sid;
}
i3GEO.php.aproxima(i3GEO.atualiza,i3GEO.navega.FATORZOOM);
},
/*
Function: zoomout
Afasta o mapa aplicando um fator de modificação da escala
Parametros:
locaplic {String} - (opcional) endereço do i3geo utilizado na geração da URL para fazer a chamada AJAX
sid {String} - (opcional) código da seção aberta no servidor pelo i3geo
*/
zoomout: function(locaplic,sid){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.zoomout()");}
if(i3GEO.Interface.ATUAL === "openlayers"){
i3geoOL.zoomOut();
return;
}
if(sid){
i3GEO.configura.locaplic = locaplic;
i3GEO.configura.sid = sid;
}
i3GEO.php.afasta(i3GEO.atualiza,i3GEO.navega.FATORZOOM);
},
/*
Function: zoomponto
Centraliza o mapa em um ponto e acrescenta o ponto como uma nova camada no mapa
Parametros:
locaplic {String} - (opcional) endereço do i3geo utilizado na geração da URL para fazer a chamada AJAX
sid {String} - (opcional) código da seção aberta no servidor pelo i3geo
x {Numeric} - coordenada em décimos de grau da longitude
y {Numeric} - coordenada em décimos de grau da latitude
tamanho {Numeric} - opcional, tamanho do símbolo do ponto que será inserido no mapa
simbolo {String} - opcional, nome do símbolo para o ponto
cor {String} - opcional, cor em r g b (p.ex. "255 0 0")
*/
zoomponto: function(locaplic,sid,x,y,tamanho,simbolo,cor){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.zoomponto()");}
if(!simbolo)
{simbolo = "ponto";}
if(!tamanho)
{tamanho = 15;}
if(!cor)
{cor = "255 0 0";}
if(locaplic !== ""){i3GEO.configura.locaplic = locaplic;}
if(sid !== ""){i3GEO.configura.sid = sid;}
var f = "i3GEO.navega.timerNavega = null;"+
"i3GEO.php.zoomponto(i3GEO.atualiza,"+x+","+y+","+tamanho+",'"+simbolo+"','"+cor+"');";
if(i3GEO.navega.timerNavega !== undefined)
{clearTimeout(i3GEO.navega.timerNavega);}
i3GEO.navega.timerNavega = setTimeout(f,i3GEO.navega.TEMPONAVEGAR);
},
/*
Function: zoompontoIMG
Centraliza o mapa em um ponto de coordenadas medidas na imagem do mapa
Parametros:
locaplic {String} - (opcional) endereço do i3geo utilizado na geração da URL para fazer a chamada AJAX
sid {String} - (opcional) código da seção aberta no servidor pelo i3geo
x {Numeric} - coordenada x da imagem
y {Numeric} - coordenada y da imagem
*/
zoompontoIMG: function(locaplic,sid,x,y){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.zoompontoIMG()");}
if(locaplic !== "")
{i3GEO.configura.locaplic = locaplic;}
if(sid !== "")
{i3GEO.configura.sid = sid;}
i3GEO.php.pan(i3GEO.atualiza,'','',x,y);
},
/*
Function: xy2xy
Desloca o mapa de um ponto de coordenadas xy para um segundo ponto
Parametros:
locaplic {String} - (opcional) endereço do i3geo utilizado na geração da URL para fazer a chamada AJAX
sid {String} - (opcional) código da seção aberta no servidor pelo i3geo
xi {Numeric} - coordenada x inicial
yi {Numeric} - coordenada y inicial
xf {Numeric} - coordenada x final
yf {Numeric} - coordenada y final
ext {String} - extensão geográfica do mapa
tipoimagem {String} - tipo de imagem atual do mapa (sepia,nenhum,cinza)
*/
xy2xy: function(locaplic,sid,xi,yi,xf,yf,ext,tipoimagem){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.xy2xy()");}
var disty,distx,ex,novoxi,novoxf,novoyf,nex;
if(locaplic !== "")
{i3GEO.configura.locaplic = locaplic;}
if(sid !== "")
{i3GEO.configura.sid = sid;}
disty = (yi * -1) + yf;
distx = (xi * -1) + xf;
ex = ext.split(" ");
novoxi = (ex[0] * 1) - distx;
novoxf = (ex[2] * 1) - distx;
novoyi = (ex[1] * 1) - disty;
novoyf = (ex[3] * 1) - disty;
if ((distx === 0)&&(disty === 0))
{return false;}
else{
nex = novoxi+" "+novoyi+" "+novoxf+" "+novoyf;
i3GEO.navega.zoomExt(i3GEO.configura.locaplic,i3GEO.configura.sid,tipoimagem,nex);
return true;
}
},
/*
Localiza as coordenadas baseadas no número IP do usuário.
Parametros:
locaplic {String} - (opcional) endereço do i3geo utilizado na geração da URL para fazer a chamada AJAX
sid {String} - (opcional) código da seção aberta no servidor pelo i3geo
funcao {Function} - função que será executada ao concluir a chamada AJAX. Essa função receberá o objeto JSON obtido.
*/
localizaIP: function(locaplic,sid,funcao){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.localizaIP()");}
if(locaplic !== "")
{i3GEO.configura.locaplic = locaplic;}
if(sid !== "")
{i3GEO.configura.sid = sid;}
i3GEO.php.localizaIP(funcao);
},
/*
Mostra no mapa um ponto baseado na localização do usuário.
Parametros:
locaplic {String} - (opcional) endereço do i3geo utilizado na geração da URL para fazer a chamada AJAX
sid {String} - (opcional) código da seção aberta no servidor pelo i3geo
*/
zoomIP: function(locaplic,sid){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.zoomIP()");}
try
{
if(arguments.length > 0){
i3GEO.configura.locaplic = locaplic;
i3GEO.configura.sid = sid;
}
var mostraIP = function(retorno)
{
if (retorno.data.latitude !== null)
{i3GEO.navega.zoomponto(locaplic,sid,retorno.data.longitude,retorno.data.latitude);}
else
{i3GEO.janela.tempoMsg("Nao foi possivel identificar a localizacao.");}
};
i3GEO.navega.localizaIP(locaplic,sid,mostraIP);
}
catch(e){
if(typeof(console) !== 'undefined'){console.error(e);}
}
},
/*
Function: zoomExt
Aplica uma nova extensão geográfica ao mapa.
Parametros:
locaplic {String} - (opcional) endereço do i3geo utilizado na geração da URL para fazer a chamada AJAX
sid {String} - (opcional) código da seção aberta no servidor pelo i3geo
tipoimagem {String} - Utlize "" para aplicar o default. Tipo de imagem que será retornada na imagem do mapa que será criada
ext {String} - Extensão geográfica no formato xmin ymin xmax ymax
*/
zoomExt: function(locaplic,sid,tipoimagem,ext){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.zoomExt()");}
var f;
if(locaplic !== "")
{i3GEO.configura.locaplic = locaplic;}
if(sid !== "")
{i3GEO.configura.sid = sid;}
if(tipoimagem === "")
{tipoimagem = "nenhum";}
//verifica se nao e necessario alterar as coordenadas
ext = i3GEO.util.extGeo2OSM(ext);
f = "i3GEO.navega.timerNavega = null;"+
"i3GEO.php.mudaext(i3GEO.atualiza,'"+tipoimagem+"','"+ext+"');";
if(i3GEO.navega.timerNavega !== undefined)
{clearTimeout(i3GEO.navega.timerNavega);}
i3GEO.navega.timerNavega = setTimeout(f,i3GEO.navega.TEMPONAVEGAR);
},
/*
Function: aplicaEscala
Aplica ao mapa um novo valor de escala tendo como base o valor do denminador
Utilize "" caso vc queira usar locaplic e sid default.
Parametros:
locaplic {String} - endereço do i3geo utilizado na geração da URL para fazer a chamada AJAX. Pode ser ""
sid {String} - código da seção aberta no servidor pelo i3geo. pode ser ""
escala {Numeric} - denominador da escala
*/
aplicaEscala: function(locaplic,sid,escala){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.aplicaEscala()");}
//YAHOO.log("aplicaescala", "i3geo");
if(i3GEO.Interface.ATUAL === "googlemaps"){
i3GeoMap.setZoom(i3GEO.Interface.googlemaps.escala2nzoom(escala));
}
if(i3GEO.Interface.ATUAL === "openlayers"){
i3geoOL.zoomToScale(escala,true);
}
},
/*
Function: panFixo
Desloca o mapa para uma determinada direção com uma distância fixa.
Parametros:
locaplic {String} - (opcional) endereço do i3geo utilizado na geração da URL para fazer a chamada AJAX
sid {String} - (opcional) código da seção aberta no servidor pelo i3geo
direcao {String} - norte,sul,leste,oeste,sudeste,sudoeste,nordeste,noroeste
w {Numeric} - largura da imagem do mapa em pixels
h {Numeric} - altura da imagem do mapa em pixels
escala {Numeric} - escala do mapa
*/
panFixo: function(locaplic,sid,direcao,w,h,escala){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.panFixo()");}
//YAHOO.log("panfixo", "i3geo");
var x = 0,y = 0,f;
if(locaplic !== "")
{i3GEO.configura.locaplic = locaplic;}
if(sid !== "")
{i3GEO.configura.sid = sid;}
if(w === "")
{w = i3GEO.parametros.w;}
if(h === "")
{h = i3GEO.parametros.h;}
if(escala === "")
{escala = i3GEO.parametros.mapscale;}
switch(direcao)
{
case "norte":
y = h / 6;
x = w / 2;
break;
case "sul":
y = h - (h / 6);
x = w / 2;
break;
case "leste":
x = w - (w / 6);
y = h / 2;
break;
case "oeste":
x = w / 6;
y = h / 2;
break;
case "nordeste":
y = h / 6;
x = w - (w / 6);
break;
case "sudeste":
y = h - (h / 6);
x = w - (w / 6);
break;
case "noroeste":
y = h / 6;
x = w / 6;
break;
case "sudoeste":
y = h - (h / 6);
x = w / 6;
break;
}
if(i3GEO.Interface.ATUAL === "openlayers"){
i3geoOL.pan(x,y);
return;
}
f = "i3GEO.navega.timerNavega = null;"+
"i3GEO.php.pan(i3GEO.atualiza,"+escala+",'',"+x+","+y+");";
try
{clearTimeout(i3GEO.navega.timerNavega);}
catch(e){
if(typeof(console) !== 'undefined'){console.error(e);}
}
i3GEO.navega.timerNavega = setTimeout(f,i3GEO.navega.TEMPONAVEGAR);
},
/*
Function: panFixoNorte
Desloca o mapa para o norte
*/
panFixoNorte: function(){
i3GEO.navega.panFixo('','','norte','','','');
},
/*
Function: panFixoSul
Desloca o mapa para o sul
*/
panFixoSul: function(){
i3GEO.navega.panFixo('','','sul','','','');
},
/*
Function: panFixoOeste
Desloca o mapa para o oeste
*/
panFixoOeste: function(){
i3GEO.navega.panFixo('','','oeste','','','');
},
/*
Function: panFixoLeste
Desloca o mapa para o leste
*/
panFixoLeste: function(){
i3GEO.navega.panFixo('','','leste','','','');
},
/*
Function: mostraRosaDosVentos
Mostra sobre o mapa a rosa dos ventos.
A rosa permite que o usuário navegue no mapa sem ter de alterar a opção atual de navegação.
A rosa é mostrada apenas se a variável i3GEO.configura.mostraRosaDosVentos for = a "sim".
Para que a rosa seja mostrada, é necessário que esta função esteja registrada em
i3GEO.eventos.MOUSEPARADO
*/
mostraRosaDosVentos: function(){
var novoel,setas,i;
try{
if(i3GEO.configura.mostraRosaDosVentos === "nao")
{return;}
if(g_tipoacao === "area")
{return;}
}
catch(e){
if(typeof(console) !== 'undefined'){console.error(e);}
}
if(objposicaocursor.imgx < 10 || objposicaocursor.imgy < 10 || objposicaocursor.imgy > (i3GEO.parametros.h - 10))
{return;}
if (!$i("i3geo_rosa")){
novoel = document.createElement("div");
novoel.id = "i3geo_rosa";
novoel.style.position="absolute";
novoel.style.zIndex=5000;
if(navn)
{novoel.style.opacity=".7";}
else
{novoel.style.filter = "alpha(opacity=70)";}
document.body.appendChild(novoel);
}
setas = "";
setas += "
";
i = $i("i3geo_rosa");
i.innerHTML = setas;
i.style.top = objposicaocursor.telay - 27 + "px";
i.style.left = objposicaocursor.telax - 27 + "px";
i.style.display="block";
if($i("img")){
YAHOO.util.Event.addListener(
$i("img"),
"mousemove",
function(){
var i = $i("i3geo_rosa");
i.style.display="none";
YAHOO.util.Event.removeListener(escondeRosa);
}
);
}
i3GEO.ajuda.mostraJanela('Clique nas pontas da rosa para navegar no mapa. Clique em x para parar de mostrar essa opção.');
},
/*
Classe: i3GEO.navega.autoRedesenho
Controla o redesenho automático do mapa por meio de um temporizador
*/
autoRedesenho: {
/*
Propriedade: INTERVALO
Intervalo de tempo, em milisegundos, que será utilizado para disparar o desenho do mapa
Tipo:
{Integer}
Default:
{0}
*/
INTERVALO: 0,
/*
Guarda o valor do ID do elemento HTML que receberá o contador de tempo
Tipo:
{String}
*/
ID: "tempoRedesenho",
/*
Function: ativa
Ativa o auto-redesenho do mapa
Parametros:
id {String} - id do elemento onde o contador de tempo será mostrado no mapa. Por default, utiliza "tempoRedesenho".
*/
ativa: function(id){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.autoRedesenho.ativa()");}
if(arguments.length === 0)
{id = "tempoRedesenho";}
i3GEO.navega.autoRedesenho.ID = id;
if (($i(id)) && i3GEO.navega.autoRedesenho.INTERVALO > 0)
{$i(id).style.display = "block";}
if (i3GEO.navega.autoRedesenho.INTERVALO > 0)
{i3GEO.navega.tempoRedesenho = setTimeout('i3GEO.navega.autoRedesenho.redesenha()',i3GEO.navega.autoRedesenho.INTERVALO);}
if (($i(id)) && (i3GEO.navega.autoRedesenho.INTERVALO > 0)){
$i(id).innerHTML = i3GEO.navega.autoRedesenho.INTERVALO/1000;
i3GEO.navega.contaTempoRedesenho = setTimeout('i3GEO.navega.autoRedesenho.contagem()',1000);
}
},
/*
Function: desativa
Desativa o auto-redesenho do mapa
*/
desativa:function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.autoRedesenho.desativa()");}
i3GEO.navega.autoRedesenho.INTERVALO = 0;
clearTimeout(i3GEO.navega.tempoRedesenho);
clearTimeout(i3GEO.navega.contaTempoRedesenho);
i3GEO.navega.tempoRedesenho = "";
i3GEO.navega.contaTempoRedesenho = "";
if ($i(i3GEO.navega.autoRedesenho.ID))
{$i(i3GEO.navega.autoRedesenho.ID).style.display = "none";}
},
/*
Redesenha o mapa quando o contador de tempo chegar a zero
*/
redesenha: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.autoRedesenho.redesenha()");}
clearTimeout(i3GEO.navega.tempoRedesenho);
clearTimeout(i3GEO.navega.contaTempoRedesenho);
switch(i3GEO.Interface.ATUAL){
case "openlayers":
i3GEO.Interface.openlayers.atualizaMapa();
break;
case "googlemaps":
i3GEO.Interface.googlemaps.redesenha();
break;
default:
i3GEO.atualiza("");
}
i3GEO.navega.autoRedesenho.ativa(i3GEO.navega.autoRedesenho.ID);
},
/*
Faz a contagem do tempo
*/
contagem: function(){
if ($i(i3GEO.navega.autoRedesenho.ID))
{$i(i3GEO.navega.autoRedesenho.ID).innerHTML = parseInt($i(i3GEO.navega.autoRedesenho.ID).innerHTML,10) - 1;}
i3GEO.navega.contaTempoRedesenho = setTimeout('i3GEO.navega.autoRedesenho.contagem()',1000);
}
},
/*
Controla o desenho de um box na tela para executar o zoom por box
*/
zoomBox: {
boxxini: 0,
boxyini: 0,
/*
Marca o início do desenho do box, capturando a posição do mouse
*/
inicia: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.zoomBox.inicia()");}
if(i3GEO.navega.timerNavega !== null)
{return;}
if(g_tipoacao !== 'zoomli')
{return;}
if(!$i("i3geoboxZoom"))
{i3GEO.navega.zoomBox.criaBox();}
var i = $i("i3geoboxZoom").style;
i.width=0 + "px";
i.height=0 + "px";
i.visibility="visible";
i.display="block";
i.left = objposicaocursor.telax + "px";
i.top = objposicaocursor.telay + "px";
i3GEO.navega.boxxini = objposicaocursor.telax;
i3GEO.navega.boxyini = objposicaocursor.telay;
//tamanhox = 0;
//tamanhoy = 0;
if(i3GEO.eventos.MOUSEMOVE.toString().search("i3GEO.navega.zoomBox.desloca()") < 0)
{i3GEO.eventos.MOUSEMOVE.push("i3GEO.navega.zoomBox.desloca()");}
if(i3GEO.eventos.MOUSEUP.toString().search("i3GEO.navega.zoomBox.termina()") < 0)
{i3GEO.eventos.MOUSEUP.push("i3GEO.navega.zoomBox.termina()");}
},
/*
Cria o DIV que será utilizado para desenhar o box no mapa
*/
criaBox: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.zoomBox.criaBox()");}
if(i3GEO.navega.timerNavega !== null){return;}
if(!$i("i3geoboxZoom")){
var novoel;
novoel = document.createElement("div");
novoel.style.width = "0px";
novoel.style.height = "0px";
novoel.id = "i3geoboxZoom";
novoel.style.display = "none";
novoel.style.fontSize = "0px";
if(navn)
{novoel.style.opacity = 0.25;}
novoel.style.backgroundColor = "gray";
novoel.style.position="absolute";
novoel.style.border = "2px solid #ff0000";
if (navm)
{novoel.style.filter = "alpha(opacity=25)";}
novoel.onmousemove = function(){
var b,wb,hb;
b = $i("i3geoboxZoom").style;
wb = parseInt(b.width,10);
hb = parseInt(b.height,10);
if (navm){
if(wb > 2)
{b.width = wb - 2 + "px";}
if(hb > 2)
{b.height = hb - 2 + "px";}
}
else{
b.width = wb - 2 + "px";
b.height = hb - 2 + "px";
}
};
novoel.onmouseup = function()
{i3GEO.navega.zoomBox.termina();};
document.body.appendChild(novoel);
}
},
/*
Desloca o box conforme o mouse é movimentado
*/
desloca: function(){
var bxs,ppx,py,
boxxini = i3GEO.navega.boxxini,
boxyini = i3GEO.navega.boxyini;
if(i3GEO.navega.timerNavega !== null)
{return;}
if(g_tipoacao !== 'zoomli')
{return;}
bxs = $i("i3geoboxZoom").style;
if(bxs.display !== "block")
{return;}
ppx = objposicaocursor.telax;
py = objposicaocursor.telay;
if (navm){
if ((ppx > boxxini) && ((ppx - boxxini - 2) > 0))
{bxs.width = ppx - boxxini - 2 + "px";}
if ((py > boxyini) && ((py - boxyini - 2) > 0))
{bxs.height = py - boxyini - 2 + "px";}
if (ppx < boxxini)
{bxs.left = ppx;bxs.width = boxxini - ppx + 2 + "px";}
if (py < boxyini)
{bxs.top = py;bxs.height = boxyini - py + 2 + "px";}
}
else{
if (ppx > boxxini)
{bxs.width = ppx - boxxini + "px";}
if (py > boxyini)
{bxs.height = py - boxyini + "px";}
if (ppx < boxxini)
{bxs.left = ppx + "px";bxs.width = boxxini - ppx + "px";}
if (py < boxyini)
{bxs.top = py + "px";bxs.height = boxyini - py + "px";}
}
},
/*
Para o desenho do box, captura seu tamanho e faz o zoom no mapa
*/
termina: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.zoomBox.termina()");}
var valor,v,x1,y1,x2,y2,f,
limpa = function(){};
if(g_tipoacao !== 'zoomli'){
i3GEO.eventos.MOUSEDOWN.remove("i3GEO.navega.zoomBox.inicia()");
i3GEO.eventos.MOUSEUP.remove("i3GEO.navega.zoomBox.termina()");
return;
}
try{
if(i3GEO.navega.timerNavega !== null)
{return;}
valor = i3GEO.calculo.rect2ext("i3geoboxZoom",i3GEO.parametros.mapexten,i3GEO.parametros.pixelsize);
v = valor[0];
x1 = valor[1];
y1 = valor[2];
x2 = valor[3];
y2 = valor[4];
limpa = function(){
var bxs = $i("i3geoboxZoom");
if(bxs){
bxs.style.display="none";
bxs.style.visibility="hidden";
bxs.style.width = 0 + "px";
bxs.style.height = 0 + "px";
}
};
if((x1 === x2) || (y1 === y2))
{limpa.call();return;}
// se o retangulo for negativo pula essa parte para n� gerar erro
i3GEO.parametros.mapexten=v;
limpa.call();
i3GEO.eventos.MOUSEMOVE.remove("i3GEO.navega.zoomBox.desloca()");
i3GEO.eventos.MOUSEUP.remove("i3GEO.navega.zoomBox.termina()");
if(i3GEO.Interface.ATUAL === "googlemaps"){
i3GEO.Interface.googlemaps.zoom2extent(v);
return;
}
f = "i3GEO.navega.timerNavega = null;i3GEO.navega.zoomExt('"+i3GEO.configura.locaplic+"','"+i3GEO.configura.sid+"','"+i3GEO.configura.tipoimagem+"','"+v+"')";
if(i3GEO.navega.timerNavega !== undefined)
{clearTimeout(i3GEO.navega.timerNavega);}
i3GEO.navega.timerNavega = setTimeout(f,i3GEO.navega.TEMPONAVEGAR);
}
catch(e){limpa.call();return;}
}
},
/*
Classe: i3GEO.navega.lente
Ativa e controla a lente de aumento.
A lente de aumento é um box que pode ser ativado sobre o mapa
mostrando uma imagem ampliada da região onde está o mouse
*/
lente:{
/*
Propriedade: POSICAOX
Define a posição em x da lente em relação ao corpo do mapa
Tipo:
{numeric}
Default:
{0}
*/
POSICAOX: 0,
/*
Propriedade: POSICAOY
Define a posição em y da lente em relação ao corpo do mapa
Tipo:
{numeric}
Default:
{0}
*/
POSICAOY:0,
/*
Indica se a lente foi ou não aberta
*/
ESTAATIVA: "nao",
/*
Function: inicia
Ativa a lente de aumento criando os elementos gráficos
necessários e ativando os eventos que controlam a apresentação
da lente
*/
inicia: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.lente.inicia()");}
//insere lente de aumento
var novoel,novoimg,temp;
if (!$i("lente")){
novoel = document.createElement("div");
novoel.id = 'lente';
novoel.style.clip='rect(0px,0px,0px,0px)';
novoimg = document.createElement("img");
novoimg.src="";
novoimg.id='lenteimg';
novoel.appendChild(novoimg);
document.body.appendChild(novoel);
novoel = document.createElement("div");
novoel.id = 'boxlente';
document.body.appendChild(novoel);
}
temp = $i('boxlente').style;
temp.borderWidth = '1';
temp.borderColor = "red";
temp.display = "block";
$i("lente").style.display = "block";
i3GEO.navega.lente.ESTAATIVA = "sim";
i3GEO.navega.lente.atualiza();
if(i3GEO.eventos.NAVEGAMAPA.toString().search("i3GEO.navega.lente.atualiza()") < 0)
{i3GEO.eventos.NAVEGAMAPA.push("i3GEO.navega.lente.atualiza()");}
if(i3GEO.eventos.MOUSEMOVE.toString().search("i3GEO.navega.lente.movimenta()") < 0)
{i3GEO.eventos.MOUSEMOVE.push("i3GEO.navega.lente.movimenta()");}
},
/*
Atualiza a imagem da lente aberta
*/
atualiza: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.lente.atualiza()");}
var temp = function(retorno){
try{
var pos,volta,nimg,olente,oboxlente,olenteimg;
retorno = retorno.data;
if (retorno === "erro")
{i3GEO.janela.tempoMsg("A lente nao pode ser criada");return;}
volta = retorno.split(",");
nimg = volta[2];
olente = $i('lente');
oboxlente = $i('boxlente');
olenteimg = $i('lenteimg');
olenteimg.src = nimg;
olenteimg.style.width=volta[0] * 1.5 +"px";
olenteimg.style.height=volta[1] * 1.5 +"px";
olente.style.zIndex=1000;
olenteimg.style.zIndex=1000;
oboxlente.style.zIndex=1000;
pos = i3GEO.util.pegaPosicaoObjeto($i(i3GEO.Interface.IDMAPA));
olente.style.left = pos[0] + i3GEO.navega.lente.POSICAOX + "px";
olente.style.top = pos[1] + i3GEO.navega.lente.POSICAOY + "px";
oboxlente.style.left = pos[0] + i3GEO.navega.lente.POSICAOX + "px";
oboxlente.style.top = pos[1] + i3GEO.navega.lente.POSICAOY + "px";
oboxlente.style.display='block';
oboxlente.style.visibility='visible';
olente.style.display='block';
olente.style.visibility='visible';
i3GEO.janela.fechaAguarde("ajaxabrelente");
}
catch(e){
i3GEO.janela.fechaAguarde();
if(typeof(console) !== 'undefined'){console.error(e);}
}
};
if(i3GEO.navega.lente.ESTAATIVA === "sim"){
i3GEO.php.aplicaResolucao(temp,1.5);
}
else{
i3GEO.navega.lente.desativa();
}
},
/*
Function: desativa
Desativa a lente aberta
*/
desativa: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.lente.desativa()");}
$i("lente").style.display = "none";
$i("boxlente").style.display = "none";
$i('boxlente').style.borderWidth = 0;
i3GEO.navega.lente.ESTAATIVA = "nao";
i3GEO.eventos.MOUSEMOVE.remove("i3GEO.navega.lente.movimenta()");
i3GEO.eventos.NAVEGAMAPA.remove("i3GEO.navega.lente.atualiza()");
},
/*
Movimenta a imagem dentro da lente para refletir a posição do mouse
*/
movimenta: function(){
try{
if(i3GEO.navega.lente.ESTAATIVA === "sim"){
var pos = [0,0],
esq,topo,clipt,i;
if ($i("lente").style.visibility === "visible")
{pos = i3GEO.util.pegaPosicaoObjeto($i(i3GEO.Interface.IDMAPA));}
esq = (objposicaocursor.telax - pos[0]) * 2.25;
topo = (objposicaocursor.telay - pos[1]) * 2.25;
clipt = "rect("+ (topo - 120) + "px " + (esq + 120) + "px " + (topo + 120) + "px " + (esq - 120) +"px)";
i = $i("lente").style;
i.clip = clipt;
i.top = pos[1] - (topo - 120) + "px";
i.left = pos[0] - (esq - 120) + "px";
//eval("i." + g_tipotop + "= (pos[1] - (topo - 40))");
//eval("i." + g_tipoleft + "= (pos[0] - (esq - 40)");
}
}
catch(e){
if(typeof(console) !== 'undefined'){console.error(e);}
}
}
},
/*
Classe: i3GEO.navega.destacaTema
Destaca um tema mostrando-o sobre os outros em um box que segue o mouse
*/
destacaTema:{
/*
Propriedade: TAMANHO
Tamanho do box
Tipo:
{Integer}
Default:
{75}
*/
TAMANHO: 75,
/*
Tipo:
{sim|nao}
*/
ESTAATIVO: "nao",
/*
Tipo:
{Código do tema}
*/
TEMA: "",
/*
Function: inicia
Inicia o destaque de um tema
Parametros:
tema {String} - código do tema
*/
inicia: function(tema){
if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.destacaTema.inicia()");}
var novoel,novoeli,janela,pos;
if (!$i("img_d")){
pos = i3GEO.util.pegaPosicaoObjeto($i(i3GEO.Interface.IDMAPA));
novoel = document.createElement("div");
novoel.id = "div_d";
novoel.style.zIndex = 5000;
document.body.appendChild(novoel);
$i("div_d").innerHTML = "";
$i("div_d").style.left = parseInt(pos[0],10) + "px";
$i("div_d").style.top = parseInt(pos[1],10) + "px";
$i("img_d").style.left = 0 + "px";
$i("img_d").style.top = 0 + "px";
$i("img_d").style.width = i3GEO.parametros.w + "px";
$i("img_d").style.height = i3GEO.parametros.h + "px";
$i("div_d").style.clip = 'rect(0px 75px 75px 0px)';
novoeli = document.createElement("div");
novoeli.id = "div_di";
novoel.appendChild(novoeli);
$i("div_di").innerHTML = "x ";
setas += " ";
setas += "";
setas += " ";
setas += " ";
setas += "";
setas += " ";
setas += "";
setas += " ";
setas += " ";
setas += " ";
setas += " ";
setas += "
+-
"; } i3GEO.navega.destacaTema.TEMA = tema; i3GEO.navega.destacaTema.ESTAATIVO = "sim"; i3GEO.navega.destacaTema.atualiza(); janela = i3GEO.janela.cria(160,50,"","center","center",$trad("x50")+" ","ativadesativaDestaque"); $i(janela[2].id).innerHTML = $trad("x91"); YAHOO.util.Event.addListener(janela[0].close, "click", i3GEO.navega.destacaTema.desativa); if(i3GEO.eventos.NAVEGAMAPA.toString().search("i3GEO.navega.destacaTema.atualiza()") < 0) {i3GEO.eventos.NAVEGAMAPA.push("i3GEO.navega.destacaTema.atualiza()");} if(i3GEO.eventos.MOUSEMOVE.toString().search("i3GEO.navega.destacaTema.movimenta()") < 0) {i3GEO.eventos.MOUSEMOVE.push("i3GEO.navega.destacaTema.movimenta()");} }, /* Atualiza o destaque É definido para o evento de navegação do mapa */ atualiza: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.destacaTema.atualiza()");} if(i3GEO.navega.destacaTema.ESTAATIVO === "nao") {return;} var temp = function(retorno){ var m,novoel; retorno = retorno.data; m = new Image(); m.src = retorno; $i("div_d").innerHTML = ""; $i("div_d").style.display="block"; novoel = document.createElement("input"); novoel.id = "img_d"; novoel.style.position = "relative"; novoel.style.top = "0px"; novoel.style.left = "0px"; novoel.type = "image"; novoel.src = m.src; novoel.style.display = "block"; $i("div_d").appendChild(novoel); i3GEO.janela.fechaAguarde("ajaxdestaca"); }; i3GEO.php.geradestaque(temp,i3GEO.navega.destacaTema.TEMA,i3GEO.parametros.mapexten); }, /* Function: desativa Desativa o destaque */ desativa: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.destacaTema.desativa()");} i3GEO.eventos.NAVEGAMAPA.remove("i3GEO.navega.destacaTema.atualiza()"); i3GEO.eventos.MOUSEMOVE.push("i3GEO.navega.destacaTema.movimenta()"); i3GEO.navega.destacaTema.ESTAATIVO = "nao"; document.body.removeChild($i("div_d")); }, /* Movimenta o destaque conforme o mouse move É definido para o evento de deslocamento do mouse */ movimenta: function(){ if(i3GEO.navega.destacaTema.ESTAATIVO === "sim") {$i("div_d").style.clip = 'rect('+(objposicaocursor.imgy - i3GEO.navega.destacaTema.TAMANHO)+"px "+(objposicaocursor.imgx - 10)+"px "+(objposicaocursor.imgy - 10)+"px "+(objposicaocursor.imgx - i3GEO.navega.destacaTema.TAMANHO)+'px)';} } }, /* Controla a barra (slide) de zoom */ barraDeZoom: { /* Cria os elementos HTML para a barra de zoom Return: {string} - código html */ cria: function(){ if(typeof(console) !== 'undefined'){console.info("i3GEO.navega.barraDeZoom.cria()");} var temp = "",estilo; if (navn) {temp += '