Commit a6982646bc3905e8cf4950de153c68b60860460e

Authored by Edmar Moretti
1 parent a4b4d748

Correção na função de identificação de atributos quando o tema em foco é um WMS.…

… Alguns WMS exigem a definição do parâmetro format na requisição getfeatureinfo, entretanto, quando format é definido na requisição, WMS gerados pelo Mapserver geram erros.
O problema foi corrigido criticando-se o resultado da chamada getfeatureinfo.
classesphp/classe_atributos.php
@@ -710,6 +710,19 @@ function identificaQBP($tema,$x,$y,$map_file,$resolucao,$item,$tiporetorno="") @@ -710,6 +710,19 @@ function identificaQBP($tema,$x,$y,$map_file,$resolucao,$item,$tiporetorno="")
710 $res .= "&Y=".round($ptimg->y); 710 $res .= "&Y=".round($ptimg->y);
711 $res .= "&WIDTH=".$mapa->width; 711 $res .= "&WIDTH=".$mapa->width;
712 $res .= "&HEIGHT=".$mapa->height; 712 $res .= "&HEIGHT=".$mapa->height;
  713 + $formatoinfo = "text/plain";
  714 + $formatosinfo = $layer->getmetadata("formatosinfo");
  715 + if ($formatosinfo != "")
  716 + {
  717 + $formatosinfo = explode(",",$formatosinfo);
  718 + if ($formatosinfo[0] != ""){$formatoinfo = $formatosinfo[0];}
  719 + foreach ($formatosinfo as $f)
  720 + {
  721 + if(strtoupper($f) == "TEXT/PLAIN")
  722 + {$formatoinfo = "text/plain";}
  723 + }
  724 +
  725 + }
713 $srs = $layer->getmetadata("wms_srs"); 726 $srs = $layer->getmetadata("wms_srs");
714 $srss = explode(" ",$srs); 727 $srss = explode(" ",$srs);
715 $srs = "EPSG:4326"; 728 $srs = "EPSG:4326";
@@ -719,23 +732,25 @@ function identificaQBP($tema,$x,$y,$map_file,$resolucao,$item,$tiporetorno="") @@ -719,23 +732,25 @@ function identificaQBP($tema,$x,$y,$map_file,$resolucao,$item,$tiporetorno="")
719 {$srs = "EPSG:4291";} 732 {$srs = "EPSG:4291";}
720 } 733 }
721 $res .= "&SRS=".$srs; 734 $res .= "&SRS=".$srs;
722 - $res = file($res);  
723 - $res = str_ireplace('<?xml version="1.0" encoding="UTF-8"?>',"",$res);  
724 - $res = str_ireplace('<?xml version="1.0" encoding="ISO-8859-1"?>',"",$res);  
725 - $res = str_ireplace("<?xml version='1.0' encoding='ISO-8859-1'?>","",$res);  
726 - $res = str_ireplace('<?xml',"",$res);  
727 - $res = str_ireplace("<","zzzzzzzzzz",$res);  
728 - $res = str_ireplace(">","zzzzzzzzzz",$res);  
729 - $resultado[] = $res; 735 + $resposta = file($res."&FORMAT=".$formatoinfo);
  736 + $resposta = str_ireplace('<?xml version="1.0" encoding="UTF-8"?>',"",$resposta);
  737 + $resposta = str_ireplace('<?xml version="1.0" encoding="ISO-8859-1"?>',"",$resposta);
  738 + $resposta = str_ireplace("<?xml version='1.0' encoding='ISO-8859-1'?>","",$resposta);
  739 + $resposta = str_ireplace('<?xml',"",$resposta);
  740 + $resposta = str_ireplace("<","zzzzzzzzzz",$resposta);
  741 + $resposta = str_ireplace(">","zzzzzzzzzz",$resposta);
  742 + if (stristr(implode(" ",$resposta),"msWMSLoadGetMapParams"))
  743 + {
  744 + $resposta = file($res);
  745 + $resposta = str_ireplace('<?xml version="1.0" encoding="UTF-8"?>',"",$resposta);
  746 + $resposta = str_ireplace('<?xml version="1.0" encoding="ISO-8859-1"?>',"",$resposta);
  747 + $resposta = str_ireplace("<?xml version='1.0' encoding='ISO-8859-1'?>","",$resposta);
  748 + $resposta = str_ireplace('<?xml',"",$resposta);
  749 + $resposta = str_ireplace("<","zzzzzzzzzz",$resposta);
  750 + $resposta = str_ireplace(">","zzzzzzzzzz",$resposta);
  751 + }
  752 + $resultado[] = $resposta;
