/*jslint plusplus:false,white:false,undef: false, rhino: true, onevar: true, evil: true */
/*
Title: Utilitários
Arquivo:
i3geo/classesjs/classe_util.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 = [];
}
/*
Propriedade: navm
Verdadeiro (true) se o navegador for o Internet Explorer
Tipo:
{boolean}
Default:
{false}
*/
navm = false;
/*
Propriedade: navn
Verdadeiro (true) se o navegador for o Firefox
Tipo:
{boolean}
Default:
{false}
*/
navn = false;
/*
Propriedade: chro
Verdadeiro (true) se o navegador for o Chrome
Tipo:
{boolean}
Default:
{false}
*/
chro = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
/*
Propriedade: opera
Verdadeiro (true) se o navegador for o Opera
Tipo:
{boolean}
Default:
{false}
*/
opera = navigator.userAgent.toLowerCase().indexOf('opera') > -1;
var app = navigator.appName.substring(0,1);
if (app==='N'){navn=true;}
if (app==='M'){navm=true;}
if(opera == true)
{navn = true;}
/*
Variavel: g_operacao
Nome da última operação que foi executada.
Dependendo do tipo de operação são aplicadas as atualizações necessárias aos componentes do mapa. Por exemplo, redesenha o corpo do mapa, atualiza a lista de temas, etc.
Essas operações são controladas pela função ajaxiniciaparametros.
*/
g_operacao = "";
/*
Variavel: g_tipoacao
Tipo de ação que está sendo executada.
Quando o usuário clica no mapa, essa variável é pesquisada para definir o tipo de operação que deve ser executada.
É definida quando o usuário seleciona uma determinada ferramenta do i3Geo.
*/
g_tipoacao = "zoomli";
g_postpx = "px";
g_tipotop = "top";
g_tipoleft = "left";
if (navm)
{
g_postpx = ""; //utilizado para crossbrowser
g_tipotop = "pixelTop"; //utilizado para crossbrowser
g_tipoleft = "pixelLeft"; //utilizado para crossbrowser
}
/*
Function: $i
Obtém um elemento DOM a partir de seu id
Parametros:
id - {String} ID do elemento.
Returns:
{Object} Objeto.
*/
$i = function(id)
{return document.getElementById(id);};
/*
Function: Array.remove()
Extende os métodos de um objeto Array, permitindo remover um elemento.
*/
Array.prototype.remove=function(s){
try{
var i = this.indexOf(s);
if(i !== -1){this.splice(i, 1);}
}catch(e){}
};
/*
Classe: i3GEO.util
Utilitários.
*/
i3GEO.util = {
/*
Variavel: PINS
Elementos IMG criados na função criaPin
Tipo:
{Array}
*/
PINS: [],
/*
Variavel:BOXES
Elementos DIV criados na função criaBox
Tipo:
{Array}
*/
BOXES: [],
/*
Function: escapeURL
Converte uma string em uma url válida
Parametros:
sUrl {String} - url que será convertida
Return:
Tipo:
{String}
*/
escapeURL: function(sUrl){
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.escapeURL()");}
var re;
sUrl = escape(sUrl);
re = new RegExp("%3F", "g");
sUrl = sUrl.replace(re,'?');
re = new RegExp("%3D", "g");
sUrl = sUrl.replace(re,'=');
re = new RegExp("%26", "g");
sUrl = sUrl.replace(re,'&');
return sUrl;
},
/*
Function: insereCookie
Cria um novo cookie.
Parametros:
nome - {String} Nome do cookie.
valor - (String) Valor do cookie
*/
insereCookie: function(nome,valor) {
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.insereCookie()");}
document.cookie = nome+"="+valor+";path=/";
},
/*
Function: pegaCookie
Pega o valor de um cookie.
Parametros:
nome - {String} Nome do cookie.
Returns:
(String) - valor do cookie
*/
pegaCookie: function(nome){
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.pegaCookie()");}
var cookies,i,fim;
cookies = document.cookie;
i = cookies.indexOf(nome);
if(i === -1)
{return null;}
fim = cookies.indexOf(";",i);
if (fim === -1)
{fim = cookies.length;}
return (unescape(cookies.substring(i,fim))).split("=")[1];
},
/*
Function: listaChaves
Lista as chaves de um objeto.
Parametros:
obj - {Object}
Return:
(Array) - array com as chaves.
*/
listaChaves: function (obj) {
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.listaChaves()");}
var keys,key;
keys = [];
for(key in obj){
if(obj[key])
{keys.push(key);}
}
return keys;
},
/*
Function: criaBotaoAplicar
Cria um botão flutuante do tipo aplicar.
O novo botão é adicionado no DOM com ID "i3geo_aplicar" e posicionado sobre o objeto definido
Parametros:
nomeFuncao - {String} Nome da função que será executada quando o botão for cllicado
titulo - (opcional) {String} Título que será mostrado no botão
classe - (opcional) {String} Nome da classe (estilo) que será aplicado ao botão.
obj - (opcional) {Objeto} Objeto DOM que foi clicado para provocar a criação do botão.
Return:
(Object) - Objeto DOM criado.
*/
criaBotaoAplicar: function (nomeFuncao,titulo,classe,obj) {
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.criaBotaoAplicar()");}
try
{clearTimeout(tempoBotaoAplicar);}
catch(e){
if(typeof(console) !== 'undefined'){console.error(e);}
}
var novoel,xy;
tempoBotaoAplicar = eval("setTimeout('"+nomeFuncao+"\(\)',(i3GEO.configura.tempoAplicar))");
autoRedesenho("reinicia");
if(arguments.length === 1)
{titulo = "Aplicar";}
if(arguments.length === 1 || arguments.length === 2)
{classe = "i3geoBotaoAplicar";}
if (!document.getElementById("i3geo_aplicar"))
{
novoel = document.createElement("input");
novoel.id = 'i3geo_aplicar';
novoel.type = 'button';
novoel.value = titulo;
novoel.style.cursor="pointer";
novoel.style.fontSize="10px";
novoel.style.zIndex = 15000;
novoel.style.position="absolute";
novoel.style.display="none";
novoel.onmouseover = function(){this.style.display="block";};
novoel.onmouseout = function(){this.style.display="none";};
novoel.className = classe;
document.body.appendChild(novoel);
}
else
{novoel = document.getElementById("i3geo_aplicar");}
novoel.onclick = function(){
clearTimeout(i3GEO.parametros.tempo);
i3GEO.parametros.tempo = "";
this.style.display='none';
eval(nomeFuncao+"\(\)");
};
//reposiciona o botao
if(arguments.length === 4){
novoel.style.display="block";
xy = YAHOO.util.Dom.getXY(obj);
YAHOO.util.Dom.setXY(novoel,xy);
}
return (novoel);
},
/*
Function: arvore
Cria uma árvore com base em um objeto contendo aspropriedades.
No objeto com as propriedades, se "url" for igual a "", será incluído o texto original definido em "text".
Caso contrário, o valor de "text" será traduzido com $trad(). Nesse caso, utilize em "text" o código definido em dicionario.js
Parametros:
titulo - {String} cabeçaljo da árvore
onde - {String} nome do id doelemento que conterá a árvore
obj - {Object} objeto contendo os parâmetros, exemplo
g_listaPropriedades = {
"propriedades": [
{ text: "p2", url: "javascript:tipoimagem()" }
]}
*/
arvore: function(titulo,onde,obj){
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.arvore()");}
//YAHOO.log("arvore", "i3geo");
var arvore,root,tempNode,currentIconMode,d,c,i,linha,conteudo;
if(!$i(onde)){return;}
try{
arvore = new YAHOO.widget.TreeView(onde);
root = arvore.getRoot();
tempNode = new YAHOO.widget.TextNode('', root, false);
tempNode.isLeaf = false;
tempNode.enableHighlight = false;
}
catch(e){
if(typeof(console) !== 'undefined'){console.error(e);}
}
titulo = "
"+titulo+"
";
d = {html:titulo};
tempNode = new YAHOO.widget.HTMLNode(d, root, true,true);
tempNode.enableHighlight = false;
c = obj.propriedades.length;
for (i=0, j=c; i"+$trad(linha.text)+"";}
else
{conteudo = linha.text;}
d = {html:conteudo};
temaNode = new YAHOO.widget.HTMLNode(d, tempNode, false,true);
temaNode.enableHighlight = false;
}
arvore.collapseAll();
arvore.draw();
//YAHOO.log("Fim arvore", "i3geo");
},
/*
Function: removeAcentos
Remove acentos de uma palavra ou frase
Parametros:
palavra {String}
Return:
{String}
*/
removeAcentos: function(palavra) {
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.removeAcentos()");}
var re;
re = /ã|á|à|â/gi;
palavra = palavra.replace(re,"a");
re = /é|ê/gi;
palavra = palavra.replace(re,"e");
re = /í/gi;
palavra = palavra.replace(re,"i");
re = /ó|õ|ô/gi;
palavra = palavra.replace(re,"o");
re = /ç/gi;
palavra = palavra.replace(re,"c");
re = /ú/gi;
palavra = palavra.replace(re,"u");
return(palavra);
},
/*
Function: protocolo
Obtém o protocolo utilizado na URL atual
Return:
{String} - protocolo
*/
protocolo: function(){
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.protocolo()");}
var u = window.location.href;
u = u.split(":");
return (u[0]);
},
/*
Function: pegaPosicaoObjeto
Retorna a posição x,y de um objeto em relação a tela do navegador
Parametros:
obj {Object} - objeto dom
Return:
{Array} - array com a posição [x,y]
*/
pegaPosicaoObjeto: function(obj){
if(obj)
{
if(!obj.style)
{return [0,0];}
var curleft = 0,curtop = 0,teste;
if(obj){
if (obj.offsetParent) {
do {
curleft += obj.offsetLeft-obj.scrollLeft;
curtop += obj.offsetTop-obj.scrollTop;
//$i("posicaoDomouse").innerHTML = obj.id+" "+curleft;
obj = obj.offsetParent;
} while (obj);
}
}
return [curleft+document.body.scrollLeft,curtop+document.body.scrollTop];
}
else
{return [0,0];}
},
/*
Function: pegaElementoPai
Pega o elemento pai de um elemento clicado para identificar o código do tema.
Parametros:
e - elemento do DOM.
Return:
{Node} - objeto DOM
*/
pegaElementoPai: function(e){
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.pegaElementoPai()");}
var targ;
if (!e)
{e = window.event;}
if (e.target)
{targ = e.target;}
else
if (e.srcElement)
{targ = e.srcElement;}
if (targ.nodeType === 3)
{targ = targ.parentNode;}
tparent=targ.parentNode;
return(tparent);
},
/*
Function: mudaCursor
Altera o cursor do ponteiro do mouse.
Os cursores disponíveis são definidos por default em classe_configura.js
Parametros:
cursores {i3GEO.configura.cursores} - objeto JSON com as URIs de cada cursor (veja i3GEO.configura.cursores)
tipo {String} - tipo de cursor disponível em cursores
idobjeto {String} - id do objeto que terá o estilo alterado para o cursor desejado
locaplic {String} - onde está instalado o i3Geo
*/
mudaCursor: function(cursores,tipo,idobjeto,locaplic){
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.mudaCursor("+idobjeto+")");}
var os = [],
o,
i,
c,
n,
layers,
cursor="",
ext = ".ff";
//
//no caso da interface openlayers, o cursor deve ser definido no estilo
//do elemento img de cada TILE de cada LAYER
//para achar os img faz-se a busca pela classe css utilizada pelo OpenLayers nos img desse tipo
//
try{
if(navm)
{ext = ".ie";}
os.push(document.getElementById(idobjeto));
if(i3GEO.Interface.ATUAL === "openlayers"){
os = YAHOO.util.Dom.getElementsByClassName('olTileImage', 'img');
}
if(i3GEO.Interface.ATUAL === "googlemaps"){
os = document.getElementById(idobjeto).firstChild;
os = os.getElementsByTagName("div");
}
n = os.length;
if(tipo === "default" || tipo === "pointer" || tipo === "crosshair" || tipo === "help" || tipo === "move" || tipo === "text")
{cursor = tipo;}
else
{c = eval("cursores."+tipo+ext);}
//testa novamente
if(c === "default" || c === "pointer" || c === "crosshair" || c === "help" || c === "move" || c === "text")
{cursor = c;}
if(cursor == "")
{cursor = "URL(\""+locaplic+eval("cursores."+tipo+ext)+"\"),auto";}
for(i=0;i";
},
$inputTextMudaCor: function(obj){
var n = obj.value.split(" ");
obj.style.color = "rgb("+n[0]+","+n[1]+","+n[2]+")";
},
/*
Function: $top ou nome curto $top
Muda a posição (superior) de um objeto tanto no IE como no Firefox.
Exemplo: $top("imagem",100)
Parametros:
id - identificador do objeto
valor - posição em relação ao topo.
*/
$top: function(id,valor){
if (document.getElementById(id).style){
if (document.getElementById(id).style.pixelTop)
{document.getElementById(id).style.pixelTop=valor;}
else
{document.getElementById(id).style.top=valor+"px";}
}
},
/*
Function: $left ou nome curto $left
Muda a posição (esquerda) de um objeto tanto no IE como no Firefox.
Exemplo: $left("imagem",100)
Parametros:
id - identificador do objeto
valor - posição em relação a esquerda.
*/
$left: function(id,valor){
if (document.getElementById(id).style){
if (document.getElementById(id).style.pixelLeft)
{document.getElementById(id).style.pixelLeft=valor;}
else
{document.getElementById(id).style.left=valor+"px";}
}
},
/*
Function: insereMarca
Insere ou remove pontos no mapa.
*/
insereMarca:{
/*
Armazena o valor do ID do div criado para inserir pontos
Tipo:
{Array}
*/
CONTAINER: [],
/*
Function: cria
Insere um ponto no mapa
Os pontos são inseridos em um contaier de pontos e mostrados temporáriamente
Parametros:
xi {Numeric} - coordenada x no mapa.
yi {Numeric} - coordenada y no mapa.
funcaoOnclick {String} - funcao que sera executada quando a marca
for clicada, se for "", o container será esvaziado ao ser clicado na marca
container {String} - id do container que receberá os pontos. Se não existir um elemento com esse ID, será criado um novo DIV. No caso da interface google Earth, é utilizado na definição do nome da marca (setname).
texto {String} - (apenas para interface Google Earth) nome que será adicionado junto da marca
srci {string} - (opcional) endereço da imagem (será incluido em SRC do tag IMG)
*/
cria:function(xi,yi,funcaoOnclick,container,texto,srci){
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.insereMarca.cria()");}
if(!srci)
{srci = i3GEO.configura.locaplic+"/imagens/dot2.gif";}
if(i3GEO.Interface.ATUAL === "googleearth"){
i3GEO.Interface.googleearth.insereMarca(texto,xi,yi,container);
return;
}
try{
var novoel,i,novoimg,temp;
if(i3GEO.util.insereMarca.CONTAINER.toString().search(container) < 0)
{i3GEO.util.insereMarca.CONTAINER.push(container);}
//verifica se existe o container para os pontos
if (!$i(container)){
novoel = document.createElement("div");
novoel.id = container;
i = novoel.style;
i.position = "absolute";
if($i(i3GEO.Interface.IDCORPO)){
i.top = parseInt($i(i3GEO.Interface.IDCORPO).style.top,10);
i.left = parseInt($i(i3GEO.Interface.IDCORPO).style.left,10);
}
else{
i.top = parseInt($i(i3GEO.Interface.IDMAPA).style.top,10);
i.left = parseInt($i(i3GEO.Interface.IDMAPA).style.left,10);
}
document.body.appendChild(novoel);
}
container = $i(container);
novoel = document.createElement("div");
i = novoel.style;
i.position = "absolute";
i.zIndex=2000;
i.top=(yi - 2)+"px";
i.left=(xi - 2)+"px";
i.width="5px";
i.height="5px";
novoimg = document.createElement("img");
if (funcaoOnclick !== "")
{novoimg.onclick = funcaoOnclick;}
else
{novoimg.onclick=function(){i3GEO.util.insereMarca.limpa();};}
novoimg.src=srci;
temp = novoimg.style;
temp.width="5px";
temp.height="5px";
temp.zIndex=2000;
novoel.appendChild(novoimg);
container.appendChild(novoel);
if(i3GEO.eventos.NAVEGAMAPA.toString().search("i3GEO.util.insereMarca.limpa()") < 0)
{i3GEO.eventos.NAVEGAMAPA.push("i3GEO.util.insereMarca.limpa()");}
}
catch(e){alert("Ocorreu um erro. inseremarca"+e);}
},
limpa: function(){
try{
var n,i;
n = i3GEO.util.insereMarca.CONTAINER.length;
for(i=0;i';
ins += "";
ins += texto;
ins += '
';
if(wsrc !== "")
{ins += '';}
ins += '
';
novoel = document.createElement("div");
novoel.id = "i3geo_janelaCor";
novoel.style.display="block";
novoel.innerHTML = ins;
if($i("i3geo"))
{$i("i3geo").appendChild(novoel);}
else
{document.body.appendChild(novoel);}
wdocaiframe = $i("i3geo_janelaCori");
if (wdocaiframe)
{
wdocaiframe.style.display = "block";
wdocaiframe.src = wsrc;
wdocaiframe.style.height = "250px";
wdocaiframe.style.width = "325px";
wdocaiframe.style.border = "0px solid white";
}
if(nx === "" || nx === "center"){fix = true;}
YAHOO.janelaCor.xp.panel = new YAHOO.widget.ResizePanel(id, { height:"300px",zIndex:5000, modal:modal, width: "350px", fixedcenter: fix, constraintoviewport: false, visible: true, iframe:false} );
YAHOO.janelaCor.xp.panel.render();
$i(id+'_cabecalho').className = classe;
},
/*
Function: ajaxhttp
Cria o objeto XMLHttpRequest para uso com funções próprias de chamada em ajax
O uso dessa função não é recomendado. Dê preferência para uso da chamada ajax via YUI
Return:
{XMLHttpRequest}
*/
ajaxhttp: function(){
var objhttp1;
try
{objhttp1 = new XMLHttpRequest();}
catch(ee){
try{objhttp1 = new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){
try{objhttp1 = new ActiveXObject("Microsoft.XMLHTTP");}
catch(E)
{objhttp1 = false;}
}
}
return(objhttp1);
},
/*
Function: ajaxexecASXml
Executa uma chamada ajax no modo assíncrono retornando o resultado em XML.
Parametros:
programa {String} - URL do programa que será executado no servidor.
funcao {funcao} - função que tratará o resultado.
Returns:
O resultado em um objeto DOM. Se o retorno contiver a palavra "Erro", é gerado um alert.
*/
ajaxexecASXml: function(programa,funcao){
var h,ohttp,retorno;
if (programa.search("http") === 0){
h = window.location.host;
if (programa.search(h) < 0){
alert("OOps! Nao e possivel chamar um XML de outro host.\nContacte o administrador do sistema.\nConfigure corretamente o ms_configura.php");
return;
}
}
ohttp = i3GEO.util.ajaxhttp();
ohttp.open("GET",programa,true);
retorno = "";
ohttp.onreadystatechange=function(){
var retorno,parser,dom;
if (ohttp.readyState === 4){
retorno = ohttp.responseText;
if (retorno !== undefined){
if (document.implementation.createDocument){
parser = new DOMParser();
dom = parser.parseFromString(retorno, "text/xml");
}
else{
dom = new ActiveXObject("Microsoft.XMLDOM");
dom.async="false";
dom.load(programa);
}
}
else
{dom = "erro";}
if (funcao !== "volta")
{eval(funcao+'(dom)');}
else
{return dom;}
}
};
ohttp.send(null);
},
/*
Function: aparece
Aplica efeito de aparecimento suave de um objetov
Parametros:
id {String} - id do objeto
tempo {Integer} - tempo em milesegundos que levará o efeito
intervalo {Integer} - intervalo entre uma imagem e outra
*/
aparece: function(id,tempo,intervalo){
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.aparece("+id+")");}
var n,obj,opacidade,fadei,tempoFadei;
n = parseInt(tempo / intervalo,10);
obj = $i(id);
if(n === 1){
obj.style.display = "block";
if (navm)
{obj.style.filter='alpha(opacity=100)';}
else
{obj.style.opacity= 1;}
}
tempo = n * intervalo;
intervalo = (intervalo * 100) / tempo;
opacidade = 0;
if (navm)
{obj.style.filter='alpha(opacity=0)';}
else
{obj.style.opacity= 0;}
obj.style.display = "block";
fadei = function(){
opacidade += intervalo;
if (navm)
{obj.style.filter='alpha(opacity='+opacidade+')';}
else
{obj.style.opacity= opacidade/100;}
if(opacidade < 100)
{tempoFadei = setTimeout(fadei, tempo);}
else{
clearTimeout(tempoFadei);
if (navm)
{obj.style.filter='alpha(opacity=100)';}
else
{obj.style.opacity= 1;}
}
};
tempoFadei = setTimeout(fadei, tempo);
},
/*
Function: desaparece
Aplica efeito de desaparecimento suave de um objeto
Parametros:
id {String} - id do objeto
tempo {Integer} - tempo em milesegundos que levará o efeito
intervalo {Integer} - intervalo entre uma imagem e outra
removeobj {Boolean} - remove ou não o objeto no final
*/
desaparece: function(id,tempo,intervalo,removeobj){
var n,obj,opacidade,fade,p,tempoFade;
n = parseInt(tempo / intervalo,10);
obj = $i(id);
if(n === 1){
obj.style.display = "none";
if(removeobj){
p = obj.parentNode;
if(p)
{p.removeChild(obj);}
}
return;
}
tempo = n * intervalo;
intervalo = (intervalo * 100) / tempo;
opacidade = 100;
if (navm)
{obj.style.filter='alpha(opacity=100)';}
else
{obj.style.opacity= 1;}
obj.style.display = "block";
fade = function(){
opacidade -= intervalo;
if (navm)
{obj.style.filter='alpha(opacity='+opacidade+')';}
else
{obj.style.opacity= opacidade/100;}
if(opacidade > 0){
tempoFade = setTimeout(fade, tempo);
}
else{
clearTimeout(tempoFade);
obj.style.display = "none";
if (navm)
{obj.style.filter='alpha(opacity=100)';}
else
{obj.style.opacity= 1;}
if(removeobj){
p = obj.parentNode;
if(p)
{p.removeChild(obj);}
}
}
};
tempoFade = setTimeout(fade, tempo);
},
/*
Function: wkt2ext
Calcula a extensão geográfica de uma geometria fornecida no formato WKT
Parametros:
wkt {String} - geometria no formato wkt
tipo {String} - tipo de geometria (polygon,point,line)
Return:
{String} - extensão geográfica (xmin ymin xmax ymax)
*/
wkt2ext:function(wkt,tipo){
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.wkt2ext()");}
var re,x,y,w,xMin,xMax,yMin,yMax,temp;
tipo = tipo.toLowerCase();
ext = false;
if(tipo === "polygon"){
try{
re = new RegExp("POLYGON", "g");
wkt = wkt.replace(re,"");
wkt = wkt.split("(")[2].split(")")[0];
wkt = wkt.split(",");
x = [];
y = [];
for (w=0;w';
ins += '
';
if (texto === "")
{texto = $i(onde).innerHTML;}
ins += texto;
ins += '
';
if (onde !== "")
{$i(onde).innerHTML = ins;}
else
{return(ins);}
},
/*
Function: randomRGB
Gera uma cor RGB de forma aleatória
Return:
{String} - r,g,b
*/
randomRGB: function(){
var v = Math.random(),
r = parseInt(255*v,10),
g;
v = Math.random();
g = parseInt(255*v,10);
v = Math.random();
b = parseInt(255*v,10);
return (r+","+g+","+b);
},
/*
Function: rgb2hex
Converte uma cor RGB para HEX
Parametro:
str {String} - r,g,b
Return:
{String}
*/
rgb2hex: function(str) {
var rgb = str.split(",");
function hex(x) {
var hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8","9", "A", "B", "C", "D", "E", "F"];
return hexDigits[(x - x % 16) / 16] + hexDigits[x% 16];
};
return "#" + hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
},
/*
Function: comboTemas
Cria um combo (caixa de seleção) com a lista de temas existentes no mapa e de determinado tipo
Parametros:
id {String} - id do elemento select que será criado
funcao {Function} - função que será executada ao terminar a montagem do combo. Essa função receberá
como parâmetros um Array associativo contendo os dados em HTML gerados e o tipo de resultado. P.ex.:
{dados:comboTemas,tipo:"dados"}
tipo será uma string que pode ser "dados"|"mensagem"|"erro" indicando o tipo de retorno.
onde {String} - id do elemento HTML que receberá o combo. É utilizado apenas para inserir uma mensagem de aguarde.
nome {String} - valor que será incluido no parametro "name" do elemento "select".
multiplo {Booleano} - indica se o combo permite seleções múltiplas
tipoCombo {String} - Tipo de temas que serão incluídos no combo ligados|selecionados|raster|pontosSelecionados|pontos|linhaDoTempo
*/
comboTemas: function(id,funcao,onde,nome,multiplo,tipoCombo){
if(typeof(console) !== 'undefined'){console.info("i3GEO.util.comboTemas()");}
if (arguments.length > 2)
{$i(onde).innerHTML="buscando temas...";}
if (arguments.length === 3)
{nome = "";}
if (arguments.length < 5)
{multiplo = false;}
var monta, lista, temp;
monta = function(retorno){
var i,comboTemas,temp,n,nome;
if (retorno !== undefined)
{
if(retorno.data)
{retorno = retorno.data;}
n = retorno.length;
if (n > 0)
{
if(multiplo)
{comboTemas = "