From a6982646bc3905e8cf4950de153c68b60860460e Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Wed, 3 Oct 2007 18:22:41 +0000 Subject: [PATCH] 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 | 47 +++++++++++++++++++++++++++++++---------------- classesphp/classe_mapa.php | 7 +++---- classesphp/mapa_controle.php | 2 +- classesphp/wmswfs.php | 20 +++++++++++++++++++- ferramentas/conectarwms/index.js | 2 +- ms_registraip.php | 0 6 files changed, 55 insertions(+), 23 deletions(-) create mode 100644 ms_registraip.php diff --git a/classesphp/classe_atributos.php b/classesphp/classe_atributos.php index 287b9c3..1bd18f6 100644 --- a/classesphp/classe_atributos.php +++ b/classesphp/classe_atributos.php @@ -710,6 +710,19 @@ function identificaQBP($tema,$x,$y,$map_file,$resolucao,$item,$tiporetorno="") $res .= "&Y=".round($ptimg->y); $res .= "&WIDTH=".$mapa->width; $res .= "&HEIGHT=".$mapa->height; + $formatoinfo = "text/plain"; + $formatosinfo = $layer->getmetadata("formatosinfo"); + if ($formatosinfo != "") + { + $formatosinfo = explode(",",$formatosinfo); + if ($formatosinfo[0] != ""){$formatoinfo = $formatosinfo[0];} + foreach ($formatosinfo as $f) + { + if(strtoupper($f) == "TEXT/PLAIN") + {$formatoinfo = "text/plain";} + } + + } $srs = $layer->getmetadata("wms_srs"); $srss = explode(" ",$srs); $srs = "EPSG:4326"; @@ -719,23 +732,25 @@ function identificaQBP($tema,$x,$y,$map_file,$resolucao,$item,$tiporetorno="") {$srs = "EPSG:4291";} } $res .= "&SRS=".$srs; - $res = file($res); - $res = str_ireplace('',"",$res); - $res = str_ireplace('',"",$res); - $res = str_ireplace("","",$res); - $res = str_ireplace('","zzzzzzzzzz",$res); - $resultado[] = $res; + $resposta = file($res."&FORMAT=".$formatoinfo); + $resposta = str_ireplace('',"",$resposta); + $resposta = str_ireplace('',"",$resposta); + $resposta = str_ireplace("","",$resposta); + $resposta = str_ireplace('","zzzzzzzzzz",$resposta); + if (stristr(implode(" ",$resposta),"msWMSLoadGetMapParams")) + { + $resposta = file($res); + $resposta = str_ireplace('',"",$resposta); + $resposta = str_ireplace('',"",$resposta); + $resposta = str_ireplace("","",$resposta); + $resposta = str_ireplace('","zzzzzzzzzz",$resposta); + } + $resultado[] = $resposta; return $resultado; - $lines = file($res); - $lines = str_ireplace("","",$lines); - $lines = str_ireplace("","",$lines); - $lines = str_ireplace("","",$lines); - $lines = str_ireplace("","",$lines); - $lines = str_ireplace("#","",$lines); - $resultado[] = $lines; - return $resultado; } if(($layer->connectiontype != MS_WMS) && ($layer->type == MS_LAYER_RASTER)) { diff --git a/classesphp/classe_mapa.php b/classesphp/classe_mapa.php index 0ffade7..7069cf8 100644 --- a/classesphp/classe_mapa.php +++ b/classesphp/classe_mapa.php @@ -795,20 +795,18 @@ $imgdir - diretório temporário das imagens $imgurl - url do imgdir $tiporep - tipo de representação das feições do mapa $suportasld - Suporta SLD sim|nao. - +$formatosinfo - lista de formatos da requisição de atributos para a função getfeatureinfo (default text/plain) Include: */ - function adicionatemawms($tema,$servico,$nome,$proj,$formato,$locaplic,$tipo,$versao,$nomecamada,$dir_tmp,$imgdir,$imgurl,$tiporep,$suportasld) + function adicionatemawms($tema,$servico,$nome,$proj,$formato,$locaplic,$tipo,$versao,$nomecamada,$dir_tmp,$imgdir,$imgurl,$tiporep,$suportasld,$formatosinfo="text/plain") { require_once("wmswfs.php"); //limpa selecao if (file_exists(($this->arquivo)."qy")) {unlink (($this->arquivo)."qy");} - $nmap = ms_newMapObj($locaplic."/aplicmap/novotema.map"); $layer = $nmap->getlayerbyname("novotema"); - $layer->set("name",$tema); $layer->set("status",MS_DEFAULT); $layer->setmetadata("tema",$nomecamada); @@ -856,6 +854,7 @@ Include: $layer->setmetadata("wms_name",$tema); $layer->setmetadata("wms_server_version",$versao); $layer->setmetadata("wms_formatlist",$formato); + $layer->setmetadata("formatosinfo",$formatosinfo); $layer->setmetadata("wms_exceptions_format","application/vnd.ogc.se_xml"); $layer->setmetadata("wms_style",$nome); $layer->setmetadata("wms_connectiontimeout","30"); diff --git a/classesphp/mapa_controle.php b/classesphp/mapa_controle.php index 689b825..8617428 100644 --- a/classesphp/mapa_controle.php +++ b/classesphp/mapa_controle.php @@ -636,7 +636,7 @@ Include: case "adicionatemawms": include("classe_mapa.php"); $m = new Mapa($map_file); - $m->adicionatemawms($tema,$servico,$nome,$proj,$formato,$locaplic,$tipo,$versao,$nomecamada,$dir_tmp,$imgdir,$imgurl,$tiporep,$suportasld); + $m->adicionatemawms($tema,$servico,$nome,$proj,$formato,$locaplic,$tipo,$versao,$nomecamada,$dir_tmp,$imgdir,$imgurl,$tiporep,$suportasld,$formatosinfo); $teste = $m->mapa->draw(); $retorno = "ok"; if ($teste != "") diff --git a/classesphp/wmswfs.php b/classesphp/wmswfs.php index b89d086..cde9ca8 100644 --- a/classesphp/wmswfs.php +++ b/classesphp/wmswfs.php @@ -323,7 +323,8 @@ function temaswms() } } $retorna[] = "
Proj.:
"; - $retorna[] = "
Formatos:

"; + $retorna[] = "
Formatos imagem:

"; + $retorna[] = "
Formatos info:

"; $retorna[] = "
Versao:

"; $retorna[] = "
Suporta SLD:


"; $cp->set_data(implode($retorna)); @@ -500,6 +501,23 @@ function wms_formats ( $dom ) return $arr; } /* +function: wms_formatsinfo + +Retorna os formatos existentes de retorno da opção getfeatureinfo. +*/ +function wms_formatsinfo ( $dom ) +{ + $xpath = new DOMXPath($dom); + $query = '//WMT_MS_Capabilities/Capability/Request/GetFeatureInfo/Format'; + $entries = $xpath->query($query); + $arr = array(); + foreach ($entries as $entry) + { + $arr[] = $entry->nodeValue; + } + return $arr; +} +/* function: wms_estilos Retorna os estilos de um WMS. diff --git a/ferramentas/conectarwms/index.js b/ferramentas/conectarwms/index.js index 1b7d1c5..9fada74 100644 --- a/ferramentas/conectarwms/index.js +++ b/ferramentas/conectarwms/index.js @@ -139,7 +139,7 @@ function adiciona() } aguarde("block"); var tiporep = $i("tiporep").value - 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 + 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 var cp = new cpaint(); //cp.set_debug(2) cp.set_response_type("JSON"); diff --git a/ms_registraip.php b/ms_registraip.php new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ms_registraip.php -- libgit2 0.21.2