730 return $resultado; 753 return $resultado;
731 - $lines = file($res);  
732 - $lines = str_ireplace("<html>","",$lines);  
733 - $lines = str_ireplace("<body>","",$lines);  
734 - $lines = str_ireplace("</html>","",$lines);  
735 - $lines = str_ireplace("</body>","",$lines);  
736 - $lines = str_ireplace("#","",$lines);  
737 - $resultado[] = $lines;  
738 - return $resultado;  
739 } 754 }
740 if(($layer->connectiontype != MS_WMS) && ($layer->type == MS_LAYER_RASTER)) 755 if(($layer->connectiontype != MS_WMS) && ($layer->type == MS_LAYER_RASTER))
741 { 756 {
classesphp/classe_mapa.php
@@ -795,20 +795,18 @@ $imgdir - diretório temporário das imagens @@ -795,20 +795,18 @@ $imgdir - diretório temporário das imagens
795 $imgurl - url do imgdir 795 $imgurl - url do imgdir
796 $tiporep - tipo de representação das feições do mapa 796 $tiporep - tipo de representação das feições do mapa
797 $suportasld - Suporta SLD sim|nao. 797 $suportasld - Suporta SLD sim|nao.
798 - 798 +$formatosinfo - lista de formatos da requisição de atributos para a função getfeatureinfo (default text/plain)
799 Include: 799 Include:
800 <wmswfs.php> 800 <wmswfs.php>
801 */ 801 */
802 - function adicionatemawms($tema,$servico,$nome,$proj,$formato,$locaplic,$tipo,$versao,$nomecamada,$dir_tmp,$imgdir,$imgurl,$tiporep,$suportasld) 802 + function adicionatemawms($tema,$servico,$nome,$proj,$formato,$locaplic,$tipo,$versao,$nomecamada,$dir_tmp,$imgdir,$imgurl,$tiporep,$suportasld,$formatosinfo="text/plain")
803 { 803 {
804 require_once("wmswfs.php"); 804 require_once("wmswfs.php");
805 //limpa selecao 805 //limpa selecao
806 if (file_exists(($this->arquivo)."qy")) 806 if (file_exists(($this->arquivo)."qy"))
807 {unlink (($this->arquivo)."qy");} 807 {unlink (($this->arquivo)."qy");}
808 -  
809 $nmap = ms_newMapObj($locaplic."/aplicmap/novotema.map"); 808 $nmap = ms_newMapObj($locaplic."/aplicmap/novotema.map");
810 $layer = $nmap->getlayerbyname("novotema"); 809 $layer = $nmap->getlayerbyname("novotema");
811 -  
812 $layer->set("name",$tema); 810 $layer->set("name",$tema);
813 $layer->set("status",MS_DEFAULT); 811 $layer->set("status",MS_DEFAULT);
814 $layer->setmetadata("tema",$nomecamada); 812 $layer->setmetadata("tema",$nomecamada);
@@ -856,6 +854,7 @@ Include: @@ -856,6 +854,7 @@ Include:
856 $layer->setmetadata("wms_name",$tema); 854 $layer->setmetadata("wms_name",$tema);
857 $layer->setmetadata("wms_server_version",$versao); 855 $layer->setmetadata("wms_server_version",$versao);
858 $layer->setmetadata("wms_formatlist",$formato); 856 $layer->setmetadata("wms_formatlist",$formato);
  857 + $layer->setmetadata("formatosinfo",$formatosinfo);
859 $layer->setmetadata("wms_exceptions_format","application/vnd.ogc.se_xml"); 858 $layer->setmetadata("wms_exceptions_format","application/vnd.ogc.se_xml");
860 $layer->setmetadata("wms_style",$nome); 859 $layer->setmetadata("wms_style",$nome);
861 $layer->setmetadata("wms_connectiontimeout","30"); 860 $layer->setmetadata("wms_connectiontimeout","30");
classesphp/mapa_controle.php
@@ -636,7 +636,7 @@ Include: @@ -636,7 +636,7 @@ Include:
636 case "adicionatemawms": 636 case "adicionatemawms":
637 include("classe_mapa.php"); 637 include("classe_mapa.php");
638 $m = new Mapa($map_file); 638 $m = new Mapa($map_file);
639 - $m->adicionatemawms($tema,$servico,$nome,$proj,$formato,$locaplic,$tipo,$versao,$nomecamada,$dir_tmp,$imgdir,$imgurl,$tiporep,$suportasld); 639 + $m->adicionatemawms($tema,$servico,$nome,$proj,$formato,$locaplic,$tipo,$versao,$nomecamada,$dir_tmp,$imgdir,$imgurl,$tiporep,$suportasld,$formatosinfo);
640 $teste = $m->mapa->draw(); 640 $teste = $m->mapa->draw();
641 $retorno = "ok"; 641 $retorno = "ok";
642 if ($teste != "") 642 if ($teste != "")
classesphp/wmswfs.php
@@ -323,7 +323,8 @@ function temaswms() @@ -323,7 +323,8 @@ function temaswms()
323 } 323 }
324 } 324 }
325 $retorna[] = "<br>Proj.:<input size=30 id=proj type=text class=digitar value='".implode(",",wms_srs($dom))."'/><br>"; 325 $retorna[] = "<br>Proj.:<input size=30 id=proj type=text class=digitar value='".implode(",",wms_srs($dom))."'/><br>";
326 - $retorna[] = "<br>Formatos:<input size=30 id=formatos type=text class=digitar value='".implode(",",wms_formats($dom))."'/><br><br>"; 326 + $retorna[] = "<br>Formatos imagem:<input size=30 id=formatos type=text class=digitar value='".implode(",",wms_formats($dom))."'/><br><br>";
  327 + $retorna[] = "<br>Formatos info:<input size=30 id=formatosinfo type=text class=digitar value='".implode(",",wms_formatsinfo($dom))."'/><br><br>";
