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 259 i3GEO.analise.medeDistancia.criaJanela();
260 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 265 criaJanela: function(){
266 266 var novoel,ins,imagemxy,janela;
... ... @@ -367,14 +367,14 @@ i3GEO.analise = {
367 367 var f = new OpenLayers.Feature.Vector(
368 368 feature,
369 369 {
370   - strokeWidth: estilo.linewidth,
371   - strokeColor: estilo.linecolor,
372 370 origem: "medeDistancia"
373 371 },
374 372 {
375 373 graphicName: "square",
376 374 pointRadius: 10,
377   - graphicOpacity: 1
  375 + graphicOpacity: 1,
  376 + strokeWidth: estilo.linewidth,
  377 + strokeColor: estilo.linecolor
378 378 }
379 379 );
380 380 i3GEO.desenho.layergrafico.addFeatures([f]);
... ... @@ -442,12 +442,12 @@ i3GEO.analise = {
442 442 30
443 443 ),
444 444 {
445   - strokeWidth: 1,
446 445 origem: "medeDistanciaExcluir"
447 446 },
448 447 {
449 448 fill: false,
450   - strokeColor: "#FFFFFF"
  449 + strokeColor: estilo.circcolor,
  450 + strokeWidth: 1
451 451 }
452 452 );
453 453 i3GEO.desenho.layergrafico.addFeatures([circ]);
... ... @@ -468,7 +468,7 @@ i3GEO.analise = {
468 468 fillColor: "white",
469 469 label: trecho.toFixed(3),
470 470 labelAlign: "rb",
471   - fontColor: "gray",
  471 + fontColor: estilo.textcolor,
472 472 fontSize: 12,
473 473 fontWeight: "bold"
474 474 }
... ... @@ -715,7 +715,7 @@ i3GEO.analise = {
715 715 }
716 716 },
717 717 /*
718   - Classe: i3GEO.analise.medeArea
  718 + i3GEO.analise.medeArea
719 719  
720 720 Ativa e controla a opcao de medicao de area.
721 721  
... ... @@ -726,6 +726,10 @@ i3GEO.analise = {
726 726 Para mostrar o resultado do calculo, e incluido um div especifico.
727 727 */
728 728 medeArea:{
  729 + /**
  730 + * Armazena os pontos clicados para realizar os calculos
  731 + */
  732 + pontos: {},
729 733 /*
730 734 Function: inicia
731 735  
... ... @@ -734,8 +738,9 @@ i3GEO.analise = {
734 738 Sao registrados os eventos de clique sobre o mapa e fechamento da janela de resultados
735 739 */
736 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 742 i3GEO.eventos.cliquePerm.desativa();
  743 + //@TODO remover apos concluir a refatoracao do codigo
739 744 i3GEO.analise.pontosdistobj = {
740 745 xpt: [],
741 746 ypt: [],
... ... @@ -748,42 +753,8 @@ i3GEO.analise = {
748 753 linhas: [],
749 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 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 760 Cria a janela para mostrar os resultados da medicao
... ... @@ -797,6 +768,7 @@ i3GEO.analise = {
797 768 '<div class="bd" style="text-align:left;padding:3px;font-size:10px" >' +
798 769 'Estilo: '+i3GEO.desenho.caixaEstilos()+'<br>' +
799 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 772 '</div>';
801 773 novoel.innerHTML = ins;
802 774 novoel.style.borderColor="gray";
... ... @@ -821,87 +793,413 @@ i3GEO.analise = {
821 793 fechaJanela: function(){
822 794 var janela;
823 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 805 janela = YAHOO.i3GEO.janela.manager.find("mostraarea");
831 806 if(janela){
832 807 YAHOO.i3GEO.janela.manager.remove(janela);
833 808 janela.destroy();
834 809 }
835 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 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 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 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 62 */
63 63 estilos: {
64 64 "normal":{
65   - fillcolor: '255,0,0',
66   - linecolor: '0,0,0',
  65 + fillcolor: '#ffffff',
  66 + linecolor: '#000000',
67 67 linewidth: '2',
68   - circcolor: '255,255,255',
69   - textcolor: '100,100,100'
  68 + circcolor: '#ffffff',
  69 + textcolor: '#787A78'
70 70 },
71 71 "palido":{
72   - fillcolor: '100,100,100',
73   - linecolor: '100,100,100',
  72 + fillcolor: '#B5A8A8',
  73 + linecolor: '#BAA4AE',
74 74 linewidth: '1',
75   - circcolor: '100,100,100',
76   - textcolor: '100,100,100'
  75 + circcolor: '#E0D7DC',
  76 + textcolor: '#787A78'
77 77 },
78 78 "vermelho":{
79   - fillcolor: '100,100,100',
80   - linecolor: '255,0,0',
  79 + fillcolor: '#E8ACAC',
  80 + linecolor: '#F50707',
81 81 linewidth: '1',
82   - circcolor: '255,50,0',
83   - textcolor: '200,200,200'
  82 + circcolor: '#F09EA6',
  83 + textcolor: '#787A78'
84 84 },
85 85 "verde":{
86   - fillcolor: '100,100,100',
87   - linecolor: '100,255,100',
  86 + fillcolor: '#3CCC2F',
  87 + linecolor: '#0C6642',
88 88 linewidth: '1',
89   - circcolor: '0,255,0',
90   - textcolor: '0,0,0'
  89 + circcolor: '#C7D9D2',
  90 + textcolor: '#787A78'
91 91 }
92 92 },
93 93 //@TODO remover apos refatorar codigo
... ...