Commit bb0c3e92c222a3c48ce4eb9584db8d7f6e354b3f
1 parent
91f5b278
Exists in
master
and in
7 other branches
-
Showing
3 changed files
with
125 additions
and
36 deletions
Show diff stats
ferramentas/melhorcaminho/dicionario.js
... | ... | @@ -21,7 +21,7 @@ i3GEOF.melhorcaminho.dicionario = { |
21 | 21 | es : "" |
22 | 22 | } ], |
23 | 23 | 'temas' : [ { |
24 | - pt : "Escolha o tema que será utilizado para obter o ponto inicial e final. No caso de tema pontual, serão considerados o primeiro e o último ponto. No caso de tema linear, serão considerados o primeiro e o último nó. No caso de tema poligonal, serão considerados o primeiro nó e o centróide. <br>Você pode pular essa etapa caso queira escolher os pontos clicando no mapa.", | |
24 | + pt : "(Opcional) Escolha o tema que será utilizado para obter o ponto inicial e final. Será considerada a seleção, se houver. No caso de tema pontual, serão considerados o primeiro e o último ponto. No caso de tema linear, serão considerados o primeiro e o último nó. No caso de tema poligonal, serão considerados o primeiro nó e o centróide. <br>Você pode pular essa etapa caso queira escolher os pontos clicando no mapa.", | |
25 | 25 | en : "", |
26 | 26 | es : "" |
27 | 27 | } ], |
... | ... | @@ -66,7 +66,7 @@ i3GEOF.melhorcaminho.dicionario = { |
66 | 66 | es : "" |
67 | 67 | } ], |
68 | 68 | 'menorque' : [ { |
69 | - pt : "menor que", | |
69 | + pt : "igual ou menor que", | |
70 | 70 | en : "", |
71 | 71 | es : "" |
72 | 72 | } ], |
... | ... | @@ -94,5 +94,10 @@ i3GEOF.melhorcaminho.dicionario = { |
94 | 94 | pt : "Erro ao calcular as coordenadas dos pontos A e B", |
95 | 95 | en : "", |
96 | 96 | es : "" |
97 | + } ], | |
98 | + 'buffer' : [ { | |
99 | + pt : "(Opcional) Valor em Km do entorno da linha reta entre A e B que será considerada como área onde o caminho poderá ser traçado", | |
100 | + en : "", | |
101 | + es : "" | |
97 | 102 | } ] |
98 | 103 | }; | ... | ... |
ferramentas/melhorcaminho/exec.php
... | ... | @@ -9,18 +9,21 @@ switch (strtoupper($funcao)) |
9 | 9 | case "SHAPE2PONTOS": |
10 | 10 | $mapa = ms_newMapObj($map_file); |
11 | 11 | $layer = $mapa->getlayerbyname($tema); |
12 | - $shapes = retornaShapesMapext($layer,$mapa); | |
12 | + $shapes = retornaShapesSelecionados($layer,$map_file,$mapa); | |
13 | 13 | |
14 | + if(count($shapes) == 0){ | |
15 | + $shapes = retornaShapesMapext($layer,$mapa); | |
16 | + } | |
14 | 17 | //quando ponto 0 |
15 | 18 | if($layer->type == 0){ |
16 | - $objLine = $shapes[0]->line; | |
17 | - $pontoA = $objLine0(0); | |
18 | - $objLine = $shapes[count($shapes) - 1]->line; | |
19 | - $pontoB = $objLine(0); | |
19 | + $objLine = $shapes[0]->line(0); | |
20 | + $pontoA = $objLine->point(0); | |
21 | + $objLine = $shapes[count($shapes) - 1]->line(0); | |
22 | + $pontoB = $objLine->point(0); | |
20 | 23 | } |
21 | 24 | //quando linha 1 |
22 | 25 | if($layer->type == 1){ |
23 | - $objLine = $shapes[0]->line; | |
26 | + $objLine = $shapes[0]->line(0); | |
24 | 27 | $pontoA = $objLine->point(0); |
25 | 28 | $pontoB = $objLine->point($objLine->numpoints - 1); |
26 | 29 | } |
... | ... | @@ -50,7 +53,7 @@ switch (strtoupper($funcao)) |
50 | 53 | mkdir ($pathresult,0777); |
51 | 54 | |
52 | 55 | $best = array( |
53 | - " p1"=> array( | |
56 | + "p1"=> array( | |
54 | 57 | "calculation_type" =>"best_path", |
55 | 58 | "file_prefix" => $prefixo, |
56 | 59 | "start_coord" => "[$pta]", |
... | ... | @@ -58,7 +61,7 @@ switch (strtoupper($funcao)) |
58 | 61 | ) |
59 | 62 | ); |
60 | 63 | $cart = array( |
61 | - " p2"=> array( | |
64 | + "p2"=> array( | |
62 | 65 | "calculation_type" =>"cartesian_straight_line_cost", |
63 | 66 | "file_prefix" => $prefixo, |
64 | 67 | "start_coord" => "[$pta]", |
... | ... | @@ -68,6 +71,39 @@ switch (strtoupper($funcao)) |
68 | 71 | |
69 | 72 | $processos = array($best,$cart); |
70 | 73 | |
74 | + if($buffer > 0){ | |
75 | + $buf = array( | |
76 | + "p3"=> array( | |
77 | + "calculation_type" =>"best_path_within_buffer", | |
78 | + "buffer_km" => $buffer, | |
79 | + "file_prefix" => $prefixo, | |
80 | + "start_coord" => "[$pta]", | |
81 | + "stop_coord" => "[$ptb]" | |
82 | + ) | |
83 | + ); | |
84 | + $processos[] = $buf; | |
85 | + } | |
86 | + | |
87 | + if($lut != ""){ | |
88 | + //pega os valores da lut | |
89 | + $lista = explode("|",$lut); | |
90 | + $novaLut = array(); | |
91 | + foreach($lista as $li){ | |
92 | + $v = explode(",",$li); | |
93 | + $novaLut[] = "- {min: $v[0], max: $v[1], nv: $v[2]}"; | |
94 | + } | |
95 | + $lut = array( | |
96 | + "p4"=> array( | |
97 | + "calculation_type" =>"best_path_lut", | |
98 | + "lut" => implode("\n",$novaLut), | |
99 | + "file_prefix" => $prefixo, | |
100 | + "start_coord" => "[$pta]", | |
101 | + "stop_coord" => "[$ptb]" | |
102 | + ) | |
103 | + ); | |
104 | + $processos[] = $lut; | |
105 | + } | |
106 | + | |
71 | 107 | $a = array( |
72 | 108 | "cost_surface_path" => $cost_surface_path, |
73 | 109 | "pathresult" => $pathresult, |
... | ... | @@ -78,9 +114,11 @@ switch (strtoupper($funcao)) |
78 | 114 | //adapta o formato YAML para que o Python entenda |
79 | 115 | $yaml = str_replace("---","",$yaml); |
80 | 116 | $yaml = str_replace("...","",$yaml); |
81 | - $yaml = str_replace("- ","",$yaml); | |
117 | + $yaml = str_replace("- p"," p",$yaml); | |
82 | 118 | $yaml = str_replace("'","",$yaml); |
119 | + $yaml = str_replace('"',"",$yaml); | |
83 | 120 | $yaml = trim($yaml)."\n"; |
121 | + $yaml = str_replace('|-',"",$yaml); | |
84 | 122 | //salva o arquivo com os parametros |
85 | 123 | $fp = fopen($y,"w"); |
86 | 124 | fwrite($fp,$yaml); |
... | ... | @@ -114,6 +152,41 @@ switch (strtoupper($funcao)) |
114 | 152 | $cor->setRGB(255,0,255); |
115 | 153 | $estilo->set("width",2); |
116 | 154 | } |
155 | + if(file_exists($pathresult."/".$prefixo."_best_path_within_buffer.shp")){ | |
156 | + //best_path_within_buffer | |
157 | + $retorno = $m->adicionaTemaSHP($pathresult."/".$prefixo."_best_path_within_buffer.shp"); | |
158 | + $layer = $m->mapa->getlayerbyname($prefixo."_best_path_within_buffer.shp"); | |
159 | + $layer->setmetadata("TEMA","Caminho restrito ao buffer $prefixo"); | |
160 | + $layer->setmetadata("DOWNLOAD","SIM"); | |
161 | + $layer->setmetadata("TEMALOCAL","SIM"); | |
162 | + $classe = $layer->getclass(0); | |
163 | + $estilo = $classe->getstyle(0); | |
164 | + $cor = $estilo->color; | |
165 | + $cor->setRGB(255,255,0); | |
166 | + //buffer | |
167 | + $retorno = $m->adicionaTemaSHP($pathresult."/".$prefixo."_buffer_best_path_within_buffer.shp"); | |
168 | + $layer = $m->mapa->getlayerbyname($prefixo."_buffer_best_path_within_buffer.shp"); | |
169 | + $layer->setmetadata("TEMA","Buffer $prefixo"); | |
170 | + $layer->setmetadata("DOWNLOAD","SIM"); | |
171 | + $layer->setmetadata("TEMALOCAL","SIM"); | |
172 | + $classe = $layer->getclass(0); | |
173 | + $estilo = $classe->getstyle(0); | |
174 | + $cor = $estilo->color; | |
175 | + $cor->setRGB(-1,-1,-1); | |
176 | + $estilo->set("width",2); | |
177 | + } | |
178 | + if(file_exists($pathresult."/".$prefixo."_best_path_lut.shp")){ | |
179 | + //cartesian_straight_line_cost | |
180 | + $retorno = $m->adicionaTemaSHP($pathresult."/".$prefixo."_best_path_lut.shp"); | |
181 | + $layer = $m->mapa->getlayerbyname($prefixo."_best_path_lut.shp"); | |
182 | + $layer->setmetadata("TEMA","Caminho mais curto reclassificado $prefixo"); | |
183 | + $layer->setmetadata("DOWNLOAD","SIM"); | |
184 | + $layer->setmetadata("TEMALOCAL","SIM"); | |
185 | + $classe = $layer->getclass(0); | |
186 | + $estilo = $classe->getstyle(0); | |
187 | + $cor = $estilo->color; | |
188 | + $cor->setRGB(0,255,255); | |
189 | + } | |
117 | 190 | $m->salva(); |
118 | 191 | } |
119 | 192 | else{ | ... | ... |
ferramentas/melhorcaminho/index.js
... | ... | @@ -127,8 +127,8 @@ i3GEOF.melhorcaminho = { |
127 | 127 | i3GEO.janela.minimiza("i3GEOF.melhorcaminho"); |
128 | 128 | }; |
129 | 129 | janela = i3GEO.janela.cria( |
130 | - "400px", | |
131 | - "190px", | |
130 | + "430px", | |
131 | + "210px", | |
132 | 132 | "", |
133 | 133 | "", |
134 | 134 | "", |
... | ... | @@ -175,7 +175,10 @@ i3GEOF.melhorcaminho = { |
175 | 175 | i3GEOF.melhorcaminho.comboTemas(); |
176 | 176 | }, |
177 | 177 | t3: function(){ |
178 | - var ins = "<p class='paragrafo'><b>"+$trad('pti',i3GEOF.melhorcaminho.dicionario)+"</b>"; | |
178 | + var ins, | |
179 | + retorno = i3GEOF.melhorcaminho.COORDENADASTEMA; | |
180 | + | |
181 | + ins = "<p class='paragrafo'><b>"+$trad('pti',i3GEOF.melhorcaminho.dicionario)+"</b>"; | |
179 | 182 | ins += "<p class='paragrafo'>X (long): "; |
180 | 183 | ins += $trad('grau',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('minuto',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('segundo',i3GEOF.melhorcaminho.dicionario)+"</p>"; |
181 | 184 | ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;' ><input id='i3GEOmelhorcaminhoxg' title='grau' type=text value='1'/></div>"; |
... | ... | @@ -193,18 +196,22 @@ i3GEOF.melhorcaminho = { |
193 | 196 | i3GEO.eventos.removeEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoB()"]); |
194 | 197 | i3GEO.eventos.adicionaEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoA()"]); |
195 | 198 | //calcula as coordenadas em DD |
196 | - dms = i3GEO.calculo.dd2dms(retorno.data.ax,retorno.data.ay); | |
197 | - dmsx = dms[0].split(" "); | |
198 | - dmsy = dms[1].split(" "); | |
199 | - $i("i3GEOmelhorcaminhoxg").value = dmsx[0]; | |
200 | - $i("i3GEOmelhorcaminhoxm").value = dmsx[1]; | |
201 | - $i("i3GEOmelhorcaminhoxs").value = dmsx[2]; | |
202 | - $i("i3GEOmelhorcaminhoyg").value = dmsy[0]; | |
203 | - $i("i3GEOmelhorcaminhoym").value = dmsy[1]; | |
204 | - $i("i3GEOmelhorcaminhoys").value = dmsy[2]; | |
199 | + if(retorno != ""){ | |
200 | + dms = i3GEO.calculo.dd2dms(retorno.data.ax,retorno.data.ay); | |
201 | + dmsx = dms[0].split(" "); | |
202 | + dmsy = dms[1].split(" "); | |
203 | + $i("i3GEOmelhorcaminhoxg").value = dmsx[0]; | |
204 | + $i("i3GEOmelhorcaminhoxm").value = dmsx[1]; | |
205 | + $i("i3GEOmelhorcaminhoxs").value = dmsx[2]; | |
206 | + $i("i3GEOmelhorcaminhoyg").value = dmsy[0]; | |
207 | + $i("i3GEOmelhorcaminhoym").value = dmsy[1]; | |
208 | + $i("i3GEOmelhorcaminhoys").value = dmsy[2]; | |
209 | + } | |
205 | 210 | }, |
206 | 211 | t4: function(){ |
207 | - var ins = "<p class='paragrafo'><b>"+$trad('ptf',i3GEOF.melhorcaminho.dicionario)+"</b>"; | |
212 | + var ins, | |
213 | + retorno = i3GEOF.melhorcaminho.COORDENADASTEMA; | |
214 | + ins = "<p class='paragrafo'><b>"+$trad('ptf',i3GEOF.melhorcaminho.dicionario)+"</b>"; | |
208 | 215 | ins += "<p class='paragrafo'>X (long): "; |
209 | 216 | ins += $trad('grau',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('minuto',i3GEOF.melhorcaminho.dicionario)+" - "+$trad('segundo',i3GEOF.melhorcaminho.dicionario)+"</p>"; |
210 | 217 | ins += "<div class='i3geoForm100 i3geoFormIconeEdita' style='float:left;' ><input id='i3GEOmelhorcaminhoixg' title='grau' type=text value='1'/></div>"; |
... | ... | @@ -223,15 +230,17 @@ i3GEOF.melhorcaminho = { |
223 | 230 | i3GEO.eventos.removeEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoA()"]); |
224 | 231 | i3GEO.eventos.adicionaEventos("MOUSECLIQUE",["i3GEOF.melhorcaminho.capturaPontoB()"]); |
225 | 232 | //calcula as coordenadas em DD |
226 | - dms = i3GEO.calculo.dd2dms(retorno.data.bx,retorno.data.by); | |
227 | - dmsx = dms[0].split(" "); | |
228 | - dmsy = dms[1].split(" "); | |
229 | - $i("i3GEOmelhorcaminhoixg").value = dmsx[0]; | |
230 | - $i("i3GEOmelhorcaminhoixm").value = dmsx[1]; | |
231 | - $i("i3GEOmelhorcaminhoixs").value = dmsx[2]; | |
232 | - $i("i3GEOmelhorcaminhoiyg").value = dmsy[0]; | |
233 | - $i("i3GEOmelhorcaminhoiym").value = dmsy[1]; | |
234 | - $i("i3GEOmelhorcaminhoiys").value = dmsy[2]; | |
233 | + if(retorno != ""){ | |
234 | + dms = i3GEO.calculo.dd2dms(retorno.data.bx,retorno.data.by); | |
235 | + dmsx = dms[0].split(" "); | |
236 | + dmsy = dms[1].split(" "); | |
237 | + $i("i3GEOmelhorcaminhoixg").value = dmsx[0]; | |
238 | + $i("i3GEOmelhorcaminhoixm").value = dmsx[1]; | |
239 | + $i("i3GEOmelhorcaminhoixs").value = dmsx[2]; | |
240 | + $i("i3GEOmelhorcaminhoiyg").value = dmsy[0]; | |
241 | + $i("i3GEOmelhorcaminhoiym").value = dmsy[1]; | |
242 | + $i("i3GEOmelhorcaminhoiys").value = dmsy[2]; | |
243 | + } | |
235 | 244 | }, |
236 | 245 | t5: function(){ |
237 | 246 | var b, ins = "<p class='paragrafo'>"+$trad('lut',i3GEOF.melhorcaminho.dicionario); |
... | ... | @@ -244,6 +253,8 @@ i3GEOF.melhorcaminho = { |
244 | 253 | ins += "</tr></table>"; |
245 | 254 | ins += "<br>"; |
246 | 255 | ins += "<div id='i3GEOmelhorcaminhoLut' ></div>"; |
256 | + ins += "<br><br> <p class='paragrafo'>"+$trad('buffer',i3GEOF.melhorcaminho.dicionario)+"<br><div class='i3geoForm i3geoFormIconeEdita'><input id='i3GEOmelhorcaminhoBuffer' type=text value='0' /></div>"; | |
257 | + | |
247 | 258 | i3GEO.util.proximoAnterior("i3GEOF.melhorcaminho.t4()","i3GEOF.melhorcaminho.t6()",ins,"i3GEOF.melhorcaminho.t5","i3GEOmelhorcaminhoresultado",true,"i3GEOF.melhorcaminho_rodape"); |
248 | 259 | b = new YAHOO.widget.Button( |
249 | 260 | "i3GEOmelhorcaminhoLut4", |
... | ... | @@ -267,7 +278,7 @@ i3GEOF.melhorcaminho = { |
267 | 278 | v1 = $i("i3GEOmelhorcaminhoLut1").value; |
268 | 279 | v2 = $i("i3GEOmelhorcaminhoLut2").value; |
269 | 280 | v3 = $i("i3GEOmelhorcaminhoLut3").value; |
270 | - v = ">= " + v1 + "e < " + v2 + " = " + v3; | |
281 | + v = ">= " + v1 + "e <= " + v2 + " = " + v3; | |
271 | 282 | n = v1 + "," + v2 + "," + v3; |
272 | 283 | onde = $i("i3GEOmelhorcaminhoLut"); |
273 | 284 | novo = "<div class='i3geoForm150 i3geoFormTag' style='float:left;margin-left:2px;margin-top:2px;' onclick='i3GEOF.melhorcaminho.removeLut(this)'>" |
... | ... | @@ -319,7 +330,7 @@ i3GEOF.melhorcaminho = { |
319 | 330 | retorno = function(retorno) { |
320 | 331 | var dms,dmsx,dmsy; |
321 | 332 | i3GEO.janela.fechaAguarde("shape2pontos"); |
322 | - i3GEOF.melhorcaminho.COORDENADASTEMA = retorno.data; | |
333 | + i3GEOF.melhorcaminho.COORDENADASTEMA = retorno; | |
323 | 334 | i3GEOF.melhorcaminho.t3(); |
324 | 335 | }; |
325 | 336 | i3GEO.janela.abreAguarde("shape2pontos", $trad("o1")); |
... | ... | @@ -388,7 +399,7 @@ i3GEOF.melhorcaminho = { |
388 | 399 | $i("i3GEOmelhorcaminhoresultadoFim").innerHTML = retorno.data; |
389 | 400 | }; |
390 | 401 | p = i3GEO.configura.locaplic+"/ferramentas/melhorcaminho/exec.php?g_sid="+i3GEO.configura.sid |
391 | - +"&funcao=melhorcaminho&pta="+pta+"&ptb="+ptb+"&lut="+lut+"&raster="+raster; | |
402 | + +"&funcao=melhorcaminho&pta="+pta+"&ptb="+ptb+"&lut="+lut+"&raster="+raster+"&buffer="+$i("i3GEOmelhorcaminhoBuffer").value; | |
392 | 403 | cp = new cpaint(); |
393 | 404 | cp.set_response_type("JSON"); |
394 | 405 | cp.call(p,"melhorcaminho",fim); | ... | ... |