Commit 73aff5d074f704b109a97c7b5ea0da26d608c905
1 parent
83da6908
Exists in
master
and in
5 other branches
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
Showing
3 changed files
with
609 additions
and
620 deletions
Show diff stats
ferramentas/area/index.js
... | ... | @@ -4,23 +4,14 @@ if (typeof (i3GEOF) === 'undefined') { |
4 | 4 | i3GEOF.area = |
5 | 5 | { |
6 | 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 | 7 | renderFunction: i3GEO.janela.formModal, |
20 | 8 | _parameters : { |
21 | 9 | "mustache": "", |
22 | 10 | "idContainer": "i3GEOareaContainer", |
23 | - "namespace": "area" | |
11 | + "namespace": "area", | |
12 | + "pontos" : {}, | |
13 | + "ultimoWkt": "", | |
14 | + "ultimaMedida" : "" | |
24 | 15 | }, |
25 | 16 | start : function(){ |
26 | 17 | var p = this._parameters, |
... | ... | @@ -45,8 +36,9 @@ i3GEOF.area = |
45 | 36 | //nao use this aqui |
46 | 37 | i3GEOF.area.renderFunction.call(); |
47 | 38 | i3GEO.analise.pontos = {}; |
48 | - i3GEOF.area.ultimaMedida = ""; | |
39 | + i3GEOF.area._parameters.ultimaMedida = ""; | |
49 | 40 | i3GEOF.area[i3GEO.Interface["ATUAL"]].fechaJanela(); |
41 | + i3GEOF.area._parameters.pontos = {}; | |
50 | 42 | }, |
51 | 43 | html:function() { |
52 | 44 | var p = this._parameters, |
... | ... | @@ -61,7 +53,7 @@ i3GEOF.area = |
61 | 53 | this, |
62 | 54 | { |
63 | 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 | 57 | onclose: i3f.destroy |
66 | 58 | }); |
67 | 59 | i3GEO.eventos.cliquePerm.desativa(); |
... | ... | @@ -79,7 +71,7 @@ i3GEOF.area = |
79 | 71 | * Converte a lista de pontos em WKT |
80 | 72 | */ |
81 | 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 | 75 | for (i = 0; i < n; i++) { |
84 | 76 | pontos.push(x[i] + " " + y[i]); |
85 | 77 | } |
... | ... | @@ -134,7 +126,7 @@ i3GEOF.area = |
134 | 126 | i3GEO.desenho.layergrafico.getSource().addFeature(evt.feature); |
135 | 127 | }); |
136 | 128 | m.draw.on('drawstart', function(evt) { |
137 | - i3GEOF.area.pontos = { | |
129 | + i3GEOF.area._parameters.pontos = { | |
138 | 130 | xpt : [], |
139 | 131 | ypt : [], |
140 | 132 | dist : [] |
... | ... | @@ -171,10 +163,10 @@ i3GEOF.area = |
171 | 163 | var temp,sourceProj,coordinates,wgs84Sphere, per, area, n, x1, y1, x2, y2, trecho, direcao, |
172 | 164 | coord = point.getCoordinates(); |
173 | 165 | |
174 | - n = i3GEOF.area.pontos.ypt.length; | |
166 | + n = i3GEOF.area._parameters.pontos.ypt.length; | |
175 | 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 | 170 | x2 = coord[0]; |
179 | 171 | y2 = coord[1]; |
180 | 172 | // projeta |
... | ... | @@ -193,8 +185,8 @@ i3GEOF.area = |
193 | 185 | direcao = direcao[0]; |
194 | 186 | per = i3GEOF.area.openlayers.somaDist(); |
195 | 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 | 190 | // projeta |
199 | 191 | if (i3GEO.Interface.openlayers.googleLike) { |
200 | 192 | temp = i3GEO.util.extOSM2Geo(x1 + " " + y1); |
... | ... | @@ -220,14 +212,14 @@ i3GEOF.area = |
220 | 212 | var wgs84Sphere,area,coordinates,sourceProj,n, x1, y1, x2, y2, trecho, temp, |
221 | 213 | coord = point.getCoordinates(), |
222 | 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 | 217 | i3GEO.analise.pontos.xpt.push(coord[0]); |
226 | 218 | i3GEO.analise.pontos.ypt.push(coord[1]); |
227 | - n = i3GEOF.area.pontos.ypt.length; | |
219 | + n = i3GEOF.area._parameters.pontos.ypt.length; | |
228 | 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 | 223 | x2 = coord[0]; |
232 | 224 | y2 = coord[1]; |
233 | 225 | raio = new ol.geom.LineString([[x1, y1],[x2, y2]]).getLength(); |
... | ... | @@ -241,7 +233,7 @@ i3GEOF.area = |
241 | 233 | y2 = temp[3]; |
242 | 234 | } |
243 | 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 | 237 | total = i3GEOF.area.openlayers.somaDist(); |
246 | 238 | |
247 | 239 | sourceProj = i3geoOL.getView().getProjection(); |
... | ... | @@ -251,7 +243,7 @@ i3GEOF.area = |
251 | 243 | area = Math.abs(wgs84Sphere.geodesicArea(coordinates)); |
252 | 244 | |
253 | 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 | 251 | */ |
260 | 252 | somaDist : function() { |
261 | 253 | var n, i, total = 0; |
262 | - n = i3GEOF.area.pontos.dist.length; | |
254 | + n = i3GEOF.area._parameters.pontos.dist.length; | |
263 | 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 | 258 | return total; |
267 | 259 | }, |
... | ... | @@ -322,7 +314,7 @@ i3GEOF.area = |
322 | 314 | + i3GEO.calculo.metododistancia |
323 | 315 | + "</div>"; |
324 | 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 | 354 | * layer para receber os graficos |
363 | 355 | */ |
364 | 356 | inicia : function() { |
365 | - i3GEOF.area.pontos = { | |
357 | + i3GEOF.area._parameters.pontos = { | |
366 | 358 | xpt : [], |
367 | 359 | ypt : [], |
368 | 360 | dist : [] |
... | ... | @@ -403,7 +395,7 @@ i3GEOF.area = |
403 | 395 | i3GEO.desenho.googlemaps.shapes.push(pontos.line); |
404 | 396 | pontos = null; |
405 | 397 | } |
406 | - i3GEOF.area.ultimoWkt = i3GEOF.area.pontos2wkt(); | |
398 | + i3GEOF.area._parameters.ultimoWkt = i3GEOF.area.pontos2wkt(); | |
407 | 399 | }; |
408 | 400 | evtclick = google.maps.event.addListener(i3GeoMap, "click", function(evt) { |
409 | 401 | i3GEO.eventos.cliquePerm.desativa(); |
... | ... | @@ -413,8 +405,8 @@ i3GEOF.area = |
413 | 405 | pontos.mvcLine.push(evt.latLng); |
414 | 406 | pontos.xpt.push(evt.latLng.lng()); |
415 | 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 | 410 | // desenha um circulo |
419 | 411 | if (pontos.mvcLine.getLength() > 0) { |
420 | 412 | per = google.maps.geometry.spherical.computeLength(pontos.mvcLine); |
... | ... | @@ -545,7 +537,7 @@ i3GEOF.area = |
545 | 537 | + ": " |
546 | 538 | + i3GEO.calculo.metododistancia; |
547 | 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) === 'undefined') { |
3 | 3 | } |
4 | 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 | 7 | renderFunction: i3GEO.janela.formModal, |
20 | 8 | _parameters : { |
21 | 9 | "mustache": "", |
22 | 10 | "idContainer": "i3GEOdistanciaContainer", |
23 | - "namespace": "distancia" | |
11 | + "namespace": "distancia", | |
12 | + "pontos": {}, | |
13 | + "ultimoWkt": "", | |
24 | 14 | }, |
25 | 15 | start : function(){ |
26 | 16 | var p = this._parameters, |
... | ... | @@ -45,11 +35,12 @@ i3GEOF.distancia = |
45 | 35 | //nao use this aqui |
46 | 36 | i3GEOF.distancia.renderFunction.call(); |
47 | 37 | i3GEO.analise.pontos = { |
48 | - xpt : [], | |
49 | - ypt : [] | |
50 | - }; | |
51 | - i3GEOF.distancia.ultimaMedida = ""; | |
38 | + xpt : [], | |
39 | + ypt : [] | |
40 | + }; | |
41 | + i3GEOF.distancia._parameters.ultimaMedida = ""; | |
52 | 42 | i3GEOF.distancia[i3GEO.Interface["ATUAL"]].fechaJanela(); |
43 | + i3GEOF.distancia._parameters.pontos = {}; | |
53 | 44 | }, |
54 | 45 | html:function() { |
55 | 46 | var p = this._parameters, |
... | ... | @@ -65,576 +56,582 @@ i3GEOF.distancia = |
65 | 56 | this, |
66 | 57 | { |
67 | 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 | 60 | onclose: i3f.destroy |
70 | 61 | }); |
71 | 62 | i3GEO.eventos.cliquePerm.desativa(); |
72 | 63 | i3GEOF.distancia[i3GEO.Interface["ATUAL"]].inicia(); |
73 | 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 | 631 | //aplica ao codigo i3GEOF definicoes feitas na interface do mapa |
635 | 632 | //isso permite a substituicao de funcoes e parametros |
636 | 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 | 638 | \ No newline at end of file | ... | ... |
interface/openlayersdebug.php
... | ... | @@ -3,14 +3,14 @@ |
3 | 3 | <head> |
4 | 4 | <?php |
5 | 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 | 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 | 14 | "nocache" => time() |
15 | 15 | ); |
16 | 16 | include ($configInc["inc"] . "/meta.php"); |
... | ... | @@ -66,7 +66,7 @@ include ($configInc["inc"] . "/css.php"); |
66 | 66 | include ($configInc["inc"] . "/iconecatalogo.php"); |
67 | 67 | include ($configInc["inc"] . "/iconelegenda.php"); |
68 | 68 | include ($configInc["inc"] . "/iconebusca.php"); |
69 | - //include ($configInc["inc"] . "/iconeinfo.php"); | |
69 | + // include ($configInc["inc"] . "/iconeinfo.php"); | |
70 | 70 | include ($configInc["inc"] . "/iconetutorial.php"); |
71 | 71 | ?> |
72 | 72 | </div> | ... | ... |