From 6a57ec978b8da81228eb24b13287344b31271748 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Mon, 7 Feb 2011 11:52:54 +0000 Subject: [PATCH] Inclusão de cálculo de coordenadas na ferramenta identifica usando a classe_coordenadas.js --- classesjs/classe_coordenadas.js | 150 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------- ferramentas/identifica/index.js.php | 4 ++++ interface/geral.htm | 6 +++--- 3 files changed, 114 insertions(+), 46 deletions(-) diff --git a/classesjs/classe_coordenadas.js b/classesjs/classe_coordenadas.js index 3235fce..91e2a74 100644 --- a/classesjs/classe_coordenadas.js +++ b/classesjs/classe_coordenadas.js @@ -32,7 +32,12 @@ if(typeof(i3GEO) === 'undefined'){ /* Classe: i3GEO.coordenadas -Inclui elementos especiais no mapa para apresentação de coordenadas +Inclui elementos especiais no mapa para apresentação de coordenadas. + +Contém funções que permitem a conversão de coordenadas, entre sistemas de projeção deiferentes, com base na biblioteca Proj4js. +Cria também o bloco de apresentação de coordenadas com base na posição do mouse sobre o mapa. +Mais informações em http://trac.osgeo.org/proj4js/ +Para adicionar novas projeções ou modificar as atuais, edit a variável i3GEO.coordenadas.config e defOrigem */ i3GEO.coordenadas = { @@ -54,12 +59,15 @@ i3GEO.coordenadas = { separado - mostra todos os tipos em lugares diferentes conforme o valor de idhtml lista - mostra cada tipo em um lugar diferente conforme o valor de idhtml + + janela - cria uma janela flutuante para mostrar os dados + */ formato: "bloco", //bloco,separado,lista,janela /* Propriedade: padrao - Indica qual tipo de coordenada é mostrado como padrão. Deve existir em i3GEO.coordenadas.config + Indica qual tipo de coordenada é mostrado como padrão quando formato for igual a "bloco". Deve existir em i3GEO.coordenadas.config Default: "geoProj" @@ -78,9 +86,9 @@ i3GEO.coordenadas = { /* Propriedade: config - Define as configurações de cada tipo de coordenada mostrada + Define as configurações de cada tipo de coordenada que será utilizada e/ou mostrada no mapa - Para alterar os parâmetros ou acrescentar novas projeções, altere esse objeto por meio de javascript + Para alterar os parâmetros ou acrescentar novas projeções, altere esse objeto Para mais detalhes, veja i3geo/classesjs/classe_coordenada.js @@ -97,7 +105,7 @@ i3GEO.coordenadas = { "policonicaSad69":{ idhtml: "localizarxy", tipo: "metrica", - titulo: "Policônica SAD-69", + titulo: "Polic SAD-69", ativo: true, defepsg: "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m +no_defs" }, @@ -126,7 +134,7 @@ i3GEO.coordenadas = { "utmSirgas2000Proj":{ idhtml: "localizarxy", tipo: "utm", - titulo: "UTM Sirgas 2000", + titulo: "UTM Sirgas", ativo: true, defepsg: "", zona:{ @@ -337,7 +345,7 @@ i3GEO.coordenadas = { */ criaMascaraDMS: function(prefixo,titulo,caixa){ var ins = "" + - "" + + "" + "" + "" + "" + @@ -395,7 +403,7 @@ i3GEO.coordenadas = { */ criaMascaraMetrica: function(prefixo,titulo,caixa){ var ins = "
"+titulo+" X: "+titulo+" X: "+$inputText("","315",prefixo+"xg","grau","3","-00")+" "+$inputText("","",prefixo+"xm","minuto","3","00")+" "+$inputText("","",prefixo+"xs","segundo","5","00.00")+" 
" + - "" + + "" + "" + "" + "" + @@ -415,39 +423,71 @@ i3GEO.coordenadas = { configProj {string} */ - atualizaProj4: function(configProj){ + atualizaProj4: function(onde,configProj,x,y){ + try{ + if(!$i(onde+configProj+"ZN")) + {return;} + } + catch(e){return;} eval("temp = i3GEO.coordenadas.config."+configProj+";"); try{ - if($i(configProj).style.display == "none") + if($i(onde+configProj).style.display == "none") {return;} } catch(e){} if(temp.tipo === "metrica"){ var destino = temp.defepsg; } + if(x == undefined) + {x = objposicaocursor.ddx;} + if(y == undefined) + {y = objposicaocursor.ddy;} if(temp.tipo === "utm"){ - var zona = i3GEO.coordenadas.geo2zonaUtm(objposicaocursor.ddx); - $i(configProj+"ZN").value = zona + var zona = i3GEO.coordenadas.geo2zonaUtm(x); + $i(onde+configProj+"ZN").value = zona if(objposicaocursor.ddy*1 > 0) {var destino = temp.zona[zona+"N"];} else {var destino = temp.zona[zona+"S"];} if(destino == undefined){ - i3GEO.util.defineValor(configProj+"X","value","?"); - i3GEO.util.defineValor(configProj+"Y","value","?"); + i3GEO.util.defineValor(onde+configProj+"X","value","?"); + i3GEO.util.defineValor(onde+configProj+"Y","value","?"); return; } } + var p = i3GEO.coordenadas.calculaProj4(i3GEO.coordenadas.defOrigem,destino,x,y); + i3GEO.util.defineValor(onde+configProj+"X","value",p.x); + i3GEO.util.defineValor(onde+configProj+"Y","value",p.y); + }, + /* + Function: calculaProj4 + + Faz a projeção de x e y da origem para o destino + + Parametros: + + origem {string} - CRS contendo o código da projeção de origem + + destino {string} - CRS contendo o código da projeção de destino + + x {numerico} - coordenada x ou longitude + + y {numerico} - coordenada y ou latitude + + Retorno: + + {Proj4js.transform} + */ + calculaProj4: function(origem,destino,x,y){ Proj4js.defs = { - 'ORIGEM' : i3GEO.coordenadas.defOrigem, + 'ORIGEM' : origem, 'DESTINO': destino }; var source = new Proj4js.Proj("ORIGEM"), dest = new Proj4js.Proj("DESTINO"), - p = new Proj4js.Point(objposicaocursor.ddx,objposicaocursor.ddy); + p = new Proj4js.Point(x,y); Proj4js.transform(source, dest, p); - i3GEO.util.defineValor(configProj+"X","value",p.x); - i3GEO.util.defineValor(configProj+"Y","value",p.y); + return p; }, /* Function: ativaBloco @@ -456,7 +496,7 @@ i3GEO.coordenadas = { Mostra o que estiver definido em i3GEO.coordenadas.padrao */ - ativaBloco: function(){ + ativaBloco: function(prefixo){ var tipos = i3GEO.util.listaChaves(i3GEO.coordenadas.config), n = tipos.length, temp, @@ -468,9 +508,9 @@ i3GEO.coordenadas = { eval("temp = i3GEO.coordenadas.config."+tipos[i]+";"); if(temp.ativo === true){ if(tipos[i] == i3GEO.coordenadas.padrao) - {$i(tipos[i]).style.display = "block";} + {$i(prefixo+tipos[i]).style.display = "block";} else - {$i(tipos[i]).style.display = "none";} + {$i(prefixo+tipos[i]).style.display = "none";} } } }, @@ -483,7 +523,7 @@ i3GEO.coordenadas = { tipo {string} - tipo de coordenada */ - mudaTipo: function(obj){ + mudaTipo: function(obj,onde){ if(obj.value === "janela"){ i3GEO.coordenadas.formato = "janela"; i3GEO.coordenadas.mostraCoordenadas(); @@ -491,22 +531,37 @@ i3GEO.coordenadas = { } i3GEO.coordenadas.padrao = obj.value; obj.selectedIndex = 0; - i3GEO.coordenadas.ativaBloco(); + i3GEO.coordenadas.ativaBloco(onde); }, /* Function: mostraCoordenadas Constrói o conjunto de elementos HTML para mostrar as coordenadas e define as funções de atualização. + + Parametro: + + ativaMovimento {boolean} - (opcional) aplica ou não as funções ligadas à movimentação do mouse + + onde {string} - (opcional) id onde o resultado será mostrado (irá ignorar os ids definidos em coordenadas.config) */ - mostraCoordenadas: function(){ + mostraCoordenadas: function(ativaMovimento,onde,x,y){ try{ var tipos = i3GEO.util.listaChaves(i3GEO.coordenadas.config), n = tipos.length, temp, ins = "", - onde = "", - i = 0, - caixa = ""; // //cria a caixa de seleção // @@ -518,25 +573,20 @@ i3GEO.coordenadas = { } caixa += ""; if(i3GEO.coordenadas.formato !== "bloco") - {caixa = "";} - // - //cria o HTML - // + {caixa = "";} for(i=0;i - +
"+titulo+" X: "+titulo+" X: "+$inputText("","",prefixo+"X","X","12","00")+" Y:"+$inputText("","",prefixo+"Y","Y","12","00")+" Zn:"+$inputText("","",prefixo+"ZN","Zona","2","--")+"