1 ){
$servico = $servico."&";
}
else{
$teste = explode("?",$servico);
if ( count($teste) == 1 ){
$servico = $servico."?";
}
}
$wms_service_request = $servico . "REQUEST=GetCapabilities&SERVICE=WMS";
$teste = explode("version",strtolower($wms_service_request));
if(count($teste) == 1){
$wms_service_request .= "&VERSION=1.1.1";
}
$nome = $dir_tmp."/wms".md5($servico).".xml";
if(!file_exists($nome)){
$wms_capabilities = file($wms_service_request);
if( !$wms_capabilities ){
return "erro";
}
else{
$fp = fopen($nome, 'w');
fwrite($fp, implode("",$wms_capabilities));
fclose($fp);
}
}
return $nome;
}
catch(Exception $e){return "erro";}
}
/*
Function: existeTemaWFS
Verifica se existe um tema em um servico WFS.
Globais:
$wfs {string} - endereço do serviço
$tema {string} - tema (layer) que será verificado
Retorno:
{string} - sim|nao
*/
function existeTemaWFS()
{
global $wfs,$tema;
$capabilities = implode("",$wfs);
$dom = new DomDocument();
$dom->loadXML($capabilities);
$xpath = new DOMXPath($dom);
$query = '//WFS_Capabilities/FeatureTypeList/FeatureType';
$entries = $xpath->query($query);
foreach($entries as $e)
{
$e->getElementsByTagName("Name");
$n = $e->nodeValue;
if ($n == $tema)
{return "sim";}
}
return "nao";
}
/*
Function: existeWFS
Verifica se existe um servico WFS invocando o getcapabilities.
Global:
$servico {string} - endereço do serviço
Retorno:
{string} - nao|true
*/
function existeWFS()
{
global $servico;
$teste = explode("=",$servico);
if ( count($teste) > 1 ){$servico = $servico."&";}
$wms_service_request = $servico . "REQUEST=GetCapabilities&SERVICE=WFS";
# -------------------------------------------------------------
# Test that the capabilites file has successfully downloaded.
#
if( !($wfs_capabilities = file($wms_service_request)) ) {
# Cannot download the capabilities file.
return "nao";
}
else
{return $wfs_capabilities;}
}
/*
Function: getcapabilities
Chama a função getcapabilities e retorna o resultado.
Global:
$servico {string} - Endereço do web service.
Retorno:
{string}
*/
function getcapabilities()
{
global $servico;
$teste = explode("=",$servico);
if ( count($teste) > 1 ){$servico = $servico."&";}
$wms_service_request = $servico . "REQUEST=GetCapabilities&SERVICE=WMS&version=1.1.0";
# -------------------------------------------------------------
# Test that the capabilites file has successfully downloaded.
#
if( !($wms_capabilities = file($wms_service_request)) ) {
# Cannot download the capabilities file.
$cp->set_data("Erro de acesso");
return;
}
$wms_capabilities = implode("",$wms_capabilities);
return(xml2html($wms_capabilities));
}
/*
function: getcapabilities2
Chama a função getcapabilities e retorna o resultado pré-formatado (WMS).
Global:
$servico {string} - Endereço do web service.
Retorno:
{string}
*/
function getcapabilities2()
{
global $servico;
$teste = explode("=",$servico);
if ( count($teste) > 1 ){$servico = $servico."&";}
$wms_service_request = $servico . "REQUEST=GetCapabilities&SERVICE=WMS";
$teste = explode("version",strtolower($wms_service_request));
if(count($teste) == 1)
{$wms_service_request .= "&VERSION=1.1.1";}
# -------------------------------------------------------------
# Test that the capabilites file has successfully downloaded.
#
if( !($wms_capabilities = file($wms_service_request)) ) {
# Cannot download the capabilities file.
$cp->set_data("Erro de acesso");
return;
}
$wms_capabilities = implode("",$wms_capabilities);
$dom = new DomDocument();
$dom->loadXML($wms_capabilities);
$xpath = new DOMXPath($dom);
$retorno = "";
$query = '//WMT_MS_Capabilities/Service/Name';
$entries = $xpath->query($query);
if($entries == FALSE || $entries->length == 0){
$rn = $xpath->registerNamespace("tag", "http://www.opengis.net/wms");
$entries = $xpath->query('/tag:WMS_Capabilities/tag:Service/tag:Name');
}
$temp = "";
foreach ($entries as $entry){$temp .= $entry->nodeValue;}
$retorno .= "Nome: ".$temp;
$query = '//WMT_MS_Capabilities/Service/Title';
$entries = $xpath->query($query);
if($entries == FALSE || $entries->length == 0){
$entries = $xpath->query('/tag:WMS_Capabilities/tag:Service/tag:Title');
}
$temp = "";
foreach ($entries as $entry){$temp .= $entry->nodeValue;}
$retorno .= "
Título: ".$temp;
$query = '//WMT_MS_Capabilities/Service/Abstract';
$entries = $xpath->query($query);
if($entries == FALSE || $entries->length == 0){
$entries = $xpath->query('/tag:WMS_Capabilities/tag:Service/tag:Abstract');
}
$temp = "";
foreach ($entries as $entry){$temp .= $entry->nodeValue;}
$retorno .= "
Resumo: ".$temp;
$query = '//WMT_MS_Capabilities/Service/KeywordList';
$entries = $xpath->query($query);
if($entries == FALSE || $entries->length == 0){
$entries = $xpath->query('/tag:WMS_Capabilities/tag:Service/tag:KeywordList');
}
$temp = "";
foreach ($entries as $entry){$temp .= $entry->nodeValue.".";}
$retorno .= "
Palavras-chave: ".$temp;
$query = '//WMT_MS_Capabilities/Service/ContactInformation';
$entries = $xpath->query($query);
if($entries == FALSE || $entries->length == 0){
$entries = $xpath->query('/tag:WMS_Capabilities/tag:Service/tag:ContactInformation');
}
$temp = "";
foreach ($entries as $entry){$temp .= $entry->nodeValue.".";}
$retorno .= "
Contato: ".$temp;
return($retorno);
}
/*
getcapabilities3
Chama a função getcapabilities e retorna o resultado formatado (WFS).
Global:
$servico {string} - Endereço do web service.
*/
function getcapabilities3()
{
global $servico;
$teste = explode("=",$servico);
if ( count($teste) > 1 ){$servico = $servico."&";}
$wms_service_request = $servico . "request=getcapabilities&service=wfs&version=1.0.0";
# -------------------------------------------------------------
# Test that the capabilites file has successfully downloaded.
#
if( !($wms_capabilities = file($wms_service_request)) ) {
# Cannot download the capabilities file.
$cp->set_data("Erro de acesso");
return;
}
$wms_capabilities = implode("",$wms_capabilities);
$dom = new DomDocument();
$dom->loadXML($wms_capabilities);
$retorno = "";
$services = $dom->getElementsByTagName("Service");
foreach ($services as $service)
{
$vs = $service->getElementsByTagName("Name");
$temp = "";
foreach ($vs as $v)
{$temp .= $v->nodeValue;}
$retorno .= "Nome: ".$temp;
$vs = $service->getElementsByTagName("Title");
$temp = "";
foreach ($vs as $v)
{$temp .= $v->nodeValue;}
$retorno .= "
Título: ".$temp;
}
return($retorno);
}
/*
Function: temaswms
Lista os temas de um web service WMS.
Globais:
$servico {string} - Endereço do web service.
$id_ws {string} - (opcional) id do serviço registrado no sistema de administração do i3geo. Se definido, é feito o registro de tentativa de acesso ao serviço no sistema de administração
Retorno:
{html} - htaml formatado para permitir a escolha de uma camada
*/
function temaswms()
{
global $servico,$id_ws;
$wms_service_request = gravaCacheWMS($servico);
# -------------------------------------------------------------
# Test that the capabilites file has successfully downloaded.
#
//$wms_service_request = "c://temp//teste.xml";
include_once(dirname(__FILE__)."/../admin/php/admin.php");
include_once(dirname(__FILE__)."/../admin/php/webservices.php");
//error_reporting(0);
if($wms_service_request == "erro") {
# Cannot download the capabilities file.
//registra a tentativa de acesso
if(isset($id_ws))
{
adicionaAcesso($id_ws,false);
}
$cp->set_data("Erro de acesso");
return;
}
elseif(isset($id_ws))
{
if($id_ws != "")
adicionaAcesso($id_ws,true);
}
$handle = fopen ($wms_service_request, "r");
$wms_capabilities = fread($handle, filesize($wms_service_request));
fclose ($handle);
$dom = new DomDocument();
$dom->loadXML($wms_capabilities);
//var_dump($dom);exit;
//$layers = wms_layers($dom);
$xpath = new DOMXPath($dom);
//verifica sld
$suporta = "nao";
$query = '//WMT_MS_Capabilities/Capability/UserDefinedSymbolization';
$entries = $xpath->query($query);
if($entries->length == 0){
$suporta = "sim";
}
else{
foreach($entries as $e)
{$n = $e->getAttribute("SupportSLD");}
if ($n == 1){$suporta = "sim";}
}
$xpath = new DOMXPath($dom);
//var_dump($xpath);exit;
$q = '//WMT_MS_Capabilities/Capability';
$query = $q.'/Layer';
$layers = $xpath->query($query);
if($layers == FALSE || $layers->length == 0){
$teste = $xpath->registerNamespace("tag", "http://www.opengis.net/wms");
$q = '/tag:WMS_Capabilities/tag:Capability';
$query = $q.'/tag:Layer';
$layers = $xpath->query($query);
}
//var_dump($layers);exit;
$retorna = array();
foreach ($layers as $layer)
{
$layers1 = $xpath->query('/Layer',$layer);
if($layers1->length == 0) //v 1.3.0
{$layers1 = $layers;}
else{
$r = pegaTag($layer);
$retorna = imprimeTag($r,$retorna);
}
foreach ($layers1 as $layer1)
{
$layers2 = $xpath->query('Layer',$layer1);
$r1 = pegaTag($layer1);
$camada1 = $r1["nome"];
$titulocamada1 = $r1["titulo"];
$retorna = imprimeTag($r1,$retorna);
if($r1["estilos"])
{$retorna = imprimeEstilos($r1["estilos"],$suporta,$retorna,$camada1,$titulocamada1);}
else
{
if($layers2->length == 0)
$retorna[] = " default".$titulocamada1."
";
}
foreach ($layers2 as $layer2)
{
$layers3 = $xpath->query('Layer',$layer2);
$r2 = pegaTag($layer2);
$camada2 = $r2["nome"];
$titulocamada2 = $r2["titulo"];
$retorna = imprimeTag($r2,$retorna);
if($r2["estilos"])
{$retorna = imprimeEstilos($r2["estilos"],$suporta,$retorna,$camada2,$titulocamada2);}
else
{
if($layers3->length == 0)
$retorna[] = " default ".$titulocamada2."
";
}
foreach ($layers3 as $layer3)
{
$r3 = pegaTag($layer3);
$camada3 = $r3["nome"];
$titulocamada3 = $r3["titulo"];
$retorna = imprimeTag($r3,$retorna);
if($r3["estilos"])
{$retorna = imprimeEstilos($r3["estilos"],$suporta,$retorna,$camada3,$titulocamada3);}
else
{
$retorna[] = " default ".$titulocamada3."
";
}
}
}
if(count($layers2) == 1){$retorna[] = "
Projeção:
"; $retorna[] = "Formatos imagem:
"; $retorna[] = "Formatos de informação:
"; $retorna[] = "Versão:
"; $retorna[] = "Suporta SLD:
"; return(implode($retorna)); } /* Function: listaLayersWMS Lista os temas de um web service WMS e retorna o resultado como um array. Globais: $servico {string} - Endereço do web service. $nivel - nível do layer na hierarquia existente no getcapabilities $nomelayer - nome do layer que contém os pr�ximos layers Retorno: {array} */ function listaLayersWMS() { global $servico,$nivel,$id_ws,$nomelayer,$tipo_ws; if(!isset($nomelayer)){ $nomelayer = "undefined"; } //para o caso do sistema de metadados estatisticos $wms_service_request = gravaCacheWMS($servico); include_once(dirname(__FILE__)."/../admin/php/admin.php"); include_once(dirname(__FILE__)."/../admin/php/webservices.php"); error_reporting(0); if($tipo_ws != "WMSMETAESTAT" && $nivel < 2){ if($wms_service_request == "erro") { //registra a tentativa de acesso if(isset($id_ws)){ adicionaAcesso($id_ws,false); } $cp->set_data("Erro de acesso"); return; } elseif(isset($id_ws)){ adicionaAcesso($id_ws,true); } } $handle = fopen ($wms_service_request, "r"); $wms_capabilities = fread ($handle, filesize ($wms_service_request)); fclose ($handle); $dom = new DomDocument(); $dom->loadXML($wms_capabilities); $xpath = new DOMXPath($dom); $q = '//WMT_MS_Capabilities/Capability'; $res = array(); if($nomelayer != "undefined"){ for($i=0; $i < $nivel-1 ; ++$i){ $q .= "/Layer"; } $layersanteriores = $xpath->query($q); foreach ($layersanteriores as $layeranterior){ $r1 = pegaTag($layeranterior); //echo "";var_dump($layeranterior);
if($r1["nome"] == $nomelayer || $r1["titulo"] == $nomelayer)
{
$layers = $xpath->query('Layer',$layeranterior);
foreach ($layers as $layer)
{
$r = pegaTag($layer);
if(!$r["nome"]){$r["nome"] = $r["titulo"];}
$res[] = array("nome"=>$r["nome"],"titulo"=>$r["titulo"],"estilos"=>$r["estilos"],"srs"=>wms_srs($dom),"formats"=>wms_formats($dom),"version"=>wms_version($dom),"formatsinfo"=>wms_formatsinfo($dom));
}
if($layers->length == 0)
{
$res[] = array("nome"=>$r1["nome"],"titulo"=>$r1["titulo"],"estilos"=>(array(array("nome"=>"default","titulo"=>"default"))),"srs"=>wms_srs($dom),"formats"=>wms_formats($dom),"version"=>wms_version($dom),"formatsinfo"=>wms_formatsinfo($dom));
}
}
}
}
else{
//
//pega os layers no primeiro nível
//
$q .= "/Layer";
$layers = $xpath->query($q);
$res = array();
foreach ($layers as $layer){
$r = pegaTag($layer);
//var_dump($r);
if(!$r["nome"]){
$r["nome"] = $r["titulo"];
}
if(array_search("Style",$r["tags"]) || array_search("Layer",$r["tags"])){
$res[] = array(
"nome"=>$r["nome"],
"titulo"=>$r["titulo"],
"estilos"=>$r["estilos"],
"srs"=>wms_srs($dom),
"formats"=>wms_formats($dom),
"version"=>wms_version($dom),
"formatsinfo"=>wms_formatsinfo($dom)
);
}
}
}
//exit;
return($res);
}
function imprimeEstilos($es,$suporta,$retorna,$tval,$tituloalternativo)
{
foreach($es as $e)
{
//$tval = $e["titulo"];
$nomeestilo = $e["nome"];
$nomecamada = $e["titulo"];
//if($nomecamada == "default" || $nomecamada == "")
//{$nomecamada = $tituloalternativo;}
$tituloestilo = $e["titulo"];
$retorna[] = "" . $nomeestilo." ".$tituloestilo."
";
}
return $retorna;
}
function imprimeTag($r,$retorna)
{
if(!$r["nome"])
{$retorna[] = "
".$r["titulo"]."
";}
else
{
$retorna[] = "
";
$retorna[] = "
".$r["nome"]."
";
$retorna[] = "
".$r["titulo"]."
";
$retorna[] = "
".$r["resumo"]."
";
}
return $retorna;
}
function pegaTag($layer)
{
error_reporting(0);
$noslayer = $layer->childNodes;
$resultado = array(
"estiloas" => array(),
"tags" => array()
);
for ($i = 0; $i < $noslayer->length; ++$i){
$tnome = $noslayer->item($i)->tagName;
$tvalor = $noslayer->item($i)->nodeValue;
if($tnome){
//echo "
".$tnome;
if ($tnome == "Title")
{$resultado["titulo"] = $tvalor;}
if ($tnome == "Name")
{$resultado["nome"] = $tvalor;}
if ($tnome == "Abstract")
{$resultado["resumo"] = $tvalor;}
if ($tnome == "Style"){
$ss = $noslayer->item($i)->childNodes;
$ssl = $ss->length;
$n = "";
$t = "";
for ($s = 0; $s < $ssl; $s++)
{
$snome = $ss->item($s)->tagName;
$svalor = $ss->item($s)->nodeValue;
if($snome)
{
if ($snome == "Title")
{$t=$svalor;}
if ($snome == "Name")
{$n=$svalor;}
}
}
//echo "";echo $n;
if($n != ""){
array_push($resultado["estilos"],array("nome"=>$n,"titulo"=>$t));
}
}
array_push($resultado["tags"],$tnome);
//echo "";var_dump($resultado);
}
}
return $resultado;
}
/*
temaswfs
Lista os temas de um web service WFS.
parameters:
$servico - Endereço do web service.
$cp - Objeto CPAINT.
*/
function temaswfs()
{
global $servico,$cp;
$teste = explode("=",$servico);
if ( count($teste) > 1 ){$servico = $servico."&";}
$wms_service_request = $servico . "REQUEST=GetCapabilities&SERVICE=WFS";
# -------------------------------------------------------------
# Test that the capabilites file has successfully downloaded.
#
if( !($wms_capabilities = file($wms_service_request)) ) {
# Cannot download the capabilities file.
$cp->set_data("Erro de acesso");
return;
}
$wms_capabilities = implode("",$wms_capabilities);
$dom = new DomDocument();
$dom->loadXML($wms_capabilities);
$services = $dom->getElementsByTagName("Service");
foreach ($services as $service)
{
$vs = $service->getElementsByTagName("Name");
$serv = "";
foreach ($vs as $v)
{$serv .= $v->nodeValue;}
}
$layers = $dom->getElementsByTagName("FeatureType");
foreach ($layers as $layer)
{
$vs = $layer->getElementsByTagName("Title");
$temp1 = "";
foreach ($vs as $v)
{$temp1 .= $v->nodeValue;}
$vs = $layer->getElementsByTagName("Abstract");
$temp2 = "";
foreach ($vs as $v)
{$temp2 .= $v->nodeValue;}
$vs = $layer->getElementsByTagName("SRS");
$temp3 = array();
foreach ($vs as $v)
{$temp3[] = $v->nodeValue;}
$temp3 = implode("#",$temp3);
$vs = $layer->getElementsByTagName("Name");
$temp = "";
foreach ($vs as $v)
{$temp .= $v->nodeValue;}
$temp = "" . $temp . "
";
$retorno .= "
".$temp.$temp1."
".$temp2."
";
}
$cp->set_data($retorno);
}
/*
Function: xml2html
Converte caracteres XML em HTML.
Parametro:
$str {string} - Xml que será convertido
Retorno:
{string}
*/
function xml2html ( $str )
{
$str = ereg_replace("&","&",$str);
$str = ereg_replace("<","<",$str);
$str = ereg_replace(">",">
",$str);
return $str;
}
/*
wms_descricao
Retorna a descrição de um serviço (n�).
*/
function wms_descricao ( $dom,$xp )
{
$xpath = new DOMXPath($dom);
$query = $xp;
$entries = $xpath->query($query);
$n = "";
foreach ($entries as $entry)
{
$n = $entry->nodeValue;
}
return $n;
}
/*
wms_descricaov
Retorna a descrição de um serviço (atributo).
*/
function wms_descricaov ( $dom,$xp,$attrib )
{
$xpath = new DOMXPath($dom);
$query = $xp;
$entries = $xpath->query($query);
$n = "";
foreach ($entries as $entry)
{
$n = $entry->getAttribute($attrib);
}
return $n;
}
/*
wms_descricaon
Retorna a descrição de um serviço (filho de um n�).
*/
function wms_descricaon ( $dom,$xp,$n ) {
$ctx = xpath_new_context($dom);
$xpnode = xpath_eval($ctx,$xp);
$dtnode = $xpnode->nodeset[$n]->first_child();
return $dtnode->content;
}
/*
wms_title
Retorna o título de um WMS.
*/
function wms_title ( $dom ) {
#
# Read the WMS service title and return it as text.
#
$xpath = new DOMXPath($dom);
$query = '//WMT_MS_Capabilities/Service/Title';
$entries = $xpath->query($query);
foreach ($entries as $entry){$nomeserv = $entry->nodeValue;}
return $nomeserv;
}
/*
wms_onlineresource
Retorna o recurso on-line de um WMS.
*/
function wms_onlineresource ( $dom ) {
#
# Read the WMS online resource URL and return it as text.
#
$xp = "/WMT_MS_Capabilities/Service/OnlineResource";
$ctx = xpath_new_context($dom);
$xpnode = xpath_eval($ctx,$xp);
return $xpnode->nodeset[0]->get_attribute("href");
}
/*
wms_formats
Retorna os formatos de imagem de um WMS.
*/
function wms_formats ( $dom )
{
$xpath = new DOMXPath($dom);
$query = '//WMT_MS_Capabilities/Capability/Request/GetMap/Format';
$entries = $xpath->query($query);
if($entries == FALSE || $entries->length == 0){
$teste = $xpath->registerNamespace("tag", "http://www.opengis.net/wms");
$q = '/tag:WMS_Capabilities/tag:Capability/tag:Request/tag:GetMap/tag:Format';
$entries = $xpath->query($q);
}
$arr = array();
foreach ($entries as $entry)
{
$arr[] = $entry->nodeValue;
}
return $arr;
}
/*
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);
if($entries == FALSE || $entries->length == 0){
$teste = $xpath->registerNamespace("tag", "http://www.opengis.net/wms");
$q = '/tag:WMS_Capabilities/tag:Capability/tag:Request/tag:GetCapabilities/tag:Format';
$entries = $xpath->query($q);
}
$arr = array();
foreach ($entries as $entry)
{
$arr[] = $entry->nodeValue;
}
return $arr;
}
/*
wms_estilos
Retorna os estilos de um WMS.
*/
function wms_estilos ( $dom ) {
#
# Read the WMS image formats and return them as an array.
#
//$xp = "/Style";
//$ctx = xpath_new_context($dom);
//$xpnode = xpath_eval($ctx,$xp);
//return $xpnode->nodeset;
$return = $dom->getElementsByTagName("Style");
}
/*
wms_exceptions
Retorna as exceptions de um WMS.
*/
function wms_exceptions ( $dom ) {
#
# Read the WMS exception formats and return them as an array.
#
$xp = "/WMT_MS_Capabilities/Capability/Exception/Format";
$ctx = xpath_new_context($dom);
$xpnode = xpath_eval($ctx,$xp);
$arr = array();
for( $i = 0; $i < sizeof($xpnode->nodeset); ++$i ) {
$dtnode = $xpnode->nodeset[0]->first_child();
array_push($arr,$dtnode->content);
}
return $arr;
}
/*
wms_version
Retorna a versao.
*/
function wms_version ( $dom )
{
$n = $dom->getElementsByTagName('WMT_MS_Capabilities');
$params = $dom->getElementsByTagName('*');
foreach ($params as $param) {
$v = $param -> getAttribute('version');
break;
}
return $v;
}
/*
wms_layers
Retorna os layers de um WMS.
*/
function wms_layers ( $dom ) {
#
# Read the WMS first level layers and return an
# array of nodes.
#
$xpath = new DOMXPath($dom);
$query = '//WMT_MS_Capabilities/Capability/Layer/Layer/Layer';
$entries = $xpath->query($query);
if ($entries->length == 0)
{
$query = '//WMT_MS_Capabilities/Capability/Layer';
$entries = $xpath->query($query);
}
else
{
$query = '//WMT_MS_Capabilities/Capability/Layer/Layer';
$entries = $xpath->query($query);
}
return $entries;
}
/*
wms_xpnode2content
Read the content child node of an element tag node WMS.
*/
function wms_xpnode2content( $xp_node ) {
#
# Read the content child node of an element tag
# node.
#
$content = "";
if( $xp_node->nodeset[0] ) {
$node = $xp_node->nodeset[0]->first_child();
$content = $node->content;
}
return $content;
}
/*
wms_srs
Retorna os SRSs WMS.
*/
function wms_srs( $dom )
{
$xpath = new DOMXPath($dom);
$query = '//WMT_MS_Capabilities/Capability/Layer/SRS';
$entries = $xpath->query($query);
if($entries == FALSE || $entries->length == 0){
$teste = $xpath->registerNamespace("tag", "http://www.opengis.net/wms");
$q = '/tag:WMS_Capabilities/tag:Capability/tag:Layer/tag:CRS';
$entries = $xpath->query($q);
}
$srs = "";
//utiliza apenas os epsg do Brasil
$single = array();
foreach ($entries as $entry)
{
$arr[] = $entry->nodeValue;
if ($entry->nodeValue == "CRS:84")
{$single[] = "CRS:84";}
if ($entry->nodeValue == "EPSG:4326")
{$single[] = "EPSG:4326";}
if ($entry->nodeValue == "EPSG:4618")
{$single[] = "EPSG:4618";}
}
if (count($single) > 0)
{$arr = $single;}
return $arr;
}
/*
wms_bbox
Retorna o BBOX de um WMS.
*/
function wms_bbox( $dom )
{
$xpath = new DOMXPath($dom);
$query = '//WMT_MS_Capabilities/Capability/Layer/LatLonBoundingBox';
$entries = $xpath->query($query);
foreach ($entries as $entry){$bbox = $entry->nodeValue;}
if ($bbox == '-1,-1,-1,-1')
{return '-180,-90,180,90';}
else
{return wms_bbox2txt($bbox);}
}
/*
wms_bbox2txt
Convert a BoundingBox node into a text string de um wms.
*/
function wms_bbox2txt( $node ) {
#
# Convert a BoundingBox node into a text string.
#
if( $node ) {
$txt .= 1 * $node->get_attribute("minx");
$txt .= ",";
$txt .= 1 * $node->get_attribute("miny");
$txt .= ",";
$txt .= 1 * $node->get_attribute("maxx");
$txt .= ",";
$txt .= 1 * $node->get_attribute("maxy");
}
else {
$txt = "-180,-90,180,90";
}
return $txt;
}
/*
wms_layer2html
Convert a Layer node into an HTML representation wms.
*/
function wms_layer2html( $node, $tipo , $layer ) {
#
# Convert a Layer node into an HTML representation.
#
$ctx = xpath_new_context($node);
$xp_title = xpath_eval($ctx,"/Title");
$xp_name = xpath_eval($ctx,"/Name");
if (wms_xpnode2content($xp_name) == ""){$xp_name = xpath_eval($ctx,"/name");}
$xp_srs = xpath_eval($ctx,"/SRS");
$xp_llbbox = xpath_eval($ctx,"/LatLonBoundingBox");
$xp_bbox = xpath_eval($ctx,"/BoundingBox");
$txt_title = wms_xpnode2content($xp_title);
$txt_name = wms_xpnode2content($xp_name);
$txt_srs = strtoupper(wms_xpnode2content($xp_srs));
$node_llbbox = $xp_llbbox->nodeset[0];
$node_bbox = $xp_bbox->nodeset[0];
$queryable = 0;
if ( $node->get_attribute("queryable") ) {
$queryable = 1;
}
$opaque = 0;
if ( $node->get_attribute("opaque") ) {
$opaque = 1;
}
//legenda
$xp_legenda = xpath_eval($ctx,"/LegendURL/OnlineResource");
$nodelegenda = $xp_legenda->nodeset[0];
if($nodelegenda)
{ $legenda = $nodelegenda->get_attribute("href");}
$html = "";
$html .= " ";
$html .= $txt_title . "\n";
$html .= wms_hidden("bbox_$txt_name", wms_bbox2txt($node_bbox));
$html .= wms_hidden("llbox_$txt_name", wms_bbox2txt($node_llbbox));
$html .= wms_hidden("srs_$txt_name", $txt_srs);
$html .= wms_hidden("query_$txt_name", $queryable );
$html .= wms_hidden("opaque_$txt_name", $opaque );
$html .= "
";
return $html;
}
/*
wms_layer3html
Convert a Layer node into an HTML representation sem radio.
*/
function wms_layer3html( $node ) {
#
# Convert a Layer node into an HTML representation sem radio.
#
$ctx = xpath_new_context($node);
$xp_title = xpath_eval($ctx,"/Title");
$xp_abs = xpath_eval($ctx,"/Abstract");
$txt_title = wms_xpnode2content($xp_title);
$txt_abs = wms_xpnode2content($xp_abs);
$html .= "".$txt_title . "" . "-" . $txt_abs . "\n";
$html .= "
";
return $html;
}
/*
wms_layer4html
Convert a Layer into an HTML WMS.
*/
function wms_layer4html( $layer ) {
$estilos = wms_estilos($layer);
if (count($estilos) > 0)
{
$ctxl = xpath_new_context($layer);
$xp_namel = xpath_eval($ctxl,"/Name");
if (wms_xpnode2content($xp_namel) == ""){$xp_namel = xpath_eval($ctxl,"/name");}
$txt_namel = wms_xpnode2content($xp_namel);
$html .= wms_layer3html($layer);
foreach ($estilos as $estilo)
{
$html .= wms_layer2html($estilo,"estilo",$txt_namel);
}
}
else
{
$html .= wms_layer2html($layer,"tema","");
}
return $html;
}
?>