/* Title: Metar Busca as estações meteorológicas da rede METAR na extensão geográfica do mapa atual. Veja: Arquivo: i3geo/ferramentas/metar/index.php 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@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 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 (i3GEOF) === 'undefined') { var i3GEOF = {}; } /* * Classe: i3GEOF.metar * */ i3GEOF.metar = { MARCA : false, /* * Variavel: aguarde * * Estilo do objeto DOM com a imagem de aguarde existente no cabeçalho da janela. */ aguarde : "", /** * Template no formato mustache. E preenchido na carga do javascript com o programa dependencias.php */ MUSTACHE : "", /** * Susbtitutos para o template */ mustacheHash : function() { var dicionario = i3GEO.idioma.objetoIdioma(i3GEOF.metar.dicionario); return dicionario; }, /* * Function: inicia * * Inicia a ferramenta. É chamado por criaJanelaFlutuante * * Parametro: * * iddiv {String} - id do div que receberá o conteudo HTML da ferramenta */ inicia : function(iddiv) { try { $i(iddiv).innerHTML += i3GEOF.metar.html(); i3GEOF.metar.ativaFoco(); if (i3GEO.Interface.ATUAL !== "googlemaps" && i3GEO.Interface.ATUAL !== "googleearth") { i3GEO.eventos.NAVEGAMAPA.push("i3GEOF.metar.lista()"); } if (i3GEO.Interface.ATUAL === "googlemaps") { metarDragend = google.maps.event.addListener(i3GeoMap, "dragend", function() { i3GEOF.metar.lista(); }); metarZoomend = google.maps.event.addListener(i3GeoMap, "zoomend", function() { i3GEOF.metar.lista(); }); } if (i3GEO.Interface.ATUAL === "googleearth") { metarDragend = google.earth.addEventListener(i3GeoMap.getView(), "viewchangeend", function() { i3GEOF.metar.lista(); }); } i3GEOF.metar.lista(); } catch (erro) { i3GEO.janela.tempoMsg(erro); } }, /* * Function: html * * Gera o código html para apresentação das opções da ferramenta * * Retorno: * * String com o código html */ html : function() { var ins = Mustache.render(i3GEOF.metar.MUSTACHE, i3GEOF.metar.mustacheHash()); return ins; }, /* * Function: iniciaJanelaFlutuante * * Cria a janela flutuante para controle da ferramenta. */ iniciaJanelaFlutuante : function() { var minimiza, cabecalho, janela, divid, temp, titulo; if ($i("i3GEOF.metar")) { return; } // funcao que sera executada ao ser clicado no cabeçalho da janela cabecalho = function() { i3GEOF.metar.ativaFoco(); }; minimiza = function() { i3GEO.janela.minimiza("i3GEOF.metar"); }; // cria a janela flutuante titulo = "
Metar
"; janela = i3GEO.janela.cria("250px", "190px", "", "", "", titulo, "i3GEOF.metar", false, "hd", cabecalho, minimiza); divid = janela[2].id; i3GEOF.metar.aguarde = $i("i3GEOF.metar_imagemCabecalho").style; i3GEOF.metar.inicia(divid); temp = function() { i3GEOF.metar.escondexy(); if (i3GEO.Interface.ATUAL !== "googlemaps" && i3GEO.Interface.ATUAL !== "googleearth") { i3GEO.eventos.removeEventos("NAVEGAMAPA",["i3GEOF.metar.lista()"]); } if (i3GEO.Interface.ATUAL === "googlemaps") { google.maps.event.removeListener(metarDragend); google.maps.event.removeListener(metarZoomend); } if (i3GEO.Interface.ATUAL === "googleearth") { google.earth.removeEventListener(metarDragend); } }; YAHOO.util.Event.addListener(janela[0].close, "click", temp); }, /* * Function: ativaFoco * * Refaz a interface da ferramenta quando a janela flutuante tem seu foco ativado */ ativaFoco : function() { var i = $i("i3GEOF.metar_c").style; i3GEO.janela.ULTIMOZINDEX++; i.zIndex = 21000 + i3GEO.janela.ULTIMOZINDEX; }, /* * Function: lista * * Lista as estações consultando o webservice http://ws.geonames.org/weatherJSON */ lista : function() { $i("i3GEOmetarLista").innerHTML = ""; if (i3GEOF.metar.aguarde.visibility === "visible") { return; } i3GEOF.metar.aguarde.visibility = "visible"; var montaResultado = { success : function(o) { var ins, dados, ndados, i, temp, temp1; i3GEOF.metar.aguarde.visibility = "hidden"; ins = "

" + $trad('ajuda', i3GEOF.metar.dicionario) + "

"; try { dados = YAHOO.lang.JSON.parse(o.responseText)[0].weatherObservations; ndados = dados.length; ins += ""; for (i = 0; i < ndados; i++) { temp = "i3GEOF.metar.mostraxy(" + dados[i].lng + "," + dados[i].lat + ")"; temp1 = "i3GEO.navega.zoomponto(i3GEO.configura.locaplic,i3GEO.configura.sid," + dados[i].lng + "," + dados[i].lat + ")"; ins += "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""; } $i("i3GEOmetarLista").innerHTML = ins + "
" + $trad('estacao', i3GEOF.metar.dicionario) + "" + dados[i].stationName + "
long: " + dados[i].lng + ", lat: " + dados[i].lat + "
" + $trad('temperatura', i3GEOF.metar.dicionario) + "" + dados[i].temperature + " C
" + $trad('condicao', i3GEOF.metar.dicionario) + "" + dados[i].weatherCondition + "
" + $trad('observacao', i3GEOF.metar.dicionario) + "" + dados[i].observation + "
" + $trad('nuvens', i3GEOF.metar.dicionario) + "" + dados[i].clouds + "
" + $trad('direcaoVento', i3GEOF.metar.dicionario) + "" + dados[i].windDirection + "
" + $trad('pontoOrvalho', i3GEOF.metar.dicionario) + "" + dados[i].dewPoint + " C
" + $trad('velocidadeVento', i3GEOF.metar.dicionario) + "" + dados[i].windSpeed + " mph
" + $trad('humidade', i3GEOF.metar.dicionario) + "" + dados[i].humidity + " %
" + $trad('data', i3GEOF.metar.dicionario) + "" + dados[i].datetime + "
" + $trad('pressao', i3GEOF.metar.dicionario) + "" + dados[i].hectoPascAltimeter + " hpa
ICAO" + dados[i].ICAO + "
"; } catch (e) { $i("i3GEOmetarLista").innerHTML = ins; } }, failure : function(o) { $i("i3GEOmetarLista").innerHTML = "Erro"; i3GEOF.metar.aguarde.visibility = "hidden"; return; }, argument : { foo : "foo", bar : "bar" } }; if (i3GEO.parametros.mapexten) { ext = i3GEO.parametros.mapexten; } else { ext = "-49.1774741355 -16.379556709 -47.2737662565 -14.9806872512"; } // apenas para exemplo p = i3GEO.configura.locaplic + "/ferramentas/metar/metarextensao.php?ret=" + ext; YAHOO.util.Connect.asyncRequest("GET", p, montaResultado); }, /* * Function: mostraxy * * Indica no mapa a localização de uma estação * * Parametros: * * x {Numero} - longitude em dd * * y {Numero} - latitude em dd */ mostraxy : function(x, y) { if (i3GEO.Interface.ATUAL === "googleearth") { return; } if (i3GEOF.metar.MARCA === false) { i3GEOF.metar.MARCA = i3GEO.desenho.addPin(x, y, "", "", i3GEO.configura.locaplic + '/imagens/google/metar.png', "metar"); } else { i3GEO.desenho.movePin(i3GEOF.metar.MARCA, x, y); } }, escondexy : function() { i3GEO.desenho.removePins("metar"); i3GEOF.metar.MARCA = false; } };