/* Cliente de web services Classe javascript da aplicação de consulta de web services. Lê o conjunto de javascripts para o funcionamento da interface wscliente.htm Arquivo: i3geo/classesjs/wscliente.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. Veja: */ (function(){ var scriptLocation = ""; var scripts = document.getElementsByTagName('script'); for (var i = 0; i < scripts.length; i++) { var src = scripts[i].getAttribute('src'); if (src) { var index = src.lastIndexOf("wscliente.js"); // is it found, at the end of the URL? if ((index > -1) && (index + "wscliente.js".length == src.length)) { scriptLocation = src.slice(0, -"wscliente.js".length); break; } } } var allScriptTags = ""; var jsfiles = []; if(typeof(testafuncoes) == 'undefined') {jsfiles[0] = "compactados/classe_calculo_compacto.js";} if(typeof(cpaint) == 'undefined') {jsfiles[1] = "../pacotes/cpaint/cpaint2.inc.compressed.js";} if(typeof(OpenLayers) == 'undefined') {jsfiles[2] = "../pacotes/openlayers/OpenLayers.js";}; for (var i = 0; i < jsfiles.length; i++) { var currentScriptTag = ""; allScriptTags += currentScriptTag; } document.write(allScriptTags); })(); /* Cria o objeto javascript com os parāmetros de configuração da api e com as funções de manipulação dos elementos da interface. Example: var i3geo_wscliente_configura = new i3geo_wscliente_configura ( g_locaplic, "corpo", "enderecows", "enderecowms", new Array("http://mapas.mma.gov.br/i3geo/menutemas/servicosws.xml"), new Array("http://mapas.mma.gov.br/i3geo/menutemas/servicoswms.php") ) Parametros: loc_i3geo - endereço web onde está instalado o i3geo. corpo - id do div principal onde as mensagens serão mostradas no navegador enderecows - id do elemento html do tipo input que receberá o valor da seleção feita pelo usuário ao clicar em um endereço ws enderecowms - id do elemento html do tipo input que receberá o valor da seleção feita pelo usuário ao clicar em um endereço wms rssws - array com a lista de endereços dos serviços RSS com a lista de webservices convencionais rsswms - array com a lista de endereços dos serviços RSS com a lista de webservices OGC-WMS */ function i3geo_wscliente_configura(loc_i3geo,corpo,enderecows,enderecowms,rssws,rsswms) { /* Guarda o valor do parāmetro loc_i3geo */ this.loc_i3geo = loc_i3geo; /* Guarda o valor do parāmetro corpo */ this.corpo = corpo; if(!$i("corpo")){alert("id "+corpo+" nao existe");} /* Guarda o valor do parāmetro enderecows */ this.enderecows = enderecows; /* Guarda o valor do parāmetro enderecowms */ this.enderecowms = enderecowms; /* Guarda o valor do parāmetro rssws */ this.rssws = rssws; /* Guarda o valor do parāmetro rsswms */ this.rsswms = rsswms; /* Tipo de serviço wms ativo */ this.tipo = ""; /* Código do tema wms escolhido */ this.tema = ""; /* Nome do tema wms escolhido */ this.nometema = ""; /* Função do ws escolhida. */ this.funcao = ""; /* Monta a árvore de opções preenchendo a div definida em this.corpo */ this.inicia = function() { var ins = ""; var i = "  "; var ii = "onmouseover='javascript:this.style.textDecoration=\"underline\"' onmouseout='javascript:this.style.textDecoration=\"none\"'"; ins += " Ajuda
"; ins += i+"Web Services
"; ins += i+"Padrões OGC
"; ins += i+"WS cartográfico

"; ins += ""; ins += " Mapas
"; ins += i+"Escolher serviço
"; ins += i+"Escolher um tema
"; ins += i+"Resposta XML (WMS)
"; ins += i+"Resposta XML (WFS)
"; /* ins += " Dados
"; ins += i+"Escolher serviço
"; ins += i+"Escolher função
"; ins += i+"WSDL

"; ins += " RSS
"; ins += i+"Dados
"; */ ins += i+"RSS
"; $i("arvoreMenu").innerHTML = ins; /* pega parametros pela url servico,tema */ parametros = ""; parServico = ""; parTema = ""; parTipo = ""; parametros = window.location.href.split("?"); if (parametros.length > 1) { valores = parametros[1].split(","); if (valores.length == 2) { if (valores[0] == "wms") { $i(this.enderecowms).value = valores[1]; this.listatemas(); } } } }; /* Ativa uma opção escolhida pelo usuário, mostrando o seu respectivo texto no navegador. É utilizado nas opções que apresentam textos explicativos. O conteúdo do div (id) é lido e incluído na div corpo Por padrão, os conteúdos devem ser incluídos em DIVS com os seguintes ids- oquews oqueogc oquecarto Parāmetros: id - id do div com o conteúdo que será ativado */ this.ativa = function (id) { var novo = document.getElementById(id); $i(this.corpo).innerHTML = novo.innerHTML; }; /* Mostra links que permitem ao usuário abrir os RSSs cadastrados para determinado serviço. Parametros: tipo - ws|wms */ this.listaLinkServicos = function(tipo) { var lista = "",i,ins= ""; if (tipo == ("ws")) {lista = this.rssws;} else {lista = this.rsswms;} for (i=0;i "+lista[i]+"

"; } $i(this.corpo).innerHTML = ins; }; /* Lista os web services existentes nos arquivos definidos na variável rssws. É feita a leitura dos arquivos RSS e montada uma lista clicável com os serviços encontrados. */ this.servicosws = function() { //monta a lista retornada pela função ajax var monta = function(retorno) { var linhas = retorno.data.split("|"), ins = "", i; if(linhas.length == 1) {ins = "
"+retorno.data+"";} else { for (i=0;i"+caso[0]+"
 "+caso[1]+"
 ("+caso[3]+")
"; if (caso[4]) {ins += " (disponibilidade: "+parseInt(caso[4])+"%, dias considerados: "+caso[5]+")

";} else {ins += "

";} } } $i("resultadoRSSws").innerHTML = ins; $i($i3geo_wscliente.corpo).style.display="none"; $i("RSSwms").style.display="none"; $i("RSSws").style.display="block"; aguardeTotal("none"); }; if (this.rssws.length > 0) { aguardeTotal("block"); var p = this.loc_i3geo+"/classesphp/wscliente.php?funcao=listaRSSwsARRAY&rss="+this.rssws.join("|")+"&g_sid="; var cp = new cpaint(); //cp.set_debug(2) cp.set_response_type("JSON"); cp.call(p,"listaRSSwsARRAY",monta); } }; /* Lista os web services existentes no arquivo definido na variável rsswms. A variável rsswms deve ser definida no arquivo html que inicia o wscliente. */ this.servicoswms = function() { var mostraRetornowmsRSS = function(retorno) { var reg = /Erro/gi; try{ if (retorno.data.rss.search(reg) != -1) { alert("OOps! Ocorreu um erro\n"+retorno.data); aguardeTotal("none"); return; } } catch(e){alert(e);} var canais = retorno.data.canais; var ncanais = canais.length; var ins = "
"+retorno.data.rss; /* for (i=0;i 0) { var clique = "javascript:document.getElementById(\""+$i3geo_wscliente.enderecowms+"\").value='"+caso[2]+"';document.getElementById('"+$i3geo_wscliente.enderecowms+"').value='"+caso[2]+"'" ins += "

"+caso[0]+" "+caso[1]+" ("+caso[3]+")" if (caso[4]) {ins += " (disponibilidade: "+parseInt(caso[4])+"%, dias considerados: "+caso[5]+")

";} else {ins += "

"} } else {{ins += ""}} } */ for (var i=0;i"+caso.title+""; //ins += "\

\"+caso.title+"\<\/b\> "+caso.description+" ("+caso.author+")" if(caso.nacessos > 0) { var pc = (parseInt(caso.nacessosok) * 100) / parseInt(caso.nacessos); ins += " \(disponibilidade: "+pc+"%, acessos considerados: "+caso.nacessos+")\<\/span>\<\/p\>"; } } $i("resultadoRSSwms").innerHTML = ins+""; $i($i3geo_wscliente.corpo).style.display="none"; $i("RSSws").style.display="none"; $i("RSSwms").style.display="block"; aguardeTotal("none"); }; if ($i("RSSwms")) { aguardeTotal("block"); var p = this.loc_i3geo+"/classesphp/wscliente.php?tipo=WMS&funcao=listaRSSwsARRAY&rss=&g_sid="; var cp = new cpaint(); //cp.set_debug(2) cp.set_response_type("JSON"); cp.call(p,"listaRSSwsARRAY",mostraRetornowmsRSS); } }; /* Executa ajax para buscar resultado do getcapabilities. Parāmetros: tipo - tipo de chamada WMS|WFS */ this.getcapabilities = function(tipo) { $i("RSSws").style.display="none"; $i("RSSwms").style.display="none"; $i($i3geo_wscliente.corpo).style.display="block"; var monta = function (retorno) { aguardeTotal("none"); $i($i3geo_wscliente.corpo).innerHTML = "

"+retorno.data+"

"; }; if ($i(this.enderecowms).value != "") { aguardeTotal("block"); var p = this.loc_i3geo+"/classesphp/wscliente.php?funcao=getcapabilities&onlineresource="+$i(this.enderecowms).value+"&tipo="+tipo+"&g_sid="; var cp = new cpaint(); //cp.set_debug(2) cp.set_response_type("JSON"); cp.call(p,"getcapabilities",monta); } else $i(this.corpo).innerHTML = "

Nenhum serviço foi escolhido.

"; }; /* Busca a lista de temas de um WMS ou WFS */ this.listatemas = function() { var WCservico = $i(this.enderecowms).value; var WCmostraTemas = function(retorno) { aguardeTotal("none"); document.cookie = 'i3GeoPHP=; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/'; var ins = "

Selecione a camada que será adicionada ao mapa e depois clique em Aplicar.

"; ins += '

'; ins += '
'; $i($i3geo_wscliente.corpo).innerHTML = ins+"

"+retorno.data+"

"; YAHOO.example.init = function () { function onPushButtonsMarkupReady() {new YAHOO.widget.Button("botao3");} YAHOO.util.Event.onContentReady("botao3", onPushButtonsMarkupReady); }(); }; $i("RSSws").style.display="none"; $i("RSSwms").style.display="none"; $i(this.corpo).style.display="block"; if(WCservico == "") {$i(this.corpo).innerHTML = "

Nenhum serviço foi escolhido.

";} aguardeTotal("block"); var p = this.loc_i3geo+"/classesphp/mapa_controle.php?map_file=&funcao=temaswms&servico="+WCservico+"&g_sid="; var cp = new cpaint(); //cp.set_debug(2) cp.set_response_type("JSON"); cp.call(p,"temaswms",WCmostraTemas); }; /* Mostra o mapa */ this.verMapa = function() { var WCservico = $i(this.enderecowms).value, epsg = $i("proj").value.split(","), wms; epsg = epsg[0]; epsg = epsg.split(":"); epsg = epsg[1]; $i(this.corpo).innerHTML = "
"; var map = new OpenLayers.Map('i3geo_wscliente_id_mapa'); var bounds = new OpenLayers.Bounds(-73,5,-27,-34); if (this.tipo != "estilo") {wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",WCservico, {layers: this.tema, srs: epsg} );} else { wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",WCservico, {layers: this.tema, styles: this.nometema, srs: epsg}); } map.addLayer(wms); map.zoomToExtent(bounds); map.events.register("mousemove", map, function(e) { var p; //pega as coordenadas do cursor if(e.xy) {p = e.xy;} else {p = new OpenLayers.Pixel(e.x,e.y);} //altera o indicador de localizacao var lonlat = map.getLonLatFromViewPortPx(p); var d = i3GEO.calculo.dd2dms(lonlat.lon,lonlat.lat); $i("localizarxy").innerHTML = d[0]+" , "+d[1]; }); map.events.register("click", map, function(e) { var p; //pega as coordenadas do cursor if(e.xy) {p = e.xy;} else {p = new OpenLayers.Pixel(e.x,e.y);} //altera o indicador de localizacao var url = wms.getFullRequestString(); url = url.replace("GetMap","getfeatureinfo"); url += "&QUERY_LAYERS="+$i3geo_wscliente.tema; var bb = map.getExtent(); url += "&BBOX="+bb.toBBOX(); //var xy = p.split(",") url += "&x="+p.x; url += "&y="+p.y; var size = map.getSize(); url += "&WIDTH="+size.w; url += "&HEIGHT="+size.h; $i("desc").src = url; }); }; /* Busca a lista de funções de um WS */ this.listafuncoes = function() { var WCmostraFuncoes = function(retorno) { aguardeTotal("none"); var ins = "

Selecione a função que será acionada depois clique em Aplicar.
"; ins += '

'; ins += '
'; if(!retorno.data) {$i($i3geo_wscliente.corpo).innerHTML="
Erro ao acessar o serviço!";return;} var funcs = retorno.data.split("|"); for (var i=0;i "+f[0]+" "+f[3]+"
"; ins += "Entrada:"+f[1]; ins += "
Saída:"+f[2]+"
"; } $i($i3geo_wscliente.corpo).innerHTML = ins+"
"; YAHOO.example.init = function () { function onPushButtonsMarkupReady() {new YAHOO.widget.Button("botao4");} YAHOO.util.Event.onContentReady("botao4", onPushButtonsMarkupReady); }(); $i("RSSws").style.display="none"; $i("RSSwms").style.display="none"; $i($i3geo_wscliente.corpo).style.display="block"; }; var WCservico = $i(this.enderecows).value; if (WCservico != "") { aguardeTotal("block"); var p = this.loc_i3geo+"/classesphp/wscliente.php?funcao=funcoesws&servico="+WCservico+"&g_sid="; var cp = new cpaint(); //cp.set_debug(2) cp.set_response_type("JSON"); cp.call(p,"funcoesws",WCmostraFuncoes); } else $i(this.corpo).innerHTML = "

Nenhum serviço foi escolhido.

"; }; /* Lista os parāmetros de uma função para o usuário digitar os valores. Parāmetros: funcao - função que será chamada */ this.selParFuncao = function(funcao) { var WCmostraParFuncoes = function (retorno) { aguardeTotal("none"); if (retorno.data == ""){$i3geo_wscliente.chamadados(retorno.data);} else { var pars = retorno.data.split("|"); var ins = "

Digite os valores dos parâmetros e depois em clique em 'Aplicar'.
"; ins += '

'; ins += '

'; for (var i=0;i
"; } $i($i3geo_wscliente.corpo).innerHTML = ins+"
"; } $i("RSSws").style.display="none"; $i("RSSwms").style.display="none"; $i($i3geo_wscliente.corpo).style.display="block"; }; aguardeTotal("block"); this.funcao = funcao; var p = this.loc_i3geo+"/classesphp/wscliente.php?funcao=parfuncoesws&servico="+$i(this.enderecows).value+"&funcaows="+funcao+"&g_sid="; var cp = new cpaint(); //cp.set_debug(2) cp.set_response_type("JSON"); cp.call(p,"parFuncoesws",WCmostraParFuncoes); }; /* Busca os dados de uma função de um serviço */ this.chamadados = function(retorno) { var monta = function (retorno) { aguardeTotal("none"); $i($i3geo_wscliente.corpo).innerHTML = "
"+retorno.data+ "
"; $i("RSSws").style.display="none"; $i("RSSwms").style.display="none"; $i($i3geo_wscliente.corpo).style.display="block"; }; aguardeTotal("block"); var par = []; if (retorno != "") { var pars = retorno.split("|"); for (var i=0;i