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 )) { $curl = curl_init (); curl_setopt ( $curl, CURLOPT_URL, $wms_service_request ); curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $curl, CURLOPT_HEADER, 0 ); if (isset ( $i3geo_proxy_server ) && $i3geo_proxy_server != "") { curl_setopt ( $curl, CURLOPT_PROXY, $i3geo_proxy_server ); } $wms_capabilities = curl_exec ( $curl ); curl_close ( $curl ); if (! $wms_capabilities || $wms_capabilities == "") { return "erro"; } else { $fp = fopen ( $nome, 'w' ); fwrite ( $fp, $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, $i3geo_proxy_server; // para admin/cadastros/servicos/exec.php $_GET ["funcao"] = "lista"; $wms_service_request = gravaCacheWMS ( $servico ); // ------------------------------------------------------------- // Test that the capabilites file has successfully downloaded. // // $wms_service_request = "c://temp//teste.xml"; // error_reporting(0); if ($wms_service_request == "erro") { // Cannot download the capabilities file. $cp->set_data ( "Erro de acesso" ); return; } $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 [] = imprimeEstilos2 ($camada1, $titulocamada1, $suporta); //$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 [] = imprimeEstilos2 ($camada2, $titulocamada2, $suporta); //$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 [] = imprimeEstilos2 ($camada3, $titulocamada3, $suporta); //$retorna [] = " default " . $titulocamada3 . "
"; } } } if (count ( $layers2 ) == 1) { $retorna [] = "
"; } } } $retorna [] = "
"; $retorna [] = "
"; $retorna [] = "
"; $retorna [] = "
"; $retorna [] = "
"; //$retorna [] = "
Projeção:
"; //$retorna [] = "

Formatos imagem:

"; //$retorna [] = "

Formatos de informação:

"; //$retorna [] = "

Versão:

"; //$retorna [] = "

Suporta SLD:

"; return (implode ( $retorna )); } function listaLayersARCGISREST(){ global $servico, $i3geo_proxy_server; //echo $i3geo_proxy_server;exit; $curl = curl_init (); curl_setopt ( $curl, CURLOPT_URL, $servico."?f=json" ); curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $curl, CURLOPT_HEADER, 0 ); if (isset ( $i3geo_proxy_server ) && $i3geo_proxy_server != "") { curl_setopt ( $curl, CURLOPT_PROXY, $i3geo_proxy_server ); } $list = curl_exec ( $curl ); curl_close ( $curl ); return $list; } /* * 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, $i3geo_proxy_server; if (! isset ( $nomelayer )) { $nomelayer = "undefined"; } // para o caso do sistema de metadados estatisticos $wms_service_request = gravaCacheWMS ( $servico ); if ($tipo_ws != "WMSMETAESTAT" && $nivel < 2) { if ($wms_service_request == "erro") { $cp->set_data ( "Erro de acesso" ); return; } } $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 ) {
		$nomeestilo = $e ["nome"];
		$nomecamada = $e ["titulo"];
		$tituloestilo = $e ["titulo"];
		$onclick = "i3GEOF.conectarwms.seltema(\"estilo\",\"" . $tval . "\",\"\",\"" . $nomeestilo . "\",\"" . $tituloalternativo . " " . $nomecamada . " " . $tituloestilo . "\",\"" . $suporta . "\")";

		$retorna [] = <<


EOT;

		// $retorna[] = "