Commit 824c374e13c37e2b556bce5ca31baa98a308a0bb
1 parent
2711d9d8
Exists in
master
and in
7 other branches
Complementação da função de obtenção das colunas de atributos de um tema permitindo o uso de WMS
Showing
5 changed files
with
80 additions
and
16 deletions
Show diff stats
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 != ""){ | ... | ... |