Commit 24de638f479565c33677ee6d05031a9b64dc4cbc
1 parent
d6e4bb78
Exists in
master
and in
7 other branches
Alteração na ferramenta de cálculo de área para utilizar a API do OpenLayers nessa interface
Showing
2 changed files
with
423 additions
and
125 deletions
Show diff stats
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>Área:</b> "+(area/1000000).toFixed(3)+" km2"+ | ||
| 1025 | + "<br><b>Área:</b> "+(area/10000).toFixed(2)+" ha"+ | ||
| 1026 | + "<br><b>perí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>Área:</b> "+(area/1000000).toFixed(3)+" km2"+ | ||
| 1039 | + "<br><b>Área:</b> "+(area/10000).toFixed(2)+" ha"+ | ||
| 1040 | + "<br><b>trecho:</b> "+trecho.toFixed(3)+" km"+ | ||
| 1041 | + "<br><b>perí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 |