Commit 24de638f479565c33677ee6d05031a9b64dc4cbc

Authored by Edmar Moretti
1 parent d6e4bb78

Alteração na ferramenta de cálculo de área para utilizar a API do OpenLayers nessa interface

classesjs/classe_analise.js
@@ -259,8 +259,8 @@ i3GEO.analise = { @@ -259,8 +259,8 @@ i3GEO.analise = {
259 i3GEO.analise.medeDistancia.criaJanela(); 259 i3GEO.analise.medeDistancia.criaJanela();
260 i3GEO.analise.medeDistancia[i3GEO.Interface["ATUAL"]].inicia(); 260 i3GEO.analise.medeDistancia[i3GEO.Interface["ATUAL"]].inicia();
261 }, 261 },
262 - /*  
263 - Cria a janela para mostrar os resultados da medicao 262 + /**
  263 + * Cria a janela para mostrar os resultados da medicao
264 */ 264 */
265 criaJanela: function(){ 265 criaJanela: function(){
266 var novoel,ins,imagemxy,janela; 266 var novoel,ins,imagemxy,janela;
@@ -367,14 +367,14 @@ i3GEO.analise = { @@ -367,14 +367,14 @@ i3GEO.analise = {
367 var f = new OpenLayers.Feature.Vector( 367 var f = new OpenLayers.Feature.Vector(
368 feature, 368 feature,
369 { 369 {
370 - strokeWidth: estilo.linewidth,  
371 - strokeColor: estilo.linecolor,  
372 origem: "medeDistancia" 370 origem: "medeDistancia"
373 }, 371 },
374 { 372 {
375 graphicName: "square", 373 graphicName: "square",
376 pointRadius: 10, 374 pointRadius: 10,
377 - graphicOpacity: 1 375 + graphicOpacity: 1,
  376 + strokeWidth: estilo.linewidth,
  377 + strokeColor: estilo.linecolor
378 } 378 }
379 ); 379 );
380 i3GEO.desenho.layergrafico.addFeatures([f]); 380 i3GEO.desenho.layergrafico.addFeatures([f]);
@@ -442,12 +442,12 @@ i3GEO.analise = { @@ -442,12 +442,12 @@ i3GEO.analise = {
442 30 442 30
443 ), 443 ),
444 { 444 {
445 - strokeWidth: 1,  
446 origem: "medeDistanciaExcluir" 445 origem: "medeDistanciaExcluir"
447 }, 446 },
448 { 447 {
449 fill: false, 448 fill: false,
450 - strokeColor: "#FFFFFF" 449 + strokeColor: estilo.circcolor,
  450 + strokeWidth: 1
451 } 451 }
452 ); 452 );
453 i3GEO.desenho.layergrafico.addFeatures([circ]); 453 i3GEO.desenho.layergrafico.addFeatures([circ]);
@@ -468,7 +468,7 @@ i3GEO.analise = { @@ -468,7 +468,7 @@ i3GEO.analise = {
468 fillColor: "white", 468 fillColor: "white",
469 label: trecho.toFixed(3), 469 label: trecho.toFixed(3),
470 labelAlign: "rb", 470 labelAlign: "rb",
471 - fontColor: "gray", 471 + fontColor: estilo.textcolor,
472 fontSize: 12, 472 fontSize: 12,
473 fontWeight: "bold" 473 fontWeight: "bold"
474 } 474 }
@@ -715,7 +715,7 @@ i3GEO.analise = { @@ -715,7 +715,7 @@ i3GEO.analise = {
715 } 715 }
716 }, 716 },
717 /* 717 /*
718 - Classe: i3GEO.analise.medeArea 718 + i3GEO.analise.medeArea
719 719
720 Ativa e controla a opcao de medicao de area. 720 Ativa e controla a opcao de medicao de area.
721 721
@@ -726,6 +726,10 @@ i3GEO.analise = { @@ -726,6 +726,10 @@ i3GEO.analise = {
726 Para mostrar o resultado do calculo, e incluido um div especifico. 726 Para mostrar o resultado do calculo, e incluido um div especifico.
727 */ 727 */
728 medeArea:{ 728 medeArea:{
  729 + /**
  730 + * Armazena os pontos clicados para realizar os calculos
  731 + */
  732 + pontos: {},
729 /* 733 /*
730 Function: inicia 734 Function: inicia
731 735
@@ -734,8 +738,9 @@ i3GEO.analise = { @@ -734,8 +738,9 @@ i3GEO.analise = {
734 Sao registrados os eventos de clique sobre o mapa e fechamento da janela de resultados 738 Sao registrados os eventos de clique sobre o mapa e fechamento da janela de resultados
735 */ 739 */
736 inicia: function(){ 740 inicia: function(){
737 - if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.medeArea.inicia()");} 741 + if(typeof(console) !== 'undefined'){console.info("i3GEO.analise.medeDistancia.inicia()");}
738 i3GEO.eventos.cliquePerm.desativa(); 742 i3GEO.eventos.cliquePerm.desativa();
  743 + //@TODO remover apos concluir a refatoracao do codigo
739 i3GEO.analise.pontosdistobj = { 744 i3GEO.analise.pontosdistobj = {
740 xpt: [], 745 xpt: [],
741 ypt: [], 746 ypt: [],
@@ -748,42 +753,8 @@ i3GEO.analise = { @@ -748,42 +753,8 @@ i3GEO.analise = {
748 linhas: [], 753 linhas: [],
749 linhastemp: [] 754 linhastemp: []
750 }; 755 };
751 - var x,y,ll1,ll2,d,  
752 - calculo = i3GEO.calculo,  
753 - montacontainer = function(){  
754 - var desenho = i3GEO.desenho;  
755 - $i("mostraarea_calculo").innerHTML = "Clique no mapa para desenhar o poligono. Clique duas vezes para concluir";  
756 - i3GEO.barraDeBotoes.ativaIcone("area");  
757 - g_tipoacao = "area";  
758 - desenho.criaContainerRichdraw();  
759 - desenho.richdraw.lineColor = "green";  
760 - desenho.richdraw.lineWidth = "2px";  
761 - };  
762 i3GEO.analise.medeArea.criaJanela(); 756 i3GEO.analise.medeArea.criaJanela();
763 - if (g_tipoacao !== "area"){  
764 - $i("mostraarea_calculo").innerHTML = "";  
765 - if(i3GEO.eventos.MOUSECLIQUE.toString().search("i3GEO.analise.medeArea.clique()") < 0)  
766 - {i3GEO.eventos.MOUSECLIQUE.push("i3GEO.analise.medeArea.clique()");}  
767 - if(i3GEO.eventos.MOUSEMOVE.toString().search("i3GEO.analise.medeArea.movimento()") < 0)  
768 - {i3GEO.eventos.MOUSEMOVE.push("i3GEO.analise.medeArea.movimento()");}  
769 - if(i3GEO.eventos.NAVEGAMAPA.toString().search("i3GEO.analise.medeArea.fechaJanela()") < 0)  
770 - {i3GEO.eventos.NAVEGAMAPA.push("i3GEO.analise.medeArea.fechaJanela()");}  
771 - //  
772 - //a API do Openlayers e GoogleMaps tem uma funcao propria de obtencao da resolucao de cada pixel  
773 - //essa funcao e embutida em i3GEO.calculo.tela2dd  
774 - //  
775 - if(i3GEO.util.in_array(i3GEO.Interface.ATUAL,["openlayers","googlemaps"])){  
776 - x = parseInt(i3GEO.parametros.w / 2,10);  
777 - y = parseInt(i3GEO.parametros.h / 2,10);  
778 - ll1 = calculo.tela2dd(x,y,"","");  
779 - ll2 = calculo.tela2dd(x + 1,y,"","");  
780 - d = calculo.distancia(ll1[0],ll1[1],ll2[0],ll2[1]);  
781 - d = d * 1000;  
782 - g_areapixel = d * d;  
783 - g_areapixel < 0 ? i3GEO.janela.tempoMsg("Nao e possivel calcular a area. Entre em contato com o administrador do sistema.") : montacontainer();  
784 - }  
785 - }  
786 - else{i3GEO.desenho.richdraw.fecha();} 757 + i3GEO.analise.medeArea[i3GEO.Interface["ATUAL"]].inicia();
787 }, 758 },
788 /* 759 /*
789 Cria a janela para mostrar os resultados da medicao 760 Cria a janela para mostrar os resultados da medicao
@@ -797,6 +768,7 @@ i3GEO.analise = { @@ -797,6 +768,7 @@ i3GEO.analise = {
797 '<div class="bd" style="text-align:left;padding:3px;font-size:10px" >' + 768 '<div class="bd" style="text-align:left;padding:3px;font-size:10px" >' +
798 'Estilo: '+i3GEO.desenho.caixaEstilos()+'<br>' + 769 'Estilo: '+i3GEO.desenho.caixaEstilos()+'<br>' +
799 '<div style="text-align:left;padding:3px;font-size:10px" id="mostraarea_calculo" ></div>' + 770 '<div style="text-align:left;padding:3px;font-size:10px" id="mostraarea_calculo" ></div>' +
  771 + '<div style="text-align:left;padding:3px;font-size:10px" id="mostraarea_calculo_parcial" ></div>' +
800 '</div>'; 772 '</div>';
801 novoel.innerHTML = ins; 773 novoel.innerHTML = ins;
802 novoel.style.borderColor="gray"; 774 novoel.style.borderColor="gray";
@@ -821,87 +793,413 @@ i3GEO.analise = { @@ -821,87 +793,413 @@ i3GEO.analise = {
821 fechaJanela: function(){ 793 fechaJanela: function(){
822 var janela; 794 var janela;
823 i3GEO.eventos.cliquePerm.ativa(); 795 i3GEO.eventos.cliquePerm.ativa();
824 - i3GEO.desenho.richdraw.fecha();  
825 - i3GEO.util.removeChild("pontosArea",document.body);  
826 - i3GEO.eventos.MOUSECLIQUE.remove("i3GEO.analise.medeArea.clique()");  
827 - i3GEO.eventos.MOUSEMOVE.remove("i3GEO.analise.medeArea.movimento()");  
828 - i3GEO.eventos.NAVEGAMAPA.remove("i3GEO.analise.medeArea.fechaJanela()");  
829 - i3GEO.barraDeBotoes.ativaBotoes(); 796 + //@TODO remover
  797 + if(i3GEO.Interface.ATUAL !== "openlayers"){
  798 + i3GEO.desenho.richdraw.fecha();
  799 + i3GEO.util.removeChild("pontosArea",document.body);
  800 + i3GEO.eventos.MOUSECLIQUE.remove("i3GEO.analise.medeArea.clique()");
  801 + i3GEO.eventos.MOUSEMOVE.remove("i3GEO.analise.medeArea.movimento()");
  802 + i3GEO.eventos.NAVEGAMAPA.remove("i3GEO.analise.medeArea.fechaJanela()");
  803 + i3GEO.barraDeBotoes.ativaBotoes();
  804 + }
830 janela = YAHOO.i3GEO.janela.manager.find("mostraarea"); 805 janela = YAHOO.i3GEO.janela.manager.find("mostraarea");
831 if(janela){ 806 if(janela){
832 YAHOO.i3GEO.janela.manager.remove(janela); 807 YAHOO.i3GEO.janela.manager.remove(janela);
833 janela.destroy(); 808 janela.destroy();
834 } 809 }
835 i3GEO.barraDeBotoes.ativaIcone("pointer"); 810 i3GEO.barraDeBotoes.ativaIcone("pointer");
  811 + i3GEO.analise.medeArea[i3GEO.Interface["ATUAL"]].fechaJanela();
836 }, 812 },
837 - /*  
838 - Adiciona uma marca na tela e realiza o calculo de distancia dos pontos inseridos 813 + /**
  814 + * Funcoes especificas da interface openlayers
839 */ 815 */
840 - clique: function(){  
841 - var n,m;  
842 - pontosdistobj = i3GEO.analise.pontosdistobj;  
843 - if (g_tipoacao === "area"){  
844 - n = pontosdistobj.xpt.length;  
845 - pontosdistobj.xpt[n] = objposicaocursor.ddx;  
846 - pontosdistobj.ypt[n] = objposicaocursor.ddy;  
847 - pontosdistobj.xtela[n] = objposicaocursor.telax;  
848 - pontosdistobj.ytela[n] = objposicaocursor.telay;  
849 - pontosdistobj.ximg[n] = objposicaocursor.imgx;  
850 - pontosdistobj.yimg[n] = objposicaocursor.imgy;  
851 - pontosdistobj.dist[n] = 0;  
852 - //inclui a linha para ligar com o ponto inicial  
853 - if (n === 0){  
854 - try {  
855 - pontosdistobj.linhastemp = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, pontosdistobj.ximg[n]-1,pontosdistobj.yimg[n]-1,pontosdistobj.ximg[0]-1,pontosdistobj.yimg[0]-1);  
856 - }  
857 - catch(e){  
858 - if(typeof(console) !== 'undefined'){console.error(e);}  
859 - }  
860 - }  
861 - else{  
862 - if(navm)  
863 - {i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, (pontosdistobj.ximg[n-1]),pontosdistobj.yimg[n-1],(pontosdistobj.ximg[n]),pontosdistobj.yimg[n]);}  
864 - //parece qe tem um problema de versao do ie aqui  
865 - //if(navm)  
866 - //{i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, (pontosdistobj.ximg[n-1])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n-1],(pontosdistobj.ximg[n])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n]);}  
867 - }  
868 - try{  
869 - pontosdistobj.linhas[n] = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, pontosdistobj.ximg[n]-1,pontosdistobj.yimg[n]-1,pontosdistobj.ximg[n]-1,pontosdistobj.yimg[n]-1); 816 + openlayers:{
  817 + /**
  818 + * Inicializa o processo
  819 + * Cria a variavel para guardar os pontos
  820 + * Executa a funcao de inicializacao do desenho, que cria o layer para receber os graficos
  821 + */
  822 + inicia: function(){
  823 + var poligono,
  824 + estilo = i3GEO.desenho.estilos[i3GEO.desenho.estiloPadrao],
  825 + controle = i3geoOL.getControlsBy("id","i3GeoMedeArea");
  826 + i3GEO.desenho[i3GEO.Interface["ATUAL"]].inicia();
  827 + i3GEO.analise.medeArea.pontos = {
  828 + xpt: [],
  829 + ypt: [],
  830 + dist: []
  831 + };
  832 + if(controle.length === 0){
  833 + poligono = new OpenLayers.Control.DrawFeature(
  834 + i3GEO.desenho.layergrafico,
  835 + OpenLayers.Handler.Polygon,
  836 + {
  837 + autoActivate: true,
  838 + id: "i3GeoMedeArea",
  839 + type: OpenLayers.Control.TYPE_TOOL,
  840 + callbacks:{
  841 + done: function(feature){
  842 + var f = new OpenLayers.Feature.Vector(
  843 + feature,
  844 + {
  845 + origem: "medeArea"
  846 + },
  847 + {
  848 + graphicName: "square",
  849 + pointRadius: 10,
  850 + graphicOpacity: 1,
  851 + strokeWidth: estilo.linewidth,
  852 + strokeColor: estilo.linecolor,
  853 + fillColor: estilo.fillcolor,
  854 + fillOpacity: 0.3
  855 + }
  856 + );
  857 + i3GEO.desenho.layergrafico.addFeatures([f]);
  858 + if(i3GEO.Interface){
  859 + i3GEO.Interface.openlayers.sobeLayersGraficos();
  860 + }
  861 + i3GEO.analise.medeArea.openlayers.mostraParcial(0,0,0,0);
  862 + i3GEO.analise.medeArea.openlayers.inicia();
  863 + },
  864 + modify: function(point,poligono){
  865 + var n,x1,y1,x2,y2,
  866 + trecho = 0,
  867 + per = 0,
  868 + direcao = 0,
  869 + area = 0;
  870 + n = i3GEO.analise.medeArea.pontos.ypt.length;
  871 + if(n > 1){
  872 + x1 = i3GEO.analise.medeArea.pontos.xpt[n-1];
  873 + y1 = i3GEO.analise.medeArea.pontos.ypt[n-1];
  874 + x2 = point.x;
  875 + y2 = point.y;
  876 + //projeta
  877 + if(i3GEO.Interface.openlayers.googleLike){
  878 + temp = i3GEO.util.extOSM2Geo(x1+" "+y1+" "+x2+" "+y2);
  879 + temp = temp.split(" ");
  880 + x1 = temp[0];
  881 + y1 = temp[1];
  882 + x2 = temp[2];
  883 + y2 = temp[3];
  884 + }
  885 + trecho = i3GEO.calculo.distancia(x1,y1,x2,y2);
  886 + direcao = i3GEO.calculo.direcao(x1,y1,x2,y2);
  887 + per = i3GEO.analise.medeArea.openlayers.somaDist();
  888 + //soma ate o primeiro ponto
  889 + x1 = i3GEO.analise.medeArea.pontos.xpt[0];
  890 + y1 = i3GEO.analise.medeArea.pontos.ypt[0];
  891 + //projeta
  892 + if(i3GEO.Interface.openlayers.googleLike){
  893 + temp = i3GEO.util.extOSM2Geo(x1+" "+y1+" "+x2+" "+y2);
  894 + temp = temp.split(" ");
  895 + x1 = temp[0];
  896 + y1 = temp[1];
  897 + x2 = temp[2];
  898 + y2 = temp[3];
  899 + }
  900 + per += i3GEO.calculo.distancia(x1,y1,x2,y2);
  901 + if(n > 2){
  902 + area = poligono.geometry.getGeodesicArea();
  903 + }
  904 + i3GEO.analise.medeArea.openlayers.mostraParcial(trecho,per,area,direcao);
  905 + }
  906 + },
  907 + point: function(point,poligono){
  908 + var n,x1,y1,x2,y2,temp,label,
  909 + //registra os pontos e calcula a distancia
  910 + per = 0,
  911 + trecho = 0,
  912 + area = 0;
  913 + i3GEO.analise.medeArea.pontos.xpt.push(point.x);
  914 + i3GEO.analise.medeArea.pontos.ypt.push(point.y);
  915 + n = i3GEO.analise.medeArea.pontos.ypt.length;
  916 + if(n > 1){
  917 + x1 = i3GEO.analise.medeArea.pontos.xpt[n-2];
  918 + y1 = i3GEO.analise.medeArea.pontos.ypt[n-2];
  919 + x2 = point.x;
  920 + y2 = point.y;
  921 + //projeta
  922 + if(i3GEO.Interface.openlayers.googleLike){
  923 + temp = i3GEO.util.extOSM2Geo(x1+" "+y1+" "+x2+" "+y2);
  924 + temp = temp.split(" ");
  925 + x1 = temp[0];
  926 + y1 = temp[1];
  927 + x2 = temp[2];
  928 + y2 = temp[3];
  929 + }
  930 + trecho = i3GEO.calculo.distancia(x1,y1,x2,y2);
  931 + i3GEO.analise.medeArea.pontos.dist.push(trecho);
  932 + per = i3GEO.analise.medeArea.openlayers.somaDist();
  933 + //soma ate o primeiro ponto
  934 + x1 = i3GEO.analise.medeArea.pontos.xpt[0];
  935 + y1 = i3GEO.analise.medeArea.pontos.ypt[0];
  936 + //projeta
  937 + if(i3GEO.Interface.openlayers.googleLike){
  938 + temp = i3GEO.util.extOSM2Geo(x1+" "+y1+" "+x2+" "+y2);
  939 + temp = temp.split(" ");
  940 + x1 = temp[0];
  941 + y1 = temp[1];
  942 + x2 = temp[2];
  943 + y2 = temp[3];
  944 + }
  945 + per += i3GEO.calculo.distancia(x1,y1,x2,y2);
  946 + //desenha ponto
  947 + //if($i("parartextos") && $i("parartextos").checked === true ){
  948 + label = new OpenLayers.Feature.Vector(
  949 + new OpenLayers.Geometry.Point(point.x,point.y),
  950 + {
  951 + origem: "medeAreaExcluir"
  952 + },
  953 + {
  954 + graphicName: "square",
  955 + pointRadius: 3,
  956 + strokeColor: "black",
  957 + graphicOpacity: 1,
  958 + strokeWidth: 1,
  959 + fillColor: "white",
  960 + label: trecho.toFixed(3),
  961 + labelAlign: "rb",
  962 + fontColor: estilo.textcolor,
  963 + fontSize: 12,
  964 + fontWeight: "bold"
  965 + }
  966 + );
  967 + i3GEO.desenho.layergrafico.addFeatures([label]);
  968 + if(n > 2){
  969 + area = poligono.getGeodesicArea();
  970 + }
  971 + }
  972 + i3GEO.analise.medeArea.openlayers.mostraTotal(per,area);
  973 + }
  974 + }
  975 + }
  976 + );
  977 + i3geoOL.addControl(poligono);
  978 + }
  979 + },
  980 + /**
  981 + * Soma os valores de distancia guardados em pontos.dist
  982 + */
  983 + somaDist: function(){
  984 + var n,i,
  985 + total = 0;
  986 + n = i3GEO.analise.medeArea.pontos.dist.length;
  987 + for(i=0;i<n;i++){
  988 + total += i3GEO.analise.medeArea.pontos.dist[i];
  989 + }
  990 + return total;
  991 + },
  992 + /**
  993 + * Fecha a janela que mostra os dados
  994 + * Pergunta ao usuario se os graficos devem ser removidos
  995 + * Os graficos sao marcados com o atributo "origem"
  996 + * Os raios e pontos sao sempre removidos
  997 + */
  998 + fechaJanela: function(){
  999 + var temp,
  1000 + controle = i3geoOL.getControlsBy("id","i3GeoMedeArea"),
  1001 + f = i3GEO.desenho.layergrafico.getFeaturesByAttribute("origem","medeArea");
  1002 + if(controle.length > 0){
  1003 + controle[0].deactivate();
  1004 + i3geoOL.removeControl(controle[0]);
  1005 + }
  1006 + if(f && f.length > 0){
  1007 + temp = window.confirm($trad("x94"));
  1008 + if(temp){
  1009 + i3GEO.desenho.layergrafico.destroyFeatures(f);
870 } 1010 }
871 - catch(men){  
872 - if(typeof(console) !== 'undefined'){console.error(men);} 1011 + }
  1012 + f = i3GEO.desenho.layergrafico.getFeaturesByAttribute("origem","medeAreaExcluir");
  1013 + if(f && f.length > 0){
  1014 + i3GEO.desenho.layergrafico.destroyFeatures(f);
  1015 + }
  1016 + },
  1017 + /**
  1018 + * Mostra a totalizacao das linhas ja digitalizadas
  1019 + */
  1020 + mostraTotal: function(per,area){
  1021 + var mostra = $i("mostraarea_calculo"),
  1022 + texto;
  1023 + if (mostra){
  1024 + texto = "<b>&Aacute;rea:</b> "+(area/1000000).toFixed(3)+" km2"+
  1025 + "<br><b>&Aacute;rea:</b> "+(area/10000).toFixed(2)+" ha"+
  1026 + "<br><b>per&iacute;metro:</b> "+(per).toFixed(2)+" km"+
  1027 + "<br>"+$trad("x25")+": "+i3GEO.calculo.metododistancia;
  1028 + mostra.innerHTML = texto;
  1029 + }
  1030 + },
  1031 + /**
  1032 + * Mostra o valor do trecho entre o ultimo ponto clicado e a posicao do mouse
  1033 + */
  1034 + mostraParcial: function(trecho,per,area,direcao){
  1035 + var mostra = $i("mostraarea_calculo_parcial"),
  1036 + texto;
  1037 + if (mostra){
  1038 + texto = "<b>&Aacute;rea:</b> "+(area/1000000).toFixed(3)+" km2"+
  1039 + "<br><b>&Aacute;rea:</b> "+(area/10000).toFixed(2)+" ha"+
  1040 + "<br><b>trecho:</b> "+trecho.toFixed(3)+" km"+
  1041 + "<br><b>per&iacute;metro:</b> "+(per).toFixed(3)+" km" +
  1042 + "<br><b>"+$trad("x23")+" (DMS):</b> "+direcao.toFixed(4);
  1043 + mostra.innerHTML = texto;
  1044 + }
  1045 + }
  1046 + },
  1047 + googlemaps: {
  1048 + inicia: function(){
  1049 + var x,y,ll1,ll2,d,
  1050 + calculo = i3GEO.calculo,
  1051 + montacontainer = function(){
  1052 + var desenho = i3GEO.desenho;
  1053 + $i("mostraarea_calculo").innerHTML = "Clique no mapa para desenhar o poligono. Clique duas vezes para concluir";
  1054 + i3GEO.barraDeBotoes.ativaIcone("area");
  1055 + g_tipoacao = "area";
  1056 + desenho.criaContainerRichdraw();
  1057 + desenho.richdraw.lineColor = "green";
  1058 + desenho.richdraw.lineWidth = "2px";
  1059 + };
  1060 + i3GEO.analise.medeArea.criaJanela();
  1061 + if (g_tipoacao !== "area"){
  1062 + $i("mostraarea_calculo").innerHTML = "";
  1063 + if(i3GEO.eventos.MOUSECLIQUE.toString().search("i3GEO.analise.medeArea.clique()") < 0)
  1064 + {i3GEO.eventos.MOUSECLIQUE.push("i3GEO.analise.medeArea.clique()");}
  1065 + if(i3GEO.eventos.MOUSEMOVE.toString().search("i3GEO.analise.medeArea.movimento()") < 0)
  1066 + {i3GEO.eventos.MOUSEMOVE.push("i3GEO.analise.medeArea.movimento()");}
  1067 + if(i3GEO.eventos.NAVEGAMAPA.toString().search("i3GEO.analise.medeArea.fechaJanela()") < 0)
  1068 + {i3GEO.eventos.NAVEGAMAPA.push("i3GEO.analise.medeArea.fechaJanela()");}
  1069 + //
  1070 + //a API do Openlayers e GoogleMaps tem uma funcao propria de obtencao da resolucao de cada pixel
  1071 + //essa funcao e embutida em i3GEO.calculo.tela2dd
  1072 + //
  1073 + if(i3GEO.util.in_array(i3GEO.Interface.ATUAL,["openlayers","googlemaps"])){
  1074 + x = parseInt(i3GEO.parametros.w / 2,10);
  1075 + y = parseInt(i3GEO.parametros.h / 2,10);
  1076 + ll1 = calculo.tela2dd(x,y,"","");
  1077 + ll2 = calculo.tela2dd(x + 1,y,"","");
  1078 + d = calculo.distancia(ll1[0],ll1[1],ll2[0],ll2[1]);
  1079 + d = d * 1000;
  1080 + g_areapixel = d * d;
  1081 + g_areapixel < 0 ? i3GEO.janela.tempoMsg("Nao e possivel calcular a area. Entre em contato com o administrador do sistema.") : montacontainer();
873 } 1082 }
874 - m = i3GEO.calculo.area(pontosdistobj.xtela,pontosdistobj.ytela,g_areapixel);  
875 - i3GEO.util.defineValor("mostraarea_calculo","innerHTML","<br>m2</b>= "+m.toFixed(2)+"<br><b>km2</b>= "+(m/1000000).toFixed(2)+"<br><b>ha</b>= "+(m/10000).toFixed(2)); 1083 + }
  1084 + else{i3GEO.desenho.richdraw.fecha();}
  1085 + },
  1086 + fechaJanela: function(){
  1087 + }
  1088 + },
  1089 + googleearth: {
  1090 + inicia: function(){
  1091 + var x,y,ll1,ll2,d,
  1092 + calculo = i3GEO.calculo,
  1093 + montacontainer = function(){
  1094 + var desenho = i3GEO.desenho;
  1095 + $i("mostraarea_calculo").innerHTML = "Clique no mapa para desenhar o poligono. Clique duas vezes para concluir";
  1096 + i3GEO.barraDeBotoes.ativaIcone("area");
  1097 + g_tipoacao = "area";
  1098 + desenho.criaContainerRichdraw();
  1099 + desenho.richdraw.lineColor = "green";
  1100 + desenho.richdraw.lineWidth = "2px";
  1101 + };
  1102 + i3GEO.analise.medeArea.criaJanela();
  1103 + if (g_tipoacao !== "area"){
  1104 + $i("mostraarea_calculo").innerHTML = "";
  1105 + if(i3GEO.eventos.MOUSECLIQUE.toString().search("i3GEO.analise.medeArea.clique()") < 0)
  1106 + {i3GEO.eventos.MOUSECLIQUE.push("i3GEO.analise.medeArea.clique()");}
  1107 + if(i3GEO.eventos.MOUSEMOVE.toString().search("i3GEO.analise.medeArea.movimento()") < 0)
  1108 + {i3GEO.eventos.MOUSEMOVE.push("i3GEO.analise.medeArea.movimento()");}
  1109 + if(i3GEO.eventos.NAVEGAMAPA.toString().search("i3GEO.analise.medeArea.fechaJanela()") < 0)
  1110 + {i3GEO.eventos.NAVEGAMAPA.push("i3GEO.analise.medeArea.fechaJanela()");}
  1111 + //
  1112 + //a API do Openlayers e GoogleMaps tem uma funcao propria de obtencao da resolucao de cada pixel
  1113 + //essa funcao e embutida em i3GEO.calculo.tela2dd
  1114 + //
876 if(i3GEO.util.in_array(i3GEO.Interface.ATUAL,["openlayers","googlemaps"])){ 1115 if(i3GEO.util.in_array(i3GEO.Interface.ATUAL,["openlayers","googlemaps"])){
877 - i3GEO.util.insereMarca.cria(objposicaocursor.imgx,objposicaocursor.imgy,i3GEO.analise.medeArea.paraCalculo,"divGeometriasTemp","",i3GEO.configura.locaplic+"/imagens/estasel.png",6,6);  
878 - i3GEO.desenho.insereCirculo(objposicaocursor.imgx,objposicaocursor.imgy,3,"white"); 1116 + x = parseInt(i3GEO.parametros.w / 2,10);
  1117 + y = parseInt(i3GEO.parametros.h / 2,10);
  1118 + ll1 = calculo.tela2dd(x,y,"","");
  1119 + ll2 = calculo.tela2dd(x + 1,y,"","");
  1120 + d = calculo.distancia(ll1[0],ll1[1],ll2[0],ll2[1]);
  1121 + d = d * 1000;
  1122 + g_areapixel = d * d;
  1123 + g_areapixel < 0 ? i3GEO.janela.tempoMsg("Nao e possivel calcular a area. Entre em contato com o administrador do sistema.") : montacontainer();
879 } 1124 }
880 - if(i3GEO.Interface.ATUAL === "googleearth")  
881 - {i3GEO.util.insereMarca.cria(objposicaocursor.ddx,objposicaocursor.ddy,i3GEO.analise.medeArea.paraCalculo,"divGeometriasTemp","");}  
882 } 1125 }
  1126 + else{i3GEO.desenho.richdraw.fecha();}
883 }, 1127 },
884 - /* 1128 + fechaJanela: function(){
  1129 + }
  1130 + },
  1131 +
  1132 +
  1133 +
  1134 + ////////////////////////////////////////////
  1135 + /*
  1136 + Adiciona uma marca na tela e realiza o calculo de distancia dos pontos inseridos
  1137 + */
  1138 + clique: function(){
  1139 + var n,m;
  1140 + pontosdistobj = i3GEO.analise.pontosdistobj;
  1141 + if (g_tipoacao === "area"){
  1142 + n = pontosdistobj.xpt.length;
  1143 + pontosdistobj.xpt[n] = objposicaocursor.ddx;
  1144 + pontosdistobj.ypt[n] = objposicaocursor.ddy;
  1145 + pontosdistobj.xtela[n] = objposicaocursor.telax;
  1146 + pontosdistobj.ytela[n] = objposicaocursor.telay;
  1147 + pontosdistobj.ximg[n] = objposicaocursor.imgx;
  1148 + pontosdistobj.yimg[n] = objposicaocursor.imgy;
  1149 + pontosdistobj.dist[n] = 0;
  1150 + //inclui a linha para ligar com o ponto inicial
  1151 + if (n === 0){
  1152 + try {
  1153 + pontosdistobj.linhastemp = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, pontosdistobj.ximg[n]-1,pontosdistobj.yimg[n]-1,pontosdistobj.ximg[0]-1,pontosdistobj.yimg[0]-1);
  1154 + }
  1155 + catch(e){
  1156 + if(typeof(console) !== 'undefined'){console.error(e);}
  1157 + }
  1158 + }
  1159 + else{
  1160 + if(navm)
  1161 + {i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, (pontosdistobj.ximg[n-1]),pontosdistobj.yimg[n-1],(pontosdistobj.ximg[n]),pontosdistobj.yimg[n]);}
  1162 + //parece qe tem um problema de versao do ie aqui
  1163 + //if(navm)
  1164 + //{i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, (pontosdistobj.ximg[n-1])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n-1],(pontosdistobj.ximg[n])-(i3GEO.parametros.w/2),pontosdistobj.yimg[n]);}
  1165 + }
  1166 + try{
  1167 + pontosdistobj.linhas[n] = i3GEO.desenho.richdraw.renderer.create(i3GEO.desenho.richdraw.mode, i3GEO.desenho.richdraw.fillColor, i3GEO.desenho.richdraw.lineColor, i3GEO.desenho.richdraw.lineWidth, pontosdistobj.ximg[n]-1,pontosdistobj.yimg[n]-1,pontosdistobj.ximg[n]-1,pontosdistobj.yimg[n]-1);
  1168 + }
  1169 + catch(men){
  1170 + if(typeof(console) !== 'undefined'){console.error(men);}
  1171 + }
  1172 + m = i3GEO.calculo.area(pontosdistobj.xtela,pontosdistobj.ytela,g_areapixel);
  1173 + i3GEO.util.defineValor("mostraarea_calculo","innerHTML","<br>m2</b>= "+m.toFixed(2)+"<br><b>km2</b>= "+(m/1000000).toFixed(2)+"<br><b>ha</b>= "+(m/10000).toFixed(2));
  1174 + if(i3GEO.util.in_array(i3GEO.Interface.ATUAL,["openlayers","googlemaps"])){
  1175 + i3GEO.util.insereMarca.cria(objposicaocursor.imgx,objposicaocursor.imgy,i3GEO.analise.medeArea.paraCalculo,"divGeometriasTemp","",i3GEO.configura.locaplic+"/imagens/estasel.png",6,6);
  1176 + i3GEO.desenho.insereCirculo(objposicaocursor.imgx,objposicaocursor.imgy,3,"white");
  1177 + }
  1178 + if(i3GEO.Interface.ATUAL === "googleearth")
  1179 + {i3GEO.util.insereMarca.cria(objposicaocursor.ddx,objposicaocursor.ddy,i3GEO.analise.medeArea.paraCalculo,"divGeometriasTemp","");}
  1180 + }
  1181 + },
  1182 + /*
885 Para o calculo de area e ativa o botao "pan" 1183 Para o calculo de area e ativa o botao "pan"
886 - */  
887 - paraCalculo: function(){  
888 - var botaoPan = $i("pan");  
889 - g_tipoacao = "";  
890 - botaoPan ? botaoPan.onclick.call() : i3GEO.barraDeBotoes.ativaBotoes();  
891 - },  
892 - /* 1184 + */
  1185 + paraCalculo: function(){
  1186 + var botaoPan = $i("pan");
  1187 + g_tipoacao = "";
  1188 + botaoPan ? botaoPan.onclick.call() : i3GEO.barraDeBotoes.ativaBotoes();
  1189 + },
  1190 + /*
893 Realiza o desenho do poligono conforme o usuario movimenta o mouse 1191 Realiza o desenho do poligono conforme o usuario movimenta o mouse
894 - */  
895 - movimento: function(){  
896 - var n,  
897 - pontosdistobj = i3GEO.analise.pontosdistobj;  
898 - if (g_tipoacao === "area"){  
899 - n = pontosdistobj.xpt.length;  
900 - if (n > 0){  
901 - i3GEO.desenho.aplica("resizePoligono",pontosdistobj.linhastemp,1);  
902 - i3GEO.desenho.aplica("resizeLinha",pontosdistobj.linhas[n-1],n);  
903 - } 1192 + */
  1193 + movimento: function(){
  1194 + var n,
  1195 + pontosdistobj = i3GEO.analise.pontosdistobj;
  1196 + if (g_tipoacao === "area"){
  1197 + n = pontosdistobj.xpt.length;
  1198 + if (n > 0){
  1199 + i3GEO.desenho.aplica("resizePoligono",pontosdistobj.linhastemp,1);
  1200 + i3GEO.desenho.aplica("resizeLinha",pontosdistobj.linhas[n-1],n);
904 } 1201 }
905 } 1202 }
906 } 1203 }
  1204 +}