327 $retorna[] = "<br>Versao:<input size=30 id=versao type=text class=digitar value='".(wms_version($dom))."'/><br><br>"; 328 $retorna[] = "<br>Versao:<input size=30 id=versao type=text class=digitar value='".(wms_version($dom))."'/><br><br>";
328 $retorna[] = "<br>Suporta SLD:<input size=30 id=suportasld type=text class=digitar value='".$suporta."'/><br><br><br>"; 329 $retorna[] = "<br>Suporta SLD:<input size=30 id=suportasld type=text class=digitar value='".$suporta."'/><br><br><br>";
329 $cp->set_data(implode($retorna)); 330 $cp->set_data(implode($retorna));
@@ -500,6 +501,23 @@ function wms_formats ( $dom ) @@ -500,6 +501,23 @@ function wms_formats ( $dom )
500 return $arr; 501 return $arr;
501 } 502 }
502 /* 503 /*
  504 +function: wms_formatsinfo
  505 +
  506 +Retorna os formatos existentes de retorno da opção getfeatureinfo.
  507 +*/
  508 +function wms_formatsinfo ( $dom )
  509 +{
  510 + $xpath = new DOMXPath($dom);
  511 + $query = '//WMT_MS_Capabilities/Capability/Request/GetFeatureInfo/Format';
  512 + $entries = $xpath->query($query);
  513 + $arr = array();
  514 + foreach ($entries as $entry)
  515 + {
  516 + $arr[] = $entry->nodeValue;
  517 + }
  518 + return $arr;
  519 +}
  520 +/*
503 function: wms_estilos 521 function: wms_estilos
504 522
505 Retorna os estilos de um WMS. 523 Retorna os estilos de um WMS.
ferramentas/conectarwms/index.js
@@ -139,7 +139,7 @@ function adiciona() @@ -139,7 +139,7 @@ function adiciona()
139 } 139 }
140 aguarde("block"); 140 aguarde("block");
141 var tiporep = $i("tiporep").value 141 var tiporep = $i("tiporep").value
142 - var p = g_locaplic+"/classesphp/mapa_controle.php?g_sid="+g_sid+"&funcao=adicionatemawms&servico="+$i("servico").value+"&tema="+g_tema+"&nome="+g_nometema+"&proj="+$i("proj").value+"&formato="+$i("formatos").value+"&tipo="+g_tipo+"&versao="+$i("versao").value+"&nomecamada="+g_nomecamada+"&tiporep="+tiporep+"&suportasld="+g_sld 142 + var p = g_locaplic+"/classesphp/mapa_controle.php?g_sid="+g_sid+"&funcao=adicionatemawms&servico="+$i("servico").value+"&tema="+g_tema+"&nome="+g_nometema+"&proj="+$i("proj").value+"&formato="+$i("formatos").value+"&tipo="+g_tipo+"&versao="+$i("versao").value+"&nomecamada="+g_nomecamada+"&tiporep="+tiporep+"&suportasld="+g_sld+"&formatosinfo="+$i("formatosinfo").value
143 var cp = new cpaint(); 143 var cp = new cpaint();
144 //cp.set_debug(2) 144 //cp.set_debug(2)
145 cp.set_response_type("JSON"); 145 cp.set_response_type("JSON");
ms_registraip.php 0 → 100644