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 218 //pega o nome correto do tema
219 219 $nometmp = pegaNome($layer,"UTF-8");
220 220 $nomestemas[] = $nometmp;
221   - if ($layer->data != "")
  221 + if($layer->data != "" || $layer->connectiontype == 7)
222 222 {
223 223 $items = pegaItens($layer,$this->mapa);
224 224 foreach ($items as $item)
... ...
classesphp/classe_legenda.php
... ... @@ -164,7 +164,30 @@ Salva o mapfile atual
164 164 function salva()
165 165 {
166 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 307 $c = $layer->connectiontype;
285 308 $s = $layer->getmetadata("wms_sld_url");
286 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 328 if($c == 7){
290 329 $con = $layer->connection;
... ... @@ -303,7 +342,6 @@ array
303 342 }
304 343 else
305 344 {
306   - $nc = $layer->numclasses;
307 345 for ($c = 0;$c < $nc;$c++)
308 346 {
309 347 $classe = $layer->getclass($c);
... ...
classesphp/funcoes_gerais.php
... ... @@ -1345,17 +1345,43 @@ Retorno:
1345 1345 */
1346 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 1385 return $items;
1360 1386 }
1361 1387 /*
... ...
ferramentas/legenda/index.js.php
... ... @@ -447,7 +447,7 @@ i3GEOF.legenda = {
447 447 {$i("i3GEOlegendaresultado").innerHTML = "<p style=color:red >Ocorreu um erro<br>";}
448 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 452 aplicaColourRamp: function(){
453 453 if($i("listaColourRamp").value != ""){
... ...