Commit 824c374e13c37e2b556bce5ca31baa98a308a0bb

Authored by Edmar Moretti
1 parent 2711d9d8

Complementação da função de obtenção das colunas de atributos de um tema permitindo o uso de WMS

admin/admin.db
No preview for this file type
classesphp/classe_atributos.php
@@ -218,7 +218,7 @@ Lista os itens de um tema. @@ -218,7 +218,7 @@ Lista os itens de um tema.
218 //pega o nome correto do tema 218 //pega o nome correto do tema
219 $nometmp = pegaNome($layer,"UTF-8"); 219 $nometmp = pegaNome($layer,"UTF-8");
220 $nomestemas[] = $nometmp; 220 $nomestemas[] = $nometmp;
221 - if ($layer->data != "") 221 + if($layer->data != "" || $layer->connectiontype == 7)
222 { 222 {
223 $items = pegaItens($layer,$this->mapa); 223 $items = pegaItens($layer,$this->mapa);
224 foreach ($items as $item) 224 foreach ($items as $item)
classesphp/classe_legenda.php
@@ -164,7 +164,30 @@ Salva o mapfile atual @@ -164,7 +164,30 @@ Salva o mapfile atual
164 function salva() 164 function salva()
165 { 165 {
166 if (connection_aborted()){exit();} 166 if (connection_aborted()){exit();}
167 - $this->mapa->save($this->arquivo); 167 + $this->recalculaSLD();
  168 + $this->mapa->save($this->arquivo);
  169 + }
  170 +/*
  171 +function: recalculaSLD
  172 +
  173 +Constrói o SLD que é aplicado ao metadata wms_sld_body. O SLD resultante é baseado nas definições das classes existentes no layer
  174 +*/
  175 + function recalculaSLD(){
  176 + if($this->layer->classitem != "" && $this->layer->connectiontype == 7 && $this->layer->numclasses > 0){
  177 + $tipotemp = $this->layer->type;
  178 + $tiporep = $this->layer->getmetadata("tipooriginal");
  179 + $this->layer->set("type",MS_LAYER_POLYGON);
  180 + if ($tiporep == "linear")
  181 + {$this->layer->set("type",MS_LAYER_LINE);}
  182 + if ($tiporep == "pontual")
  183 + {$this->layer->set("type",MS_LAYER_POINT);}
  184 + $this->layer->set("status",MS_DEFAULT);
  185 + $this->layer->setmetadata("wms_sld_body","");
  186 + $sld = $this->layer->generateSLD();
  187 + if($sld != "")
  188 + {$this->layer->setmetadata("wms_sld_body",str_replace('"',"'",$sld));}
  189 + $this->layer->set("type",$tipotemp);
  190 + }
168 } 191 }
169 192
170 /* 193 /*
@@ -284,7 +307,23 @@ array @@ -284,7 +307,23 @@ array
284 $c = $layer->connectiontype; 307 $c = $layer->connectiontype;
285 $s = $layer->getmetadata("wms_sld_url"); 308 $s = $layer->getmetadata("wms_sld_url");
286 $im = $layer->getmetadata("legendaimg"); 309 $im = $layer->getmetadata("legendaimg");
287 - if ($c == 7 || $im != "") 310 + $nc = $layer->numclasses;
  311 + //
  312 + //se for wms e tiver classes define o tipo de layer para poder gerar a legenda corretamente
  313 + //
  314 + if($c == 7 && $nc > 0){
  315 + $tipotemp = $layer->type;
  316 + $tiporep = $layer->getmetadata("tipooriginal");
  317 + $layer->set("type",MS_LAYER_POLYGON);
  318 + if($tiporep == "linear")
  319 + {$layer->set("type",MS_LAYER_LINE);}
  320 + if ($tiporep == "pontual")
  321 + {$layer->set("type",MS_LAYER_POINT);}
  322 + }
  323 + //
  324 + //se for WMS e não tiver classes, tenta pegar a legenda via requisição WMS
  325 + //
  326 + if ($nc == 0 && ($c == 7 || $im != ""))
288 { 327 {
289 if($c == 7){ 328 if($c == 7){
290 $con = $layer->connection; 329 $con = $layer->connection;
@@ -303,7 +342,6 @@ array @@ -303,7 +342,6 @@ array
303 } 342 }
304 else 343 else
305 { 344 {
306 - $nc = $layer->numclasses;  
307 for ($c = 0;$c < $nc;$c++) 345 for ($c = 0;$c < $nc;$c++)
308 { 346 {
309 $classe = $layer->getclass($c); 347 $classe = $layer->getclass($c);
classesphp/funcoes_gerais.php
@@ -1345,17 +1345,43 @@ Retorno: @@ -1345,17 +1345,43 @@ Retorno:
1345 */ 1345 */
1346 function pegaItens($layer,$mapa="") 1346 function pegaItens($layer,$mapa="")
1347 { 1347 {
1348 - if($layer->type == MS_LAYER_RASTER && $mapa != ""){  
1349 - $pt = ms_newPointObj();  
1350 - $pt->setXY($mapa->extent->minx,$mapa->extent->miny);  
1351 - $layer->queryByPoint($pt,0,0);  
1352 - }  
1353 - $sopen = $layer->open();  
1354 - if($sopen != MS_FAILURE)  
1355 - {$items = $layer->getItems();}  
1356 - else  
1357 - {$items = array();}  
1358 - $layer->close(); 1348 + //
  1349 + //no caso de WMS ou WFS
  1350 + //
  1351 +
  1352 + if($layer->connectiontype == 7){
  1353 + $url = $layer->connection;
  1354 + $temp = explode("?",$url);
  1355 + if(count($temp) == 1)
  1356 + {$url .= "?";}
  1357 + $url = $url."&SERVICE=wfs&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=".$layer->getmetadata("wms_name");
  1358 + //$url = "http://ogi.state.ok.us/geoserver/wfs?VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=okcounties";
  1359 + $xml = simplexml_load_file($url);
  1360 + $dom = new DOMDocument();
  1361 + $dom->loadXML($xml->asxml());
  1362 + $items = array();
  1363 + $sequences = $dom->getElementsByTagName("sequence");
  1364 +
  1365 + foreach ($sequences as $sq){
  1366 + $services = $sq->getElementsByTagName("element");
  1367 + foreach ($services as $s){
  1368 + $items[] = $s->getAttribute("name");
  1369 + }
  1370 + }
  1371 + }
  1372 + else{
  1373 + if($layer->type == MS_LAYER_RASTER && $mapa != ""){
  1374 + $pt = ms_newPointObj();
  1375 + $pt->setXY($mapa->extent->minx,$mapa->extent->miny);
  1376 + $layer->queryByPoint($pt,0,0);
  1377 + }
  1378 + $sopen = $layer->open();
  1379 + if($sopen != MS_FAILURE)
  1380 + {$items = $layer->getItems();}
  1381 + else
  1382 + {$items = array();}
  1383 + $layer->close();
  1384 + }
1359 return $items; 1385 return $items;
1360 } 1386 }
1361 /* 1387 /*
ferramentas/legenda/index.js.php
@@ -447,7 +447,7 @@ i3GEOF.legenda = { @@ -447,7 +447,7 @@ i3GEOF.legenda = {
447 {$i("i3GEOlegendaresultado").innerHTML = "<p style=color:red >Ocorreu um erro<br>";} 447 {$i("i3GEOlegendaresultado").innerHTML = "<p style=color:red >Ocorreu um erro<br>";}
448 i3GEOF.legenda.aguarde.visibility = "hidden"; 448 i3GEOF.legenda.aguarde.visibility = "hidden";
449 } 449 }
450 - catch(e){alert("Erro: "+ e);i3GEOF.legenda.aguarde.visibility = "hidden";} 450 + catch(e){alert("Não é possível editar a legenda desse tema");i3GEOF.legenda.aguarde.visibility = "hidden";}
451 }, 451 },
452 aplicaColourRamp: function(){ 452 aplicaColourRamp: function(){
453 if($i("listaColourRamp").value != ""){ 453 if($i("listaColourRamp").value != ""){