Commit 73aff5d074f704b109a97c7b5ea0da26d608c905

Authored by Edmar Moretti
1 parent 83da6908

Reformulação do código da ferramenta de cálculo de distâncias para permitir a mo…

…dificação da função que mostra os totais e as parciais
ferramentas/area/index.js
@@ -4,23 +4,14 @@ if (typeof (i3GEOF) === 'undefined') { @@ -4,23 +4,14 @@ if (typeof (i3GEOF) === 'undefined') {
4 i3GEOF.area = 4 i3GEOF.area =
5 { 5 {
6 position: [150,0], 6 position: [150,0],
7 - /**  
8 - * Armazena os pontos clicados para realizar os calculos  
9 - */  
10 - pontos : {},  
11 - /**  
12 - * Armazena o WKT da ultima linha  
13 - */  
14 - ultimoWkt : "",  
15 - /**  
16 - * Armazena a ultima medida  
17 - */  
18 - ultimaMedida : "",  
19 renderFunction: i3GEO.janela.formModal, 7 renderFunction: i3GEO.janela.formModal,
20 _parameters : { 8 _parameters : {
21 "mustache": "", 9 "mustache": "",
22 "idContainer": "i3GEOareaContainer", 10 "idContainer": "i3GEOareaContainer",
23 - "namespace": "area" 11 + "namespace": "area",
  12 + "pontos" : {},
  13 + "ultimoWkt": "",
  14 + "ultimaMedida" : ""
24 }, 15 },
25 start : function(){ 16 start : function(){
26 var p = this._parameters, 17 var p = this._parameters,
@@ -45,8 +36,9 @@ i3GEOF.area = @@ -45,8 +36,9 @@ i3GEOF.area =
45 //nao use this aqui 36 //nao use this aqui
46 i3GEOF.area.renderFunction.call(); 37 i3GEOF.area.renderFunction.call();
47 i3GEO.analise.pontos = {}; 38 i3GEO.analise.pontos = {};
48 - i3GEOF.area.ultimaMedida = ""; 39 + i3GEOF.area._parameters.ultimaMedida = "";
49 i3GEOF.area[i3GEO.Interface["ATUAL"]].fechaJanela(); 40 i3GEOF.area[i3GEO.Interface["ATUAL"]].fechaJanela();
  41 + i3GEOF.area._parameters.pontos = {};
50 }, 42 },
51 html:function() { 43 html:function() {
52 var p = this._parameters, 44 var p = this._parameters,
@@ -61,7 +53,7 @@ i3GEOF.area = @@ -61,7 +53,7 @@ i3GEOF.area =
61 this, 53 this,
62 { 54 {
63 texto: Mustache.render(p.mustache, hash), 55 texto: Mustache.render(p.mustache, hash),
64 - header: "<span class='copyToMemory' onclick='i3GEO.util.copyToClipboard(i3GEOF.area.ultimaMedida);return false;'></span>", 56 + header: "<span class='copyToMemory' onclick='i3GEO.util.copyToClipboard(i3GEOF.area._parameters.ultimaMedida);return false;'></span>",
65 onclose: i3f.destroy 57 onclose: i3f.destroy
66 }); 58 });
67 i3GEO.eventos.cliquePerm.desativa(); 59 i3GEO.eventos.cliquePerm.desativa();
@@ -79,7 +71,7 @@ i3GEOF.area = @@ -79,7 +71,7 @@ i3GEOF.area =
79 * Converte a lista de pontos em WKT 71 * Converte a lista de pontos em WKT
80 */ 72 */
81 pontos2wkt : function() { 73 pontos2wkt : function() {
82 - var pontos = [], x = i3GEOF.area.pontos.xpt, y = i3GEOF.area.pontos.ypt, n = x.length, i; 74 + var pontos = [], x = i3GEOF.area._parameters.pontos.xpt, y = i3GEOF.area._parameters.pontos.ypt, n = x.length, i;
83 for (i = 0; i < n; i++) { 75 for (i = 0; i < n; i++) {
84 pontos.push(x[i] + " " + y[i]); 76 pontos.push(x[i] + " " + y[i]);
85 } 77 }
@@ -134,7 +126,7 @@ i3GEOF.area = @@ -134,7 +126,7 @@ i3GEOF.area =
134 i3GEO.desenho.layergrafico.getSource().addFeature(evt.feature); 126 i3GEO.desenho.layergrafico.getSource().addFeature(evt.feature);
135 }); 127 });
136 m.draw.on('drawstart', function(evt) { 128 m.draw.on('drawstart', function(evt) {
137 - i3GEOF.area.pontos = { 129 + i3GEOF.area._parameters.pontos = {
138 xpt : [], 130 xpt : [],
139 ypt : [], 131 ypt : [],
140 dist : [] 132 dist : []
@@ -171,10 +163,10 @@ i3GEOF.area = @@ -171,10 +163,10 @@ i3GEOF.area =
171 var temp,sourceProj,coordinates,wgs84Sphere, per, area, n, x1, y1, x2, y2, trecho, direcao, 163 var temp,sourceProj,coordinates,wgs84Sphere, per, area, n, x1, y1, x2, y2, trecho, direcao,
172 coord = point.getCoordinates(); 164 coord = point.getCoordinates();
173 165
174 - n = i3GEOF.area.pontos.ypt.length; 166 + n = i3GEOF.area._parameters.pontos.ypt.length;
175 if (n > 1) { 167 if (n > 1) {
176 - x1 = i3GEOF.area.pontos.xpt[n - 1];  
177 - y1 = i3GEOF.area.pontos.ypt[n - 1]; 168 + x1 = i3GEOF.area._parameters.pontos.xpt[n - 1];
  169 + y1 = i3GEOF.area._parameters.pontos.ypt[n - 1];
178 x2 = coord[0]; 170 x2 = coord[0];
179 y2 = coord[1]; 171 y2 = coord[1];
180 // projeta 172 // projeta
@@ -193,8 +185,8 @@ i3GEOF.area = @@ -193,8 +185,8 @@ i3GEOF.area =
193 direcao = direcao[0]; 185 direcao = direcao[0];
194 per = i3GEOF.area.openlayers.somaDist(); 186 per = i3GEOF.area.openlayers.somaDist();
195 // soma ate o primeiro ponto 187 // soma ate o primeiro ponto
196 - x1 = i3GEOF.area.pontos.xpt[0];  
197 - y1 = i3GEOF.area.pontos.ypt[0]; 188 + x1 = i3GEOF.area._parameters.pontos.xpt[0];
  189 + y1 = i3GEOF.area._parameters.pontos.ypt[0];
198 // projeta 190 // projeta
199 if (i3GEO.Interface.openlayers.googleLike) { 191 if (i3GEO.Interface.openlayers.googleLike) {
200 temp = i3GEO.util.extOSM2Geo(x1 + " " + y1); 192 temp = i3GEO.util.extOSM2Geo(x1 + " " + y1);
@@ -220,14 +212,14 @@ i3GEOF.area = @@ -220,14 +212,14 @@ i3GEOF.area =
220 var wgs84Sphere,area,coordinates,sourceProj,n, x1, y1, x2, y2, trecho, temp, 212 var wgs84Sphere,area,coordinates,sourceProj,n, x1, y1, x2, y2, trecho, temp,
221 coord = point.getCoordinates(), 213 coord = point.getCoordinates(),
222 total = 0; 214 total = 0;
223 - i3GEOF.area.pontos.xpt.push(coord[0]);  
224 - i3GEOF.area.pontos.ypt.push(coord[1]); 215 + i3GEOF.area._parameters.pontos.xpt.push(coord[0]);
  216 + i3GEOF.area._parameters.pontos.ypt.push(coord[1]);
225 i3GEO.analise.pontos.xpt.push(coord[0]); 217 i3GEO.analise.pontos.xpt.push(coord[0]);
226 i3GEO.analise.pontos.ypt.push(coord[1]); 218 i3GEO.analise.pontos.ypt.push(coord[1]);
227 - n = i3GEOF.area.pontos.ypt.length; 219 + n = i3GEOF.area._parameters.pontos.ypt.length;
228 if (n > 1) { 220 if (n > 1) {
229 - x1 = i3GEOF.area.pontos.xpt[n - 2];  
230 - y1 = i3GEOF.area.pontos.ypt[n - 2]; 221 + x1 = i3GEOF.area._parameters.pontos.xpt[n - 2];
  222 + y1 = i3GEOF.area._parameters.pontos.ypt[n - 2];
231 x2 = coord[0]; 223 x2 = coord[0];
232 y2 = coord[1]; 224 y2 = coord[1];
233 raio = new ol.geom.LineString([[x1, y1],[x2, y2]]).getLength(); 225 raio = new ol.geom.LineString([[x1, y1],[x2, y2]]).getLength();
@@ -241,7 +233,7 @@ i3GEOF.area = @@ -241,7 +233,7 @@ i3GEOF.area =
241 y2 = temp[3]; 233 y2 = temp[3];
242 } 234 }
243 trecho = i3GEO.calculo.distancia(x1, y1, x2, y2); 235 trecho = i3GEO.calculo.distancia(x1, y1, x2, y2);
244 - i3GEOF.area.pontos.dist.push(trecho); 236 + i3GEOF.area._parameters.pontos.dist.push(trecho);
245 total = i3GEOF.area.openlayers.somaDist(); 237 total = i3GEOF.area.openlayers.somaDist();
246 238
247 sourceProj = i3geoOL.getView().getProjection(); 239 sourceProj = i3geoOL.getView().getProjection();
@@ -251,7 +243,7 @@ i3GEOF.area = @@ -251,7 +243,7 @@ i3GEOF.area =
251 area = Math.abs(wgs84Sphere.geodesicArea(coordinates)); 243 area = Math.abs(wgs84Sphere.geodesicArea(coordinates));
252 244
253 i3GEOF.area.openlayers.mostraTotal(total, area); 245 i3GEOF.area.openlayers.mostraTotal(total, area);
254 - i3GEOF.area.ultimoWkt = i3GEOF.area.pontos2wkt(); 246 + i3GEOF.area._parameters.ultimoWkt = i3GEOF.area.pontos2wkt();
255 } 247 }
256 }, 248 },
257 /** 249 /**
@@ -259,9 +251,9 @@ i3GEOF.area = @@ -259,9 +251,9 @@ i3GEOF.area =
259 */ 251 */
260 somaDist : function() { 252 somaDist : function() {
261 var n, i, total = 0; 253 var n, i, total = 0;
262 - n = i3GEOF.area.pontos.dist.length; 254 + n = i3GEOF.area._parameters.pontos.dist.length;
263 for (i = 0; i < n; i++) { 255 for (i = 0; i < n; i++) {
264 - total += i3GEOF.area.pontos.dist[i]; 256 + total += i3GEOF.area._parameters.pontos.dist[i];
265 } 257 }
266 return total; 258 return total;
267 }, 259 },
@@ -322,7 +314,7 @@ i3GEOF.area = @@ -322,7 +314,7 @@ i3GEOF.area =
322 + i3GEO.calculo.metododistancia 314 + i3GEO.calculo.metododistancia
323 + "</div>"; 315 + "</div>";
324 mostra.innerHTML = texto; 316 mostra.innerHTML = texto;
325 - i3GEOF.area.ultimaMedida = $.number((area / 1000000),3,$trad("dec"),$trad("mil")) + " km2"; 317 + i3GEOF.area._parameters.ultimaMedida = $.number((area / 1000000),3,$trad("dec"),$trad("mil")) + " km2";
326 } 318 }
327 }, 319 },
328 /** 320 /**
@@ -362,7 +354,7 @@ i3GEOF.area = @@ -362,7 +354,7 @@ i3GEOF.area =
362 * layer para receber os graficos 354 * layer para receber os graficos
363 */ 355 */
364 inicia : function() { 356 inicia : function() {
365 - i3GEOF.area.pontos = { 357 + i3GEOF.area._parameters.pontos = {
366 xpt : [], 358 xpt : [],
367 ypt : [], 359 ypt : [],
368 dist : [] 360 dist : []
@@ -403,7 +395,7 @@ i3GEOF.area = @@ -403,7 +395,7 @@ i3GEOF.area =
403 i3GEO.desenho.googlemaps.shapes.push(pontos.line); 395 i3GEO.desenho.googlemaps.shapes.push(pontos.line);
404 pontos = null; 396 pontos = null;
405 } 397 }
406 - i3GEOF.area.ultimoWkt = i3GEOF.area.pontos2wkt(); 398 + i3GEOF.area._parameters.ultimoWkt = i3GEOF.area.pontos2wkt();
407 }; 399 };
408 evtclick = google.maps.event.addListener(i3GeoMap, "click", function(evt) { 400 evtclick = google.maps.event.addListener(i3GeoMap, "click", function(evt) {
409 i3GEO.eventos.cliquePerm.desativa(); 401 i3GEO.eventos.cliquePerm.desativa();
@@ -413,8 +405,8 @@ i3GEOF.area = @@ -413,8 +405,8 @@ i3GEOF.area =
413 pontos.mvcLine.push(evt.latLng); 405 pontos.mvcLine.push(evt.latLng);
414 pontos.xpt.push(evt.latLng.lng()); 406 pontos.xpt.push(evt.latLng.lng());
415 pontos.ypt.push(evt.latLng.lat()); 407 pontos.ypt.push(evt.latLng.lat());
416 - i3GEOF.area.pontos.xpt.push(evt.latLng.lng());  
417 - i3GEOF.area.pontos.ypt.push(evt.latLng.lat()); 408 + i3GEOF.area._parameters.pontos.xpt.push(evt.latLng.lng());
  409 + i3GEOF.area._parameters.pontos.ypt.push(evt.latLng.lat());
418 // desenha um circulo 410 // desenha um circulo
419 if (pontos.mvcLine.getLength() > 0) { 411 if (pontos.mvcLine.getLength() > 0) {
420 per = google.maps.geometry.spherical.computeLength(pontos.mvcLine); 412 per = google.maps.geometry.spherical.computeLength(pontos.mvcLine);
@@ -545,7 +537,7 @@ i3GEOF.area = @@ -545,7 +537,7 @@ i3GEOF.area =
545 + ": " 537 + ": "
546 + i3GEO.calculo.metododistancia; 538 + i3GEO.calculo.metododistancia;
547 mostra.innerHTML = texto + "<hr>"; 539 mostra.innerHTML = texto + "<hr>";
548 - i3GEOF.area.ultimaMedida = (area / 1000000).toFixed(3) + " km2"; 540 + i3GEOF.area._parameters.ultimaMedida = (area / 1000000).toFixed(3) + " km2";
549 } 541 }
550 }, 542 },
551 /** 543 /**
ferramentas/distancia/index.js
@@ -3,24 +3,14 @@ if (typeof (i3GEOF) === &#39;undefined&#39;) { @@ -3,24 +3,14 @@ if (typeof (i3GEOF) === &#39;undefined&#39;) {
3 } 3 }
4 i3GEOF.distancia = 4 i3GEOF.distancia =
5 { 5 {
6 - position: [150,0],  
7 - /**  
8 - * Armazena os pontos clicados para realizar os calculos  
9 - */  
10 - pontos : {},  
11 - /**  
12 - * Armazena o WKT da ultima linha  
13 - */  
14 - ultimoWkt : "",  
15 - /**  
16 - * Armazena a ultima medida  
17 - */  
18 - ultimaMedida : "", 6 + position: [150,0],
19 renderFunction: i3GEO.janela.formModal, 7 renderFunction: i3GEO.janela.formModal,
20 _parameters : { 8 _parameters : {
21 "mustache": "", 9 "mustache": "",
22 "idContainer": "i3GEOdistanciaContainer", 10 "idContainer": "i3GEOdistanciaContainer",
23 - "namespace": "distancia" 11 + "namespace": "distancia",
  12 + "pontos": {},
  13 + "ultimoWkt": "",
24 }, 14 },
25 start : function(){ 15 start : function(){
26 var p = this._parameters, 16 var p = this._parameters,
@@ -45,11 +35,12 @@ i3GEOF.distancia = @@ -45,11 +35,12 @@ i3GEOF.distancia =
45 //nao use this aqui 35 //nao use this aqui
46 i3GEOF.distancia.renderFunction.call(); 36 i3GEOF.distancia.renderFunction.call();
47 i3GEO.analise.pontos = { 37 i3GEO.analise.pontos = {
48 - xpt : [],  
49 - ypt : []  
50 - };  
51 - i3GEOF.distancia.ultimaMedida = ""; 38 + xpt : [],
  39 + ypt : []
  40 + };
  41 + i3GEOF.distancia._parameters.ultimaMedida = "";
52 i3GEOF.distancia[i3GEO.Interface["ATUAL"]].fechaJanela(); 42 i3GEOF.distancia[i3GEO.Interface["ATUAL"]].fechaJanela();
  43 + i3GEOF.distancia._parameters.pontos = {};
53 }, 44 },
54 html:function() { 45 html:function() {
55 var p = this._parameters, 46 var p = this._parameters,
@@ -65,576 +56,582 @@ i3GEOF.distancia = @@ -65,576 +56,582 @@ i3GEOF.distancia =
65 this, 56 this,
66 { 57 {
67 texto: Mustache.render(p.mustache, hash), 58 texto: Mustache.render(p.mustache, hash),
68 - header: "<span class='copyToMemory' onclick='i3GEO.util.copyToClipboard(i3GEOF.distancia.ultimaMedida);return false;'></span>", 59 + header: "<span class='copyToMemory' onclick='i3GEO.util.copyToClipboard(i3GEOF.distancia._parameters.ultimaMedida);return false;'></span>",
69 onclose: i3f.destroy 60 onclose: i3f.destroy
70 }); 61 });
71 i3GEO.eventos.cliquePerm.desativa(); 62 i3GEO.eventos.cliquePerm.desativa();
72 i3GEOF.distancia[i3GEO.Interface["ATUAL"]].inicia(); 63 i3GEOF.distancia[i3GEO.Interface["ATUAL"]].inicia();
73 i3GEO.janela.snackBar({content: $trad("inicia",i3f.dicionario)}); 64 i3GEO.janela.snackBar({content: $trad("inicia",i3f.dicionario)});
74 }, 65 },
75 - perfil: function (){  
76 - var js = i3GEO.configura.locaplic + "/ferramentas/perfil/dependencias.php", temp = function() {  
77 - i3GEOF.perfil.iniciaJanelaFlutuante(i3GEO.analise.pontos);  
78 - };  
79 - i3GEO.util.scriptTag(js, temp, "i3GEOF.perfil_script");  
80 - },  
81 - isOn : function() {  
82 - if($i("i3GEOF.distancia")){  
83 - return true;  
84 - } else {  
85 - return false;  
86 - }  
87 - }, 66 + perfil: function (){
  67 + var js = i3GEO.configura.locaplic + "/ferramentas/perfil/dependencias.php", temp = function() {
  68 + i3GEOF.perfil.iniciaJanelaFlutuante(i3GEO.analise.pontos);
  69 + };
  70 + i3GEO.util.scriptTag(js, temp, "i3GEOF.perfil_script");
  71 + },
  72 + isOn : function() {
  73 + if($i("i3GEOF.distancia")){
  74 + return true;
  75 + } else {
  76 + return false;
  77 + }
  78 + },
88 79
89 - /**  
90 - * Converte a lista de pontos em WKT  
91 - */  
92 - pontos2wkt : function() {  
93 - var pontos = [], x = i3GEOF.distancia.pontos.xpt, y = i3GEOF.distancia.pontos.ypt, n = x.length, i;  
94 - for (i = 0; i < n; i++) {  
95 - pontos.push(x[i] + " " + y[i]);  
96 - }  
97 - return "LINESTRING(" + pontos.join(",") + ")";  
98 - },  
99 - removeFiguras : function(){  
100 - i3GEOF.distancia[i3GEO.Interface["ATUAL"]].removeFiguras();  
101 - },  
102 - /**  
103 - * Funcoes especificas da interface openlayers  
104 - */  
105 - openlayers : {  
106 - draw : "",  
107 - estilo: "",  
108 - featureListener : null,  
109 - //numero de pontos da geometria atual  
110 - //utilizado para saber se houve um clique ou nao  
111 - numpontos : 0,  
112 - removeControle : function() {  
113 - i3geoOL.removeInteraction(i3GEOF.distancia.openlayers.draw);  
114 - i3GEOF.distancia.openlayers.draw = "";  
115 - },  
116 - /**  
117 - * Inicializa o processo Cria a variavel para guardar os pontos Executa a funcao de inicializacao do desenho, que cria o  
118 - * layer para receber os graficos  
119 - */  
120 - inicia : function() {  
121 - i3GEOF.distancia.openlayers.estilo =  
122 - new ol.style.Style({  
123 - stroke: new ol.style.Stroke({  
124 - color: '#ffcc33',  
125 - width: 5  
126 - }),  
127 - fill: new ol.style.Fill({  
128 - color: 'rgba(255, 153, 0, 0.8)'  
129 - })  
130 - });  
131 - i3GEO.desenho.estiloPadrao = "normal";  
132 - var m = i3GEOF.distancia.openlayers;  
133 - i3GEO.desenho[i3GEO.Interface["ATUAL"]].inicia();  
134 - m.removeControle();  
135 - m.draw = new ol.interaction.Draw({  
136 - type : "LineString"  
137 - });  
138 - i3GEO.Interface.openlayers.parametrosMap.interactions[0].setActive(false);  
139 - m.draw.on("drawend", function(evt) {  
140 - evt.feature.setProperties({  
141 - origem : "medeDistancia"  
142 - });  
143 - var m = i3GEOF.distancia.openlayers;  
144 - evt.feature.setStyle(  
145 - new ol.style.Style({  
146 - stroke: new ol.style.Stroke({  
147 - color: i3GEO.desenho.estilos[i3GEO.desenho.estiloPadrao].linecolor,  
148 - width: 5  
149 - })  
150 - })  
151 - );  
152 - i3GEO.desenho.layergrafico.getSource().addFeature(evt.feature);  
153 - m.draw.setActive(false);  
154 - m.draw.setActive(true);  
155 - });  
156 - m.draw.on('drawstart', function(evt) {  
157 - i3GEOF.distancia.pontos = {  
158 - xpt : [],  
159 - ypt : [],  
160 - dist : []  
161 - };  
162 - //usado no perfil  
163 - i3GEO.analise.pontos = {  
164 - xpt : [],  
165 - ypt : []  
166 - };  
167 - var m = i3GEOF.distancia.openlayers,  
168 - sketch = evt.feature;  
169 - m.estilo = sketch.getStyle();  
170 - m.numpontos = 1;  
171 - m.featureListener = sketch.getGeometry().on('change', function(evt) {  
172 - var ponto,  
173 - geom = evt.target,  
174 - coords = geom.getCoordinates(),  
175 - n = coords.length,  
176 - m = i3GEOF.distancia.openlayers;  
177 - ponto = new ol.geom.Point(coords[n-1]);  
178 - if(m.numpontos === n-1){  
179 - //clicou  
180 - m.numpontos = n;  
181 - m.point(ponto);  
182 - }  
183 - else{  
184 - m.modify(ponto);  
185 - }  
186 - });  
187 - });  
188 - i3geoOL.addInteraction(m.draw);  
189 - },  
190 - modify : function(point) {  
191 - var temp, n, x1, y1, x2, y2, trecho, parcial, direcao,  
192 - coord = point.getCoordinates();  
193 - n = i3GEOF.distancia.pontos.ypt.length;  
194 - if (n > 0) {  
195 - x1 = i3GEOF.distancia.pontos.xpt[n - 1];  
196 - y1 = i3GEOF.distancia.pontos.ypt[n - 1];  
197 - x2 = coord[0];  
198 - y2 = coord[1];  
199 - // projeta  
200 - if (i3GEO.Interface.openlayers.googleLike) {  
201 - temp = i3GEO.util.extOSM2Geo(x1 + " " + y1 + " " + x2 + " " + y2);  
202 - temp = temp.split(" ");  
203 - x1 = temp[0];  
204 - y1 = temp[1];  
205 - x2 = temp[2];  
206 - y2 = temp[3];  
207 - }  
208 - //console.info(x1+" "+y1+" "+x2+" "+y2)  
209 - trecho = i3GEO.calculo.distancia(x1, y1, x2, y2);  
210 - parcial = i3GEOF.distancia.openlayers.somaDist();  
211 - direcao = i3GEO.calculo.direcao(x1, y1, x2, y2);  
212 - direcao = i3GEO.calculo.dd2dms(direcao, direcao);  
213 - direcao = direcao[0];  
214 - i3GEOF.distancia.openlayers.mostraParcial(trecho, parcial, direcao);  
215 - }  
216 - },  
217 - point : function(point) {  
218 - i3GEO.eventos.cliquePerm.desativa();  
219 - var n, x1, y1, x2, y2, trecho, temp, circ, label, raio,  
220 - estilo = i3GEO.desenho.estilos[i3GEO.desenho.estiloPadrao],  
221 - coord = point.getCoordinates(),  
222 - total = 0;  
223 - i3GEOF.distancia.pontos.xpt.push(coord[0]);  
224 - i3GEOF.distancia.pontos.ypt.push(coord[1]);  
225 - i3GEO.analise.pontos.xpt.push(coord[0]);  
226 - i3GEO.analise.pontos.ypt.push(coord[1]);  
227 - n = i3GEOF.distancia.pontos.ypt.length;  
228 - if (n > 1) {  
229 - x1 = i3GEOF.distancia.pontos.xpt[n - 2];  
230 - y1 = i3GEOF.distancia.pontos.ypt[n - 2];  
231 - x2 = coord[0];  
232 - y2 = coord[1];  
233 - raio = new ol.geom.LineString([[x1, y1],[x2, y2]]).getLength();  
234 - // projeta  
235 - if (i3GEO.Interface.openlayers.googleLike) {  
236 - temp = i3GEO.util.extOSM2Geo(x1 + " " + y1 + " " + x2 + " " + y2);  
237 - temp = temp.split(" ");  
238 - x1 = temp[0];  
239 - y1 = temp[1];  
240 - x2 = temp[2];  
241 - y2 = temp[3];  
242 - }  
243 - trecho = i3GEO.calculo.distancia(x1, y1, x2, y2);  
244 - i3GEOF.distancia.pontos.dist.push(trecho);  
245 - total = i3GEOF.distancia.openlayers.somaDist();  
246 - i3GEOF.distancia.openlayers.mostraTotal(trecho, total);  
247 - i3GEOF.distancia.ultimoWkt = i3GEOF.distancia.pontos2wkt();  
248 - // raio  
249 - if ($i("pararraios") && $i("pararraios").checked === true) { 80 + /**
  81 + * Converte a lista de pontos em WKT
  82 + */
  83 + pontos2wkt : function() {
  84 + var pontos = [], x = i3GEOF.distancia._parameters.pontos.xpt, y = i3GEOF.distancia._parameters.pontos.ypt, n = x.length, i;
  85 + for (i = 0; i < n; i++) {
  86 + pontos.push(x[i] + " " + y[i]);
  87 + }
  88 + return "LINESTRING(" + pontos.join(",") + ")";
  89 + },
  90 + removeFiguras : function(){
  91 + i3GEOF.distancia[i3GEO.Interface["ATUAL"]].removeFiguras();
  92 + },
  93 + mostraTotal : function(trecho, total){
  94 + i3GEOF.distancia[i3GEO.Interface["ATUAL"]].mostraTotal(trecho, total);
  95 + },
  96 + mostraParcial : function(trecho, parcial, direcao){
  97 + i3GEOF.distancia[i3GEO.Interface["ATUAL"]].mostraParcial(trecho, parcial, direcao);
  98 + },
  99 + /**
  100 + * Funcoes especificas da interface openlayers
  101 + */
  102 + openlayers : {
  103 + draw : "",
  104 + estilo: "",
  105 + featureListener : null,
  106 + //numero de pontos da geometria atual
  107 + //utilizado para saber se houve um clique ou nao
  108 + numpontos : 0,
  109 + removeControle : function() {
  110 + i3geoOL.removeInteraction(i3GEOF.distancia.openlayers.draw);
  111 + i3GEOF.distancia.openlayers.draw = "";
  112 + },
  113 + /**
  114 + * Inicializa o processo Cria a variavel para guardar os pontos Executa a funcao de inicializacao do desenho, que cria o
  115 + * layer para receber os graficos
  116 + */
  117 + inicia : function() {
  118 + i3GEOF.distancia.openlayers.estilo =
  119 + new ol.style.Style({
  120 + stroke: new ol.style.Stroke({
  121 + color: '#ffcc33',
  122 + width: 5
  123 + }),
  124 + fill: new ol.style.Fill({
  125 + color: 'rgba(255, 153, 0, 0.8)'
  126 + })
  127 + });
  128 + i3GEO.desenho.estiloPadrao = "normal";
  129 + var m = i3GEOF.distancia.openlayers;
  130 + i3GEO.desenho[i3GEO.Interface["ATUAL"]].inicia();
  131 + m.removeControle();
  132 + m.draw = new ol.interaction.Draw({
  133 + type : "LineString"
  134 + });
  135 + i3GEO.Interface.openlayers.parametrosMap.interactions[0].setActive(false);
  136 + m.draw.on("drawend", function(evt) {
  137 + evt.feature.setProperties({
  138 + origem : "medeDistancia"
  139 + });
  140 + var m = i3GEOF.distancia.openlayers;
  141 + evt.feature.setStyle(
  142 + new ol.style.Style({
  143 + stroke: new ol.style.Stroke({
  144 + color: i3GEO.desenho.estilos[i3GEO.desenho.estiloPadrao].linecolor,
  145 + width: 5
  146 + })
  147 + })
  148 + );
  149 + i3GEO.desenho.layergrafico.getSource().addFeature(evt.feature);
  150 + m.draw.setActive(false);
  151 + m.draw.setActive(true);
  152 + });
  153 + m.draw.on('drawstart', function(evt) {
  154 + i3GEOF.distancia._parameters.pontos = {
  155 + xpt : [],
  156 + ypt : [],
  157 + dist : []
  158 + };
  159 + //usado no perfil
  160 + i3GEO.analise.pontos = {
  161 + xpt : [],
  162 + ypt : []
  163 + };
  164 + var m = i3GEOF.distancia.openlayers,
  165 + sketch = evt.feature;
  166 + m.estilo = sketch.getStyle();
  167 + m.numpontos = 1;
  168 + m.featureListener = sketch.getGeometry().on('change', function(evt) {
  169 + var ponto,
  170 + geom = evt.target,
  171 + coords = geom.getCoordinates(),
  172 + n = coords.length,
  173 + m = i3GEOF.distancia.openlayers;
  174 + ponto = new ol.geom.Point(coords[n-1]);
  175 + if(m.numpontos === n-1){
  176 + //clicou
  177 + m.numpontos = n;
  178 + m.point(ponto);
  179 + }
  180 + else{
  181 + m.modify(ponto);
  182 + }
  183 + });
  184 + });
  185 + i3geoOL.addInteraction(m.draw);
  186 + },
  187 + modify : function(point) {
  188 + var temp, n, x1, y1, x2, y2, trecho, parcial, direcao,
  189 + coord = point.getCoordinates();
  190 + n = i3GEOF.distancia._parameters.pontos.ypt.length;
  191 + if (n > 0) {
  192 + x1 = i3GEOF.distancia._parameters.pontos.xpt[n - 1];
  193 + y1 = i3GEOF.distancia._parameters.pontos.ypt[n - 1];
  194 + x2 = coord[0];
  195 + y2 = coord[1];
  196 + // projeta
  197 + if (i3GEO.Interface.openlayers.googleLike) {
  198 + temp = i3GEO.util.extOSM2Geo(x1 + " " + y1 + " " + x2 + " " + y2);
  199 + temp = temp.split(" ");
  200 + x1 = temp[0];
  201 + y1 = temp[1];
  202 + x2 = temp[2];
  203 + y2 = temp[3];
  204 + }
  205 + //console.info(x1+" "+y1+" "+x2+" "+y2)
  206 + trecho = i3GEO.calculo.distancia(x1, y1, x2, y2);
  207 + parcial = i3GEOF.distancia.openlayers.somaDist();
  208 + direcao = i3GEO.calculo.direcao(x1, y1, x2, y2);
  209 + direcao = i3GEO.calculo.dd2dms(direcao, direcao);
  210 + direcao = direcao[0];
  211 + i3GEOF.distancia.mostraParcial(trecho, parcial, direcao);
  212 + }
  213 + },
  214 + point : function(point) {
  215 + i3GEO.eventos.cliquePerm.desativa();
  216 + var n, x1, y1, x2, y2, trecho, temp, circ, label, raio,
  217 + estilo = i3GEO.desenho.estilos[i3GEO.desenho.estiloPadrao],
  218 + coord = point.getCoordinates(),
  219 + total = 0;
  220 + i3GEOF.distancia._parameters.pontos.xpt.push(coord[0]);
  221 + i3GEOF.distancia._parameters.pontos.ypt.push(coord[1]);
  222 + i3GEO.analise.pontos.xpt.push(coord[0]);
  223 + i3GEO.analise.pontos.ypt.push(coord[1]);
  224 + n = i3GEOF.distancia._parameters.pontos.ypt.length;
  225 + if (n > 1) {
  226 + x1 = i3GEOF.distancia._parameters.pontos.xpt[n - 2];
  227 + y1 = i3GEOF.distancia._parameters.pontos.ypt[n - 2];
  228 + x2 = coord[0];
  229 + y2 = coord[1];
  230 + raio = new ol.geom.LineString([[x1, y1],[x2, y2]]).getLength();
  231 + // projeta
  232 + if (i3GEO.Interface.openlayers.googleLike) {
  233 + temp = i3GEO.util.extOSM2Geo(x1 + " " + y1 + " " + x2 + " " + y2);
  234 + temp = temp.split(" ");
  235 + x1 = temp[0];
  236 + y1 = temp[1];
  237 + x2 = temp[2];
  238 + y2 = temp[3];
  239 + }
  240 + trecho = i3GEO.calculo.distancia(x1, y1, x2, y2);
  241 + i3GEOF.distancia._parameters.pontos.dist.push(trecho);
  242 + total = i3GEOF.distancia.openlayers.somaDist();
  243 + i3GEOF.distancia.mostraTotal(trecho, total);
  244 + i3GEOF.distancia._parameters.ultimoWkt = i3GEOF.distancia.pontos2wkt();
  245 + // raio
  246 + if ($i("pararraios") && $i("pararraios").checked === true) {
250 247
251 - temp = i3GEO.util.projGeo2OSM(new ol.geom.Point([x1*1, y1*1]));  
252 - circ = new ol.Feature({  
253 - geometry: new ol.geom.Circle(temp.getCoordinates(),raio)  
254 - });  
255 - circ.setProperties({  
256 - origem : "medeDistanciaExcluir"  
257 - }); 248 + temp = i3GEO.util.projGeo2OSM(new ol.geom.Point([x1*1, y1*1]));
  249 + circ = new ol.Feature({
  250 + geometry: new ol.geom.Circle(temp.getCoordinates(),raio)
  251 + });
  252 + circ.setProperties({
  253 + origem : "medeDistanciaExcluir"
  254 + });
258 255
259 - circ.setStyle(  
260 - new ol.style.Style({  
261 - stroke: new ol.style.Stroke({  
262 - color: estilo.circcolor,  
263 - width: 1  
264 - }),  
265 - zIndex: 2  
266 - })  
267 - ); 256 + circ.setStyle(
  257 + new ol.style.Style({
  258 + stroke: new ol.style.Stroke({
  259 + color: estilo.circcolor,
  260 + width: 1
  261 + }),
  262 + zIndex: 2
  263 + })
  264 + );
268 265
269 - i3GEO.desenho.layergrafico.getSource().addFeature(circ);  
270 - }  
271 - // desenha ponto  
272 - if ($i("parartextos") && $i("parartextos").checked === true) {  
273 - label = new ol.Feature({  
274 - geometry: i3GEO.util.projGeo2OSM(new ol.geom.Point([x2*1, y2*1]))  
275 - });  
276 - label.setProperties({  
277 - origem : "medeDistanciaExcluir"  
278 - });  
279 - label.setStyle(  
280 - new ol.style.Style({  
281 - image: new ol.style.Circle({  
282 - radius: 3,  
283 - fill: new ol.style.Fill({  
284 - color: estilo.circcolor  
285 - }),  
286 - stroke: new ol.style.Stroke({  
287 - color: estilo.circcolor,  
288 - width: 1  
289 - })  
290 - }),  
291 - text: new ol.style.Text({  
292 - text : $.number(trecho,3,$trad("dec"),$trad("mil")),  
293 - font: 'Bold 14px Arial',  
294 - textAlign: 'left',  
295 - stroke: new ol.style.Stroke({  
296 - color: 'white',  
297 - width: 1  
298 - }),  
299 - fill: new ol.style.Fill({  
300 - color: estilo.textcolor  
301 - }),  
302 - zIndex: 2000  
303 - })  
304 - })  
305 - );  
306 - i3GEO.desenho.layergrafico.getSource().addFeature(label);  
307 - }  
308 - }  
309 - },  
310 - /**  
311 - * Soma os valores de distancia guardados em pontos.dist  
312 - */  
313 - somaDist : function() {  
314 - var n, i, total = 0;  
315 - n = i3GEOF.distancia.pontos.dist.length;  
316 - for (i = 0; i < n; i++) {  
317 - total += i3GEOF.distancia.pontos.dist[i];  
318 - }  
319 - return total;  
320 - },  
321 - /**  
322 - * Fecha a janela que mostra os dados Pergunta ao usuario se os graficos devem ser removidos Os graficos sao marcados com o  
323 - * atributo "origem" Os raios e pontos sao sempre removidos  
324 - */  
325 - fechaJanela : function() {  
326 - i3GEO.Interface.openlayers.parametrosMap.interactions[0].setActive(false);  
327 - var m = i3GEOF.distancia.openlayers;  
328 - ol.Observable.unByKey(m.featureListener);  
329 - m.featureListener = null;  
330 - m.removeControle();  
331 - m.numpontos = 0;  
332 - i3GEO.eventos.cliquePerm.ativa();  
333 - i3GEOF.distancia.openlayers.removeFiguras();  
334 - },  
335 - removeFiguras: function(){  
336 - var features, n, f, i, remover = [], temp;  
337 - features = i3GEO.desenho.layergrafico.getSource().getFeatures();  
338 - n = features.length;  
339 - for (i = 0; i < n; i++) {  
340 - f = features[i];  
341 - if (f.getProperties().origem === "medeDistancia" || f.getProperties().origem === "medeDistanciaExcluir") {  
342 - remover.push(f);  
343 - }  
344 - }  
345 - if (remover.length > 0) {  
346 - temp = window.confirm($trad("x94"));  
347 - if (temp) {  
348 - for (r in remover) {  
349 - i3GEO.desenho.layergrafico.getSource().removeFeature(remover[r]);  
350 - }  
351 - }  
352 - }  
353 - },  
354 - /**  
355 - * Mostra a totalizacao das linhas ja digitalizadas  
356 - */  
357 - mostraTotal : function(trecho, total) {  
358 - var mostra = $i("mostradistancia_calculo"), texto;  
359 - if (mostra) {  
360 - texto =  
361 - "<strong>Total</strong><br>" + $trad("x96")  
362 - + " km: "  
363 - + $.number(total,3,$trad("dec"),$trad("mil"))  
364 - + "<br>"  
365 - + $trad("x96")  
366 - + " m: "  
367 - + $.number((total * 1000),2,$trad("dec"),$trad("mil"))  
368 - + "<div class='hidden-sm hidden-xs' >"  
369 - + $trad("x25")  
370 - + ": "  
371 - + i3GEO.calculo.metododistancia  
372 - + "</div>";  
373 - i3GEOF.distancia.ultimaMedida = $.number(total,3,$trad("dec"),$trad("mil")) + " km";  
374 - mostra.innerHTML = texto;  
375 - }  
376 - },  
377 - /**  
378 - * Mostra o valor do trecho entre o ultimo ponto clicado e a posicao do mouse  
379 - */  
380 - mostraParcial : function(trecho, parcial, direcao) {  
381 - var mostra = $i("mostradistancia_calculo_movel"), texto;  
382 - if (mostra) {  
383 - texto =  
384 - "<strong>Parcial </strong><br>" + $trad("x95")  
385 - + " km: "  
386 - + $.number(trecho,3,$trad("dec"),$trad("mil"))  
387 - + "<br>"  
388 - + $trad("x97")  
389 - + " km: "  
390 - + $.number((parcial + trecho),3,$trad("dec"),$trad("mil"))  
391 - + "<div class='hidden-sm hidden-xs' >"  
392 - + $trad("x23")  
393 - + " (DMS): "  
394 - + direcao  
395 - + "</div>";  
396 - mostra.innerHTML = texto;  
397 - }  
398 - }  
399 - },  
400 - googlemaps : {  
401 - /**  
402 - * Inicializa o processo Cria a variavel para guardar os pontos Executa a funcao de inicializacao do desenho, que cria o  
403 - * layer para receber os graficos  
404 - */  
405 - inicia : function() {  
406 - i3GEOF.distancia.pontos = {  
407 - xpt : [],  
408 - ypt : [],  
409 - dist : []  
410 - };  
411 - i3GEO.desenho[i3GEO.Interface["ATUAL"]].inicia();  
412 - i3GeoMap.setOptions({  
413 - disableDoubleClickZoom : true  
414 - });  
415 - i3GeoMap.setOptions({  
416 - draggableCursor : 'crosshair'  
417 - });  
418 - var t, evtdblclick = null, evtclick = null, evtmousemove = null, pontos = {  
419 - xpt : [],  
420 - ypt : [],  
421 - dist : [],  
422 - mvcLine : new google.maps.MVCArray(),  
423 - mvcMarkers : new google.maps.MVCArray(),  
424 - line : null,  
425 - polygon : null  
426 - }, termina = function() {  
427 - google.maps.event.removeListener(evtdblclick);  
428 - google.maps.event.removeListener(evtclick);  
429 - google.maps.event.removeListener(evtmousemove);  
430 - pontos.line.setOptions({  
431 - clickable : true  
432 - });  
433 - google.maps.event.addListener(pontos.line, 'click', function(shape) {  
434 - if (shape.setEditable) {  
435 - shape.setEditable(!shape.editable);  
436 - }  
437 - });  
438 - i3GEOF.distancia.ultimoWkt = i3GEOF.distancia.pontos2wkt();  
439 - t = i3GEOF.distancia.googlemaps.somaDist(pontos);  
440 - i3GEOF.distancia.ultimaMedida = t.toFixed(3) + " km";  
441 - if (pontos) {  
442 - i3GEO.desenho.googlemaps.shapes.push(pontos.mvcLine);  
443 - i3GEO.desenho.googlemaps.shapes.push(pontos.line);  
444 - pontos = null;  
445 - }  
446 - };  
447 - evtclick = google.maps.event.addListener(i3GeoMap, "click", function(evt) {  
448 - i3GEO.eventos.cliquePerm.desativa();  
449 - var x1, x2, y1, y2, trecho = 0, total, n;  
450 - // When the map is clicked, pass the LatLng obect to the  
451 - // measureAdd function  
452 - pontos.mvcLine.push(evt.latLng);  
453 - pontos.xpt.push(evt.latLng.lng());  
454 - pontos.ypt.push(evt.latLng.lat());  
455 - i3GEOF.distancia.pontos.xpt.push(evt.latLng.lng());  
456 - i3GEOF.distancia.pontos.ypt.push(evt.latLng.lat());  
457 - n = pontos.xpt.length;  
458 - // desenha um circulo  
459 - if (pontos.mvcLine.getLength() > 1) {  
460 - x1 = pontos.xpt[n - 2];  
461 - y1 = pontos.ypt[n - 2];  
462 - x2 = evt.latLng.lng();  
463 - y2 = evt.latLng.lat();  
464 - // raio =  
465 - // google.maps.geometry.spherical.computeDistanceBetween(evt.latLng,new  
466 - // google.maps.LatLng(y1,x1))  
467 - trecho = i3GEO.calculo.distancia(x1, y1, x2, y2);  
468 - pontos.dist.push(trecho);  
469 - total = i3GEOF.distancia.googlemaps.somaDist(pontos);  
470 - i3GEOF.distancia.googlemaps.mostraTotal(trecho, total);  
471 - if ($i("pararraios") && $i("pararraios").checked === true) {  
472 - i3GEO.desenho.googlemaps.shapes.push(new google.maps.Circle({  
473 - map : i3GeoMap,  
474 - fillOpacity : 0,  
475 - clickable : false,  
476 - strokeColor : "black",  
477 - strokeOpacity : 1,  
478 - strokeWeight : 2,  
479 - center : new google.maps.LatLng(y1, x1),  
480 - radius : trecho * 1000,  
481 - origem : "medeDistanciaExcluir"  
482 - }));  
483 - }  
484 - }  
485 - // desenha uma marca no ponto  
486 - if ($i("parartextos") && $i("parartextos").checked === true) {  
487 - i3GEO.desenho.googlemaps.shapes.push(new google.maps.Marker({  
488 - map : i3GeoMap,  
489 - fillOpacity : 0,  
490 - clickable : false,  
491 - position : evt.latLng,  
492 - icon : {  
493 - path : google.maps.SymbolPath.CIRCLE,  
494 - scale : 2.5,  
495 - strokeColor : "#ffffff",  
496 - title : trecho.toFixed(0) + " km"  
497 - },  
498 - origem : "medeDistanciaExcluir"  
499 - }));  
500 - }  
501 - // mais um ponto para criar uma linha movel  
502 - pontos.mvcLine.push(evt.latLng);  
503 - });  
504 - evtmousemove =  
505 - google.maps.event.addListener(i3GeoMap, "mousemove", function(evt) {  
506 - if (!$i("mostradistancia_calculo")) {  
507 - termina.call();  
508 - return;  
509 - }  
510 - var x1, y1, x2, y2, direcao, parcial, estilo = i3GEO.desenho.estilos[i3GEO.desenho.estiloPadrao], n =  
511 - pontos.xpt.length; 266 + i3GEO.desenho.layergrafico.getSource().addFeature(circ);
  267 + }
  268 + // desenha ponto
  269 + if ($i("parartextos") && $i("parartextos").checked === true) {
  270 + label = new ol.Feature({
  271 + geometry: i3GEO.util.projGeo2OSM(new ol.geom.Point([x2*1, y2*1]))
  272 + });
  273 + label.setProperties({
  274 + origem : "medeDistanciaExcluir"
  275 + });
  276 + label.setStyle(
  277 + new ol.style.Style({
  278 + image: new ol.style.Circle({
  279 + radius: 3,
  280 + fill: new ol.style.Fill({
  281 + color: estilo.circcolor
  282 + }),
  283 + stroke: new ol.style.Stroke({
  284 + color: estilo.circcolor,
  285 + width: 1
  286 + })
  287 + }),
  288 + text: new ol.style.Text({
  289 + text : $.number(trecho,3,$trad("dec"),$trad("mil")),
  290 + font: 'Bold 14px Arial',
  291 + textAlign: 'left',
  292 + stroke: new ol.style.Stroke({
  293 + color: 'white',
  294 + width: 1
  295 + }),
  296 + fill: new ol.style.Fill({
  297 + color: estilo.textcolor
  298 + }),
  299 + zIndex: 2000
  300 + })
  301 + })
  302 + );
  303 + i3GEO.desenho.layergrafico.getSource().addFeature(label);
  304 + }
  305 + }
  306 + },
  307 + /**
  308 + * Soma os valores de distancia guardados em pontos.dist
  309 + */
  310 + somaDist : function() {
  311 + var n, i, total = 0;
  312 + n = i3GEOF.distancia._parameters.pontos.dist.length;
  313 + for (i = 0; i < n; i++) {
  314 + total += i3GEOF.distancia._parameters.pontos.dist[i];
  315 + }
  316 + return total;
  317 + },
  318 + /**
  319 + * Fecha a janela que mostra os dados Pergunta ao usuario se os graficos devem ser removidos Os graficos sao marcados com o
  320 + * atributo "origem" Os raios e pontos sao sempre removidos
  321 + */
  322 + fechaJanela : function() {
  323 + i3GEO.Interface.openlayers.parametrosMap.interactions[0].setActive(false);
  324 + var m = i3GEOF.distancia.openlayers;
  325 + ol.Observable.unByKey(m.featureListener);
  326 + m.featureListener = null;
  327 + m.removeControle();
  328 + m.numpontos = 0;
  329 + i3GEO.eventos.cliquePerm.ativa();
  330 + i3GEOF.distancia.openlayers.removeFiguras();
  331 + },
  332 + removeFiguras: function(){
  333 + var features, n, f, i, remover = [], temp;
  334 + features = i3GEO.desenho.layergrafico.getSource().getFeatures();
  335 + n = features.length;
  336 + for (i = 0; i < n; i++) {
  337 + f = features[i];
  338 + if (f.getProperties().origem === "medeDistancia" || f.getProperties().origem === "medeDistanciaExcluir") {
  339 + remover.push(f);
  340 + }
  341 + }
  342 + if (remover.length > 0) {
  343 + temp = window.confirm($trad("x94"));
  344 + if (temp) {
  345 + for (r in remover) {
  346 + i3GEO.desenho.layergrafico.getSource().removeFeature(remover[r]);
  347 + }
  348 + }
  349 + }
  350 + },
  351 + /**
  352 + * Mostra a totalizacao das linhas ja digitalizadas
  353 + */
  354 + mostraTotal : function(trecho, total) {
  355 + var mostra = $i("mostradistancia_calculo"), texto;
  356 + if (mostra) {
  357 + texto =
  358 + "<strong>Total</strong><br>" + $trad("x96")
  359 + + " km: "
  360 + + $.number(total,3,$trad("dec"),$trad("mil"))
  361 + + "<br>"
  362 + + $trad("x96")
  363 + + " m: "
  364 + + $.number((total * 1000),2,$trad("dec"),$trad("mil"))
  365 + + "<div class='hidden-sm hidden-xs' >"
  366 + + $trad("x25")
  367 + + ": "
  368 + + i3GEO.calculo.metododistancia
  369 + + "</div>";
  370 + i3GEOF.distancia._parameters.ultimaMedida = $.number(total,3,$trad("dec"),$trad("mil")) + " km";
  371 + mostra.innerHTML = texto;
  372 + }
  373 + },
  374 + /**
  375 + * Mostra o valor do trecho entre o ultimo ponto clicado e a posicao do mouse
  376 + */
  377 + mostraParcial : function(trecho, parcial, direcao) {
  378 + var mostra = $i("mostradistancia_calculo_movel"), texto;
  379 + if (mostra) {
  380 + texto =
  381 + "<strong>Parcial </strong><br>" + $trad("x95")
  382 + + " km: "
  383 + + $.number(trecho,3,$trad("dec"),$trad("mil"))
  384 + + "<br>"
  385 + + $trad("x97")
  386 + + " km: "
  387 + + $.number((parcial + trecho),3,$trad("dec"),$trad("mil"))
  388 + + "<div class='hidden-sm hidden-xs' >"
  389 + + $trad("x23")
  390 + + " (DMS): "
  391 + + direcao
  392 + + "</div>";
  393 + mostra.innerHTML = texto;
  394 + }
  395 + }
  396 + },
  397 + googlemaps : {
  398 + /**
  399 + * Inicializa o processo Cria a variavel para guardar os pontos Executa a funcao de inicializacao do desenho, que cria o
  400 + * layer para receber os graficos
  401 + */
  402 + inicia : function() {
  403 + i3GEOF.distancia._parameters.pontos = {
  404 + xpt : [],
  405 + ypt : [],
  406 + dist : []
  407 + };
  408 + i3GEO.desenho[i3GEO.Interface["ATUAL"]].inicia();
  409 + i3GeoMap.setOptions({
  410 + disableDoubleClickZoom : true
  411 + });
  412 + i3GeoMap.setOptions({
  413 + draggableCursor : 'crosshair'
  414 + });
  415 + var t, evtdblclick = null, evtclick = null, evtmousemove = null, pontos = {
  416 + xpt : [],
  417 + ypt : [],
  418 + dist : [],
  419 + mvcLine : new google.maps.MVCArray(),
  420 + mvcMarkers : new google.maps.MVCArray(),
  421 + line : null,
  422 + polygon : null
  423 + }, termina = function() {
  424 + google.maps.event.removeListener(evtdblclick);
  425 + google.maps.event.removeListener(evtclick);
  426 + google.maps.event.removeListener(evtmousemove);
  427 + pontos.line.setOptions({
  428 + clickable : true
  429 + });
  430 + google.maps.event.addListener(pontos.line, 'click', function(shape) {
  431 + if (shape.setEditable) {
  432 + shape.setEditable(!shape.editable);
  433 + }
  434 + });
  435 + i3GEOF.distancia._parameters.ultimoWkt = i3GEOF.distancia.pontos2wkt();
  436 + t = i3GEOF.distancia.googlemaps.somaDist(pontos);
  437 + i3GEOF.distancia._parameters.ultimaMedida = t.toFixed(3) + " km";
  438 + if (pontos) {
  439 + i3GEO.desenho.googlemaps.shapes.push(pontos.mvcLine);
  440 + i3GEO.desenho.googlemaps.shapes.push(pontos.line);
  441 + pontos = null;
  442 + }
  443 + };
  444 + evtclick = google.maps.event.addListener(i3GeoMap, "click", function(evt) {
  445 + i3GEO.eventos.cliquePerm.desativa();
  446 + var x1, x2, y1, y2, trecho = 0, total, n;
  447 + // When the map is clicked, pass the LatLng obect to the
  448 + // measureAdd function
  449 + pontos.mvcLine.push(evt.latLng);
  450 + pontos.xpt.push(evt.latLng.lng());
  451 + pontos.ypt.push(evt.latLng.lat());
  452 + i3GEOF.distancia._parameters.pontos.xpt.push(evt.latLng.lng());
  453 + i3GEOF.distancia._parameters.pontos.ypt.push(evt.latLng.lat());
  454 + n = pontos.xpt.length;
  455 + // desenha um circulo
  456 + if (pontos.mvcLine.getLength() > 1) {
  457 + x1 = pontos.xpt[n - 2];
  458 + y1 = pontos.ypt[n - 2];
  459 + x2 = evt.latLng.lng();
  460 + y2 = evt.latLng.lat();
  461 + // raio =
  462 + // google.maps.geometry.spherical.computeDistanceBetween(evt.latLng,new
  463 + // google.maps.LatLng(y1,x1))
  464 + trecho = i3GEO.calculo.distancia(x1, y1, x2, y2);
  465 + pontos.dist.push(trecho);
  466 + total = i3GEOF.distancia.googlemaps.somaDist(pontos);
  467 + i3GEOF.distancia.mostraTotal(trecho, total);
  468 + if ($i("pararraios") && $i("pararraios").checked === true) {
  469 + i3GEO.desenho.googlemaps.shapes.push(new google.maps.Circle({
  470 + map : i3GeoMap,
  471 + fillOpacity : 0,
  472 + clickable : false,
  473 + strokeColor : "black",
  474 + strokeOpacity : 1,
  475 + strokeWeight : 2,
  476 + center : new google.maps.LatLng(y1, x1),
  477 + radius : trecho * 1000,
  478 + origem : "medeDistanciaExcluir"
  479 + }));
  480 + }
  481 + }
  482 + // desenha uma marca no ponto
  483 + if ($i("parartextos") && $i("parartextos").checked === true) {
  484 + i3GEO.desenho.googlemaps.shapes.push(new google.maps.Marker({
  485 + map : i3GeoMap,
  486 + fillOpacity : 0,
  487 + clickable : false,
  488 + position : evt.latLng,
  489 + icon : {
  490 + path : google.maps.SymbolPath.CIRCLE,
  491 + scale : 2.5,
  492 + strokeColor : "#ffffff",
  493 + title : trecho.toFixed(0) + " km"
  494 + },
  495 + origem : "medeDistanciaExcluir"
  496 + }));
  497 + }
  498 + // mais um ponto para criar uma linha movel
  499 + pontos.mvcLine.push(evt.latLng);
  500 + });
  501 + evtmousemove =
  502 + google.maps.event.addListener(i3GeoMap, "mousemove", function(evt) {
  503 + if (!$i("mostradistancia_calculo")) {
  504 + termina.call();
  505 + return;
  506 + }
  507 + var x1, y1, x2, y2, direcao, parcial, estilo = i3GEO.desenho.estilos[i3GEO.desenho.estiloPadrao], n =
  508 + pontos.xpt.length;
512 509
513 - // If there is more than one vertex on the line  
514 - if (pontos.mvcLine.getLength() > 0) {  
515 - // If the line hasn't been created yet  
516 - if (!pontos.line) {  
517 - // Create the line (google.maps.Polyline)  
518 - pontos.line = new google.maps.Polyline({  
519 - map : i3GeoMap,  
520 - clickable : false,  
521 - strokeColor : estilo.linecolor,  
522 - strokeOpacity : 1,  
523 - strokeWeight : estilo.linewidth,  
524 - path : pontos.mvcLine,  
525 - origem : "medeDistancia"  
526 - });  
527 - }  
528 - pontos.mvcLine.pop();  
529 - pontos.mvcLine.push(evt.latLng);  
530 - parcial = i3GEOF.distancia.googlemaps.somaDist(pontos);  
531 - x1 = pontos.xpt[n - 1];  
532 - y1 = pontos.ypt[n - 1];  
533 - x2 = evt.latLng.lng();  
534 - y2 = evt.latLng.lat();  
535 - // raio =  
536 - // google.maps.geometry.spherical.computeDistanceBetween(evt.latLng,new  
537 - // google.maps.LatLng(y1,x1))  
538 - trecho = i3GEO.calculo.distancia(x1, y1, x2, y2);  
539 - direcao = i3GEO.calculo.direcao(x1, y1, x2, y2);  
540 - direcao = i3GEO.calculo.dd2dms(direcao, direcao);  
541 - direcao = direcao[0];  
542 - i3GEOF.distancia.googlemaps.mostraParcial(trecho, parcial, direcao);  
543 - }  
544 - });  
545 - evtdblclick = google.maps.event.addListener(i3GeoMap, "dblclick", function(evt) {  
546 - termina.call();  
547 - });  
548 - },  
549 - /**  
550 - * Soma os valores de distancia guardados em pontos.dist  
551 - */  
552 - somaDist : function(pontos) {  
553 - var n, i, total = 0;  
554 - n = pontos.dist.length;  
555 - for (i = 0; i < n; i++) {  
556 - total += pontos.dist[i];  
557 - }  
558 - return total;  
559 - },  
560 - /**  
561 - * Fecha a janela que mostra os dados Pergunta ao usuario se os graficos devem ser removidos Os graficos sao marcados com o  
562 - * atributo "origem" Os raios e pontos sao sempre removidos  
563 - */  
564 - fechaJanela : function() {  
565 - i3GeoMap.setOptions({  
566 - disableDoubleClickZoom : false  
567 - });  
568 - i3GeoMap.setOptions({  
569 - draggableCursor : undefined  
570 - });  
571 - i3GEOF.distancia.googlemaps.removeFiguras();  
572 - },  
573 - removeFiguras: function(){  
574 - var f = i3GEO.desenho.googlemaps.getFeaturesByAttribute("origem", "medeDistancia");  
575 - if (f && f.length > 0) {  
576 - temp = window.confirm($trad("x94"));  
577 - if (temp) {  
578 - i3GEO.desenho.googlemaps.destroyFeatures(f);  
579 - }  
580 - }  
581 - f = i3GEO.desenho.googlemaps.getFeaturesByAttribute("origem", "medeDistanciaExcluir");  
582 - if (f && f.length > 0) {  
583 - i3GEO.desenho.googlemaps.destroyFeatures(f);  
584 - }  
585 - },  
586 - /**  
587 - * Mostra a totalizacao das linhas ja digitalizadas  
588 - */  
589 - mostraTotal : function(trecho, total) {  
590 - var mostra = $i("mostradistancia_calculo"), texto;  
591 - if (mostra) {  
592 - texto =  
593 - "<b>" + $trad("x96")  
594 - + ":</b> "  
595 - + total.toFixed(3)  
596 - + " km"  
597 - + "<br><b>"  
598 - + $trad("x96")  
599 - + ":</b> "  
600 - + (total * 1000).toFixed(2)  
601 - + " m"  
602 - + "<br>"  
603 - + $trad("x25")  
604 - + ": "  
605 - + i3GEO.calculo.metododistancia;  
606 - mostra.innerHTML = texto;  
607 - }  
608 - },  
609 - /**  
610 - * Mostra o valor do trecho entre o ultimo ponto clicado e a posicao do mouse  
611 - */  
612 - mostraParcial : function(trecho, parcial, direcao) {  
613 - var mostra = $i("mostradistancia_calculo_movel"), texto;  
614 - if (mostra) {  
615 - texto =  
616 - "<b>" + $trad("x95")  
617 - + ":</b> "  
618 - + trecho.toFixed(3)  
619 - + " km"  
620 - + "<br><b>"  
621 - + $trad("x97")  
622 - + ":</b> "  
623 - + (parcial + trecho).toFixed(3)  
624 - + " km"  
625 - + "<br><b>"  
626 - + $trad("x23")  
627 - + " (DMS):</b> "  
628 - + direcao;  
629 - mostra.innerHTML = texto;  
630 - }  
631 - }  
632 - } 510 + // If there is more than one vertex on the line
  511 + if (pontos.mvcLine.getLength() > 0) {
  512 + // If the line hasn't been created yet
  513 + if (!pontos.line) {
  514 + // Create the line (google.maps.Polyline)
  515 + pontos.line = new google.maps.Polyline({
  516 + map : i3GeoMap,
  517 + clickable : false,
  518 + strokeColor : estilo.linecolor,
  519 + strokeOpacity : 1,
  520 + strokeWeight : estilo.linewidth,
  521 + path : pontos.mvcLine,
  522 + origem : "medeDistancia"
  523 + });
  524 + }
  525 + pontos.mvcLine.pop();
  526 + pontos.mvcLine.push(evt.latLng);
  527 + parcial = i3GEOF.distancia.googlemaps.somaDist(pontos);
  528 + x1 = pontos.xpt[n - 1];
  529 + y1 = pontos.ypt[n - 1];
  530 + x2 = evt.latLng.lng();
  531 + y2 = evt.latLng.lat();
  532 + // raio =
  533 + // google.maps.geometry.spherical.computeDistanceBetween(evt.latLng,new
  534 + // google.maps.LatLng(y1,x1))
  535 + trecho = i3GEO.calculo.distancia(x1, y1, x2, y2);
  536 + direcao = i3GEO.calculo.direcao(x1, y1, x2, y2);
  537 + direcao = i3GEO.calculo.dd2dms(direcao, direcao);
  538 + direcao = direcao[0];
  539 + i3GEOF.distancia.mostraParcial(trecho, parcial, direcao);
  540 + }
  541 + });
  542 + evtdblclick = google.maps.event.addListener(i3GeoMap, "dblclick", function(evt) {
  543 + termina.call();
  544 + });
  545 + },
  546 + /**
  547 + * Soma os valores de distancia guardados em pontos.dist
  548 + */
  549 + somaDist : function(pontos) {
  550 + var n, i, total = 0;
  551 + n = pontos.dist.length;
  552 + for (i = 0; i < n; i++) {
  553 + total += pontos.dist[i];
  554 + }
  555 + return total;
  556 + },
  557 + /**
  558 + * Fecha a janela que mostra os dados Pergunta ao usuario se os graficos devem ser removidos Os graficos sao marcados com o
  559 + * atributo "origem" Os raios e pontos sao sempre removidos
  560 + */
  561 + fechaJanela : function() {
  562 + i3GeoMap.setOptions({
  563 + disableDoubleClickZoom : false
  564 + });
  565 + i3GeoMap.setOptions({
  566 + draggableCursor : undefined
  567 + });
  568 + i3GEOF.distancia.googlemaps.removeFiguras();
  569 + },
  570 + removeFiguras: function(){
  571 + var f = i3GEO.desenho.googlemaps.getFeaturesByAttribute("origem", "medeDistancia");
  572 + if (f && f.length > 0) {
  573 + temp = window.confirm($trad("x94"));
  574 + if (temp) {
  575 + i3GEO.desenho.googlemaps.destroyFeatures(f);
  576 + }
  577 + }
  578 + f = i3GEO.desenho.googlemaps.getFeaturesByAttribute("origem", "medeDistanciaExcluir");
  579 + if (f && f.length > 0) {
  580 + i3GEO.desenho.googlemaps.destroyFeatures(f);
  581 + }
  582 + },
  583 + /**
  584 + * Mostra a totalizacao das linhas ja digitalizadas
  585 + */
  586 + mostraTotal : function(trecho, total) {
  587 + var mostra = $i("mostradistancia_calculo"), texto;
  588 + if (mostra) {
  589 + texto =
  590 + "<b>" + $trad("x96")
  591 + + ":</b> "
  592 + + total.toFixed(3)
  593 + + " km"
  594 + + "<br><b>"
  595 + + $trad("x96")
  596 + + ":</b> "
  597 + + (total * 1000).toFixed(2)
  598 + + " m"
  599 + + "<br>"
  600 + + $trad("x25")
  601 + + ": "
  602 + + i3GEO.calculo.metododistancia;
  603 + mostra.innerHTML = texto;
  604 + }
  605 + },
  606 + /**
  607 + * Mostra o valor do trecho entre o ultimo ponto clicado e a posicao do mouse
  608 + */
  609 + mostraParcial : function(trecho, parcial, direcao) {
  610 + var mostra = $i("mostradistancia_calculo_movel"), texto;
  611 + if (mostra) {
  612 + texto =
  613 + "<b>" + $trad("x95")
  614 + + ":</b> "
  615 + + trecho.toFixed(3)
  616 + + " km"
  617 + + "<br><b>"
  618 + + $trad("x97")
  619 + + ":</b> "
  620 + + (parcial + trecho).toFixed(3)
  621 + + " km"
  622 + + "<br><b>"
  623 + + $trad("x23")
  624 + + " (DMS):</b> "
  625 + + direcao;
  626 + mostra.innerHTML = texto;
  627 + }
  628 + }
  629 + }
633 }; 630 };
634 //aplica ao codigo i3GEOF definicoes feitas na interface do mapa 631 //aplica ao codigo i3GEOF definicoes feitas na interface do mapa
635 //isso permite a substituicao de funcoes e parametros 632 //isso permite a substituicao de funcoes e parametros
636 if(i3GEO.configura.ferramentas.hasOwnProperty("distancia")){ 633 if(i3GEO.configura.ferramentas.hasOwnProperty("distancia")){
637 -jQuery.each( i3GEO.configura.ferramentas.distancia, function(index, value) {  
638 - i3GEOF.distancia[index] = i3GEO.configura.ferramentas.distancia[index];  
639 -}); 634 + jQuery.each( i3GEO.configura.ferramentas.distancia, function(index, value) {
  635 + i3GEOF.distancia[index] = i3GEO.configura.ferramentas.distancia[index];
  636 + });
640 } 637 }
641 \ No newline at end of file 638 \ No newline at end of file
interface/openlayersdebug.php
@@ -3,14 +3,14 @@ @@ -3,14 +3,14 @@
3 <head> 3 <head>
4 <?php 4 <?php
5 $configInc = array( 5 $configInc = array(
6 - "debug" => "naocompacto", //posfixos inserido na carga do script do i3geo 6 + "debug" => "naocompacto", // posfixos inserido na carga do script do i3geo
7 "tipo" => "OL", // OL ou OSM 7 "tipo" => "OL", // OL ou OSM
8 - "inc" => "inc", //caminho para os includes PHP com os componentes da interface  
9 - "pathjs" => "..", //caminho para o include dos arquivos JS  
10 - "pathcss" => "..", //caminho para o include dos arquivos css  
11 - "pathconfig" => ".", //caminho para o include do arquivo JS config.php  
12 - "pathtutorial" => ".", //caminho para o include do arquivo JS tutorial.js  
13 - "pathtemplates" => "templates", //caminho para a pasta template com os arquivos MUSTACHE 8 + "inc" => "inc", // caminho para os includes PHP com os componentes da interface
  9 + "pathjs" => "..", // caminho para o include dos arquivos JS
  10 + "pathcss" => "..", // caminho para o include dos arquivos css
  11 + "pathconfig" => ".", // caminho para o include do arquivo JS config.php
  12 + "pathtutorial" => ".", // caminho para o include do arquivo JS tutorial.js
  13 + "pathtemplates" => "templates", // caminho para a pasta template com os arquivos MUSTACHE
14 "nocache" => time() 14 "nocache" => time()
15 ); 15 );
16 include ($configInc["inc"] . "/meta.php"); 16 include ($configInc["inc"] . "/meta.php");
@@ -66,7 +66,7 @@ include ($configInc[&quot;inc&quot;] . &quot;/css.php&quot;); @@ -66,7 +66,7 @@ include ($configInc[&quot;inc&quot;] . &quot;/css.php&quot;);
66 include ($configInc["inc"] . "/iconecatalogo.php"); 66 include ($configInc["inc"] . "/iconecatalogo.php");
67 include ($configInc["inc"] . "/iconelegenda.php"); 67 include ($configInc["inc"] . "/iconelegenda.php");
68 include ($configInc["inc"] . "/iconebusca.php"); 68 include ($configInc["inc"] . "/iconebusca.php");
69 - //include ($configInc["inc"] . "/iconeinfo.php"); 69 + // include ($configInc["inc"] . "/iconeinfo.php");
70 include ($configInc["inc"] . "/iconetutorial.php"); 70 include ($configInc["inc"] . "/iconetutorial.php");
71 ?> 71 ?>
72 </div> 72 </div>