/* Title: 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 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. Veja: */ 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); /** Classe: i3geo_wscliente_configura 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 = "" /* Function: inicia 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() } } } } /* Function: ativa 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 } /* Function: listaLinkServicos Mostra links que permitem ao usuário abrir os RSSs cadastrados para determinado serviço. Parametros: tipo - ws|wms */ this.listaLinkServicos = function(tipo) { if (tipo == ("ws")) {var lista = this.rssws} else {var lista = this.rsswms} for (i=0;i "+lista[i]+"

" } $i(this.corpo).innerHTML = ins } /* Function: servicosws 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("|") var ins = "" if(linhas.length == 1) {var 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); } } /* Function: servicoswms 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 (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); } } /* Function: getcapabilities 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.

" } /* Function: listatemas 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); } /* Function: verMapa Mostra o mapa */ this.verMapa = function() { var WCservico = $i(this.enderecowms).value var epsg = $i("proj").value.split(",") var epsg = epsg[0] var epsg = epsg.split(":") var 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") {var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",WCservico, {layers: this.tema, srs: epsg} );} else { var 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) { //pega as coordenadas do cursor if(e.xy) {var p = e.xy;} else {var 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) { //pega as coordenadas do cursor if(e.xy) {var p = e.xy;} else {var p = new OpenLayers.Pixel(e.x,e.y);} //altera o indicador de localizacao var lonlat = map.getLonLatFromViewPortPx(p); 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 }) } /* Function: listafuncoes 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 (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.

" } /* Function: selParFuncao 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 (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); } /* Function: chamadados 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 (i=0;i