From b4fc61563be3a80bde5250572aa987a0d5638b68 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Mon, 16 Jun 2008 14:21:55 +0000 Subject: [PATCH] Inclus~]ao de opção para união dos polígonos resultantes da operação de buffer --- classesphp/classe_analise.php | 16 +++++++++++++--- classesphp/classe_temas.php | 4 ++-- classesphp/mapa_controle.php | 2 +- ferramentas/buffer/index.js | 6 ++++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/classesphp/classe_analise.php b/classesphp/classe_analise.php index eb018b5..dd5d913 100644 --- a/classesphp/classe_analise.php +++ b/classesphp/classe_analise.php @@ -671,8 +671,7 @@ $locaplic - diretório da aplicação i3geo $linha->add($poPoint1); $linha->add($poPoint2); $ShapeObj = ms_newShapeObj(MS_SHAPE_LINE); - $ShapeObj->add($linha); - + $ShapeObj->add($linha); $novoshpf->addShape($ShapeObj); $registro = array($i1,$i2,$i3,$i4,$i5,$i6); xbase_add_record($db,$registro); @@ -1138,11 +1137,13 @@ $distancia - Distância em km. $locaplic - Localização do I3geo. +$unir - sim|nao indica se os elementos selecionados deverão ser unidos em um só antes do buffer ser criado + return: nome do layer criado com o buffer. */ - function criaBuffer($distancia,$locaplic) + function criaBuffer($distancia,$locaplic,$unir="nao") { //para manipular dbf if(file_exists($this->locaplic."/pacotes/phpxbase/api_conversion.php")) @@ -1186,6 +1187,15 @@ nome do layer criado com o buffer. $shapes[] = $shape; } } + //faz a união dos elementos se necessário + if($unir == "sim") + { + $ns = $buffers[0]; + for($s=1;$s < count($buffers);$s++) + {$ns = $ns->union_geos($buffers[$s]);} + $buffers = array($ns); + $shapes = array($shapes[0]); + } $fechou = $this->layer->close(); //gera o novo arquivo shape file // cria o shapefile diff --git a/classesphp/classe_temas.php b/classesphp/classe_temas.php index 635ae20..4351169 100644 --- a/classesphp/classe_temas.php +++ b/classesphp/classe_temas.php @@ -191,9 +191,9 @@ A mudança é feita apenas na representação do layer. foreach ($this->grupo as $l) { $l = $this->mapa->getlayerbyname($l); - if ($l->type == 1) //se for do tipo linear + if (($l->type == 1) || ($l->type == MS_LAYER_LINE)) //se for do tipo linear {$l->set("type",MS_LAYER_POLYGON);} - elseif ($l->type == 2) //se for do tipo poligonal + elseif (($l->type == 2) || ($l->type == MS_LAYER_POLYGON)) //se for do tipo poligonal {$l->set("type",MS_LAYER_LINE);} if (($l->type < 1) || ($l->type > 2)) {$retorno = "erro. O tipo desse tema nao pode ser alterado";} diff --git a/classesphp/mapa_controle.php b/classesphp/mapa_controle.php index 7eb6aa9..b751fbe 100644 --- a/classesphp/mapa_controle.php +++ b/classesphp/mapa_controle.php @@ -1249,7 +1249,7 @@ Include: include("classe_analise.php"); copiaSeguranca($map_file); $m = new Analise($map_file,$tema); - $cp->set_data($m->criaBuffer($distancia,$locaplic)); + $cp->set_data($m->criaBuffer($distancia,$locaplic,$unir)); $m->salva(); //limpa selecao if (file_exists($map_file."qy")) diff --git a/ferramentas/buffer/index.js b/ferramentas/buffer/index.js index 7b4ca12..f11045e 100644 --- a/ferramentas/buffer/index.js +++ b/ferramentas/buffer/index.js @@ -42,7 +42,9 @@ function t1() function t2() { ins = "Distância do entorno em metros" - ins += "

" + ins += "


" + ins += "Considerar os elementos selecionados como se fossem um só?"; + ins += "
" mostraOpcao("t1()","t3()",ins,"t2") } function t3() @@ -73,7 +75,7 @@ function criarbuffer() else {window.parent.ajaxredesenha("");} } - var p = g_locaplic+"/classesphp/mapa_controle.php?g_sid="+g_sid+"&funcao=criabuffer&tema="+tema+"&distancia="+distancia + var p = g_locaplic+"/classesphp/mapa_controle.php?g_sid="+g_sid+"&funcao=criabuffer&tema="+tema+"&distancia="+distancia+"&unir="+$i("unir").value var cp = new cpaint(); //cp.set_debug(2); cp.set_response_type("JSON"); -- libgit2 0.21.2