907 }; 1205 };
classesjs/classe_desenho.js
@@ -62,32 +62,32 @@ i3GEO.desenho = { @@ -62,32 +62,32 @@ i3GEO.desenho = {
62 */ 62 */
63 estilos: { 63 estilos: {
64 "normal":{ 64 "normal":{
65 - fillcolor: '255,0,0',  
66 - linecolor: '0,0,0', 65 + fillcolor: '#ffffff',
  66 + linecolor: '#000000',
67 linewidth: '2', 67 linewidth: '2',
68 - circcolor: '255,255,255',  
69 - textcolor: '100,100,100' 68 + circcolor: '#ffffff',
  69 + textcolor: '#787A78'
70 }, 70 },
71 "palido":{ 71 "palido":{
72 - fillcolor: '100,100,100',  
73 - linecolor: '100,100,100', 72 + fillcolor: '#B5A8A8',
  73 + linecolor: '#BAA4AE',
74 linewidth: '1', 74 linewidth: '1',
75 - circcolor: '100,100,100',  
76 - textcolor: '100,100,100' 75 + circcolor: '#E0D7DC',
  76 + textcolor: '#787A78'
77 }, 77 },
78 "vermelho":{ 78 "vermelho":{
79 - fillcolor: '100,100,100',  
80 - linecolor: '255,0,0', 79 + fillcolor: '#E8ACAC',
  80 + linecolor: '#F50707',
81 linewidth: '1', 81 linewidth: '1',
82 - circcolor: '255,50,0',  
83 - textcolor: '200,200,200' 82 + circcolor: '#F09EA6',
  83 + textcolor: '#787A78'
84 }, 84 },
85 "verde":{ 85 "verde":{
86 - fillcolor: '100,100,100',  
87 - linecolor: '100,255,100', 86 + fillcolor: '#3CCC2F',
  87 + linecolor: '#0C6642',
88 linewidth: '1', 88 linewidth: '1',
89 - circcolor: '0,255,0',  
90 - textcolor: '0,0,0' 89 + circcolor: '#C7D9D2',
  90 + textcolor: '#787A78'
91 } 91 }
92 }, 92 },
93 //@TODO remover apos refatorar codigo 93 //@TODO remover apos refatorar codigo