";} } // //pega os endereços para compor a url de chamada do gerador de web services //ogc.php // $protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']); $protocolo = $protocolo[0]; $protocolo1 = strtolower($protocolo) . '://'.$_SERVER['SERVER_NAME']; $protocolo = strtolower($protocolo) . '://'.$_SERVER['SERVER_NAME'] .":". $_SERVER['SERVER_PORT']; $urli3geo = str_replace("/ogc.php","",$protocolo.$_SERVER["PHP_SELF"]); // //imprime na tela a ajuda // if(isset($ajuda)) { ogc_imprimeAjuda(); exit; } // //imprime na tela a lista de temas disponíveis // if(isset($lista) && $lista == "temas") { include_once("classesphp/classe_menutemas.php"); ogc_imprimeListaDeTemas(); exit; } if(isset($lista) && $lista == "temaswfs"){ include_once(__DIR__."/classesphp/classe_menutemas.php"); ogc_imprimeListaDeTemasWfs(); exit; } // //cria o web service // include("classesphp/funcoes_gerais.php"); error_reporting(0); $versao = versao(); $versao = $versao["principal"]; $req = ms_newowsrequestobj(); $tipo = ""; $_GET = array_merge($_GET,$_POST); if(isset($_GET["sld"]) || isset($_GET["filter"])) {$cache = false;} if(!isset($_GET["srs"]) && !isset($_GET["SRS"])){ $_GET["srs"] = "EPSG:4326"; } foreach ($_GET as $k=>$v){ $req->setParameter(strtoupper($k), $v); if(strtolower($v) == "getcapabilities"){ $tipo = "metadados"; $cache = false; } if(strtolower($k) == "layers" && empty($_GET["tema"])) { $tema = $v; } if(strtolower($k) == "layer" && empty($_GET["tema"])) { $tema = $v; } } $req->setParameter("srsName",$req->getValueByName("SRS")); $listaepsg = $req->getValueByName("SRS")." EPSG:4618 EPSG:4291 EPSG:4326 EPSG:22521 EPSG:22522 EPSG:22523 EPSG:22524 EPSG:22525 EPSG:29101 EPSG:29119 EPSG:29120 EPSG:29121 EPSG:29122 EPSG:29177 EPSG:29178 EPSG:29179 EPSG:29180 EPSG:29181 EPSG:29182 EPSG:29183 EPSG:29184 EPSG:29185"; if(count($_GET) == 0){ $tipo="intervalo"; $req->setParameter("REQUEST", "getCapabilities"); $req->setParameter("SERVICE", "WMS"); $cache = false; } if(isset($tema) && $tipo != "metadados"){ $tipo = ""; } if(isset($version) && !isset($VERSION)){ $VERSION = $version; } if(!isset($VERSION)){ $req->setParameter("VeRsIoN","1.0.0"); } $oMap = ms_newMapobj($locaplic."/aplicmap/ogcwsv".$versao.".map"); // //altera os caminhos das imagens // if((isset($legenda)) && (strtolower($legenda) == "sim")) { $leg = $oMap->legend; $leg->set("status",MS_EMBED); $cache = false; } $proto = "http" . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "s" : "") . "://"; $server = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; $or = $proto.$server.$_SERVER['PHP_SELF']; if((isset($tema)) && ($tema != "") && ($tipo=="metadados")) {$or = $or."?tema=".$tema."&";} // //parametros no nível maior // $oMap->setmetadata("ows_onlineresource",$or); $oMap->setmetadata("wms_onlineresource",$or); $oMap->setmetadata("wms_title",$tituloInstituicao." - i3geo"); $oMap->setmetadata("wfs_title",$tituloInstituicao." - i3geo"); $oMap->setmetadata("wms_attribution_logourl_format","image/png"); $oMap->setmetadata("wms_attribution_logourl_height","56"); $oMap->setmetadata("wms_attribution_logourl_width","85"); $oMap->setmetadata("wms_attribution_logourl_href",$proto.$server.dirname($_SERVER['PHP_SELF'])."/imagens/i3geo.png"); $oMap->setmetadata("wms_attribution_onlineresource",$proto.$server.dirname($_SERVER['PHP_SELF'])); $oMap->setmetadata("wms_attribution_title",$tituloInstituicao); $oMap->setmetadata("ows_enable_request","*"); $e = $oMap->extent; $extensaoMap = ($e->minx)." ".($e->miny)." ".($e->maxx)." ".($e->maxy); if (!isset($intervalo)) {$intervalo = "0,5000";} else {$tipo = "intervalo";} if(!isset($tema)){ if(!isset($intervalo)) {$intervalo = "0,5000";} $tipo = "intervalo"; } if ($tipo == "" || $tipo == "metadados") { $tema = explode(" ",$tema); //para o caso do tema ser um arquivo mapfile existente em uma pasta qualquer //$temai3geo = true indica que o layer será buscado na pasta i3geo/temas $temai3geo = true; if(file_exists($_GET["tema"])){ $nmap = ms_newMapobj($_GET["tema"]); $temai3geo = false; $nmap->setmetadata("ows_enable_request","*"); } foreach ($tema as $tx) { $extensao = ".map"; if(file_exists($locaplic."/temas/".$tx.".php") && $temai3geo == true){ $extensao = ".php"; } if($extensao == ".map"){ if($temai3geo == true){ $nmap = ms_newMapobj($locaplic."/temas/".$tx.".map"); $nmap->setmetadata("ows_enable_request","*"); } if($temai3geo == false || empty($layers)) {$ts = $nmap->getalllayernames();} else{ $ts = explode(",",str_replace(" ",",",$layers)); } foreach ($ts as $t) { $l = $nmap->getlayerbyname($t); //necessário pq o mapfile pode ter todos os layers como default if($temai3geo == false) {$l->set("status",MS_OFF);} if($cache == true && strtolower($l->getmetadata('cache')) == 'sim' && $tipo == '' && count($tema) == 1){ carregaCacheImagem($_GET['BBOX'],$tx,$_GET['WIDTH'],$_GET['HEIGHT'],$cachedir); } $l->setmetadata("ows_title",pegaNome($l)); $l->setmetadata("ows_srs",$listaepsg); //essa linha é necessária pq as vezes no mapfile não tem nenhum layer com o nome igual ao nome do mapfile if(count($ts)==1) {$l->set("name",$tx);} $l->setmetadata("gml_include_items","all"); $l->set("dump",MS_TRUE); $l->setmetadata("WMS_INCLUDE_ITEMS","all"); $l->setmetadata("WFS_INCLUDE_ITEMS","all"); if(file_exists($locaplic."/temas/miniaturas/".$t.".map.mini.png")) { $mini = $proto.$server.dirname($_SERVER['PHP_SELF'])."/temas/miniaturas/".$t.".map.mini.png"; $l->setmetadata("wms_attribution_logourl_format","image/png"); $l->setmetadata("wms_attribution_logourl_height","50"); $l->setmetadata("wms_attribution_logourl_width","50"); $l->setmetadata("wms_attribution_logourl_href",$mini); } if($l->type == MS_LAYER_RASTER && $l->numclasses > 0) { $c = $l->getclass(0); if($c->name == "") {$c->name = " ";} } //inclui extensao geografica $extensao = $l->getmetadata("EXTENSAO"); if($extensao == "") {$extensao = $extensaoMap;} $l->setmetadata("wms_extent",$extensao); if (!empty($postgis_mapa)) { if ($l->connectiontype == MS_POSTGIS) { $lcon = $l->connection; if (($lcon == " ") || ($lcon == "") || (in_array($lcon,array_keys($postgis_mapa)))) { // //o metadata CONEXAOORIGINAL guarda o valor original para posterior substituição // if(($lcon == " ") || ($lcon == "")) { $l->set("connection",$postgis_mapa); $l->setmetadata("CONEXAOORIGINAL",$lcon); } else { $l->set("connection",$postgis_mapa[$lcon]); $l->setmetadata("CONEXAOORIGINAL",$lcon); } } } } autoClasses($l,$oMap); $permite = $l->getmetadata("permiteogc"); if($permite != "nao") ms_newLayerObj($oMap, $l); } } else{ include_once($locaplic."/temas/".$tx.".php"); eval($tx."(\$oMap);"); } } } else { $conta = 0; $int = explode(",",$intervalo); $codigosTema = array(); if(empty($perfil)){$perfil = "";} include("classesphp/classe_menutemas.php"); $m = new Menutemas("",$perfil,$locaplic,$urli3geo); $menus = $m->pegaListaDeMenus(); foreach ($menus as $menu) { $grupos = $m->pegaListaDeGrupos($menu["idmenu"],$listasistemas="nao",$listasgrupos="sim"); foreach($grupos as $grupo) { if(strtolower($grupo["ogc"]) == "sim") { foreach($grupo["subgrupos"] as $sgrupo) { if(strtolower($sgrupo["ogc"]) == "sim") { $temas = $m->pegaListaDeTemas($grupo["id_n1"],$sgrupo["id_n2"],$menu["idmenu"]); foreach($temas as $tema) { if(strtolower($tema["ogc"]) == "sim") { $codigosTema[] = array("tema"=>$tema["tid"],"fonte"=>$tema["link"]); } } } } } } } //echo "
";
	//var_dump($codigosTema);
	//exit;
	foreach($codigosTema as $c)
	{
		$codigoTema = $c["tema"];
		if(file_exists($locaplic."/temas/".$codigoTema.".map"))
		{
			if (@ms_newMapobj($locaplic."/temas/".$codigoTema.".map"))
			{
				$nmap = ms_newMapobj($locaplic."/temas/".$codigoTema.".map");
				$nmap->setmetadata("ows_enable_request","*");
				$ts = $nmap->getalllayernames();
				if (count($ts) == 1)
				{ 
					foreach ($ts as $t)
					{
						if ($oMap->getlayerbyname($t) == "")
						{
							$conta++;
							if (($conta >= $int[0]) && ($conta <= $int[1]))
							{
								$l = $nmap->getlayerbyname($t);
								$extensao = $l->getmetadata("EXTENSAO");
								if($extensao == "")
								{$extensao = $extensaoMap;}
								$l->setmetadata("wms_extent",$extensao);

								$l->setmetadata("ows_title",pegaNome($l));
								$l->setmetadata("ows_srs",$listaepsg);
								$l->set("status",MS_OFF);
								$l->setmetadata("gml_include_items","all");
								$l->set("dump",MS_TRUE);
								$l->setmetadata("WMS_INCLUDE_ITEMS","all");
								$l->setmetadata("WFS_INCLUDE_ITEMS","all");
								
								$l->setmetadata("ows_metadataurl_href",$c["fonte"]);
								$l->setmetadata("ows_metadataurl_type","TC211");
								$l->setmetadata("ows_metadataurl_format","text/html");
								if(file_exists($locaplic."/temas/miniaturas/".$t.".map.mini.png"))
								{
									$mini = $proto.$server.dirname($_SERVER['PHP_SELF'])."/temas/miniaturas/".$t.".map.mini.png";
									$l->setmetadata("wms_attribution_logourl_format","image/png");
									$l->setmetadata("wms_attribution_logourl_height","50");
									$l->setmetadata("wms_attribution_logourl_width","50");
									$l->setmetadata("wms_attribution_logourl_href",$mini);
								}								
								ms_newLayerObj($oMap, $l);
							}
						}
					}
				}
			}
		}
	}
}
if($cache == true){
	
}
ms_ioinstallstdouttobuffer();
$oMap->owsdispatch($req);
$contenttype = ms_iostripstdoutbuffercontenttype();
if(strtolower($request) == "getcapabilities")
{header('Content-Disposition: attachment; filename=getcapabilities.xml"');}
//header("Content-type: application/xml");
header("Content-type: $contenttype");

$buffer = ms_iogetStdoutBufferBytes();
ms_ioresethandlers();
//
//funções
//
function ogc_pegaListaDeMenus()
{
	global $perfil,$locaplic,$urli3geo;
	if(!isset($perfil)){$perfil = "";}
	$m = new Menutemas("",$perfil,$locsistemas,$locaplic,"",$urli3geo);
	foreach($m->pegaListaDeMenus() as $menu)
	{$menus[] = $urli3geo."/admin/xmlmenutemas.php?id_menu=".$menu["idmenu"];}
	return $menus;
}
function ogc_imprimeAjuda()
{
	echo "
Construtor de web services do I3Geo.

"; echo "Esse utilitário usa os arquivos mapfiles existentes em
"; echo "i3geo/temas para gerar web services no padrão OGC.
"; echo "Para escolher um tema, utilize:
"; echo "ogc.php?lista=temas - para listar os temas disponíveis
"; echo "Para usar esse web service, além dos parâmetros normais, vc deverá incluir o parâmetro &tema=,
"; echo "ou seja,http://[host]/i3geo/ogc.php?tema=[código do tema]
"; echo "no lugar do código pode ser especificado também um arquivo mapfile qualquer. Nesse caso, deve ser digitado o caminho completo no servidor

"; echo "Utilize o sistema de administração do i3Geo para configurar quais os temas da pasta i3geo/temas podem ser utilizados."; echo "Utilize o parametro &intervalo=0,20 para definir o número de temas desejado na função getcapabilities."; } function ogc_imprimeListaDeTemasWfs(){ global $urli3geo,$perfil,$locaplic; $m = new Menutemas("",$perfil,$locaplic,$urli3geo); $menus = $m->pegaListaDeMenus(); echo 'WFS '; echo "Lista de temas por grupos e subgrupos e endereços de acesso aos dados por meio de Web Services WFS (os códigos dos temas estão em vermelho)

"; $imprimir = ""; foreach ($menus as $menu){ $grupos = $m->pegaListaDeGrupos($menu["idmenu"],$listasistemas="nao",$listasgrupos="sim"); foreach($grupos as $grupo){ if(strtolower($grupo["ogc"]) == "sim"){ $imprimegrupo = "".$grupo["nome"].""; foreach($grupo["subgrupos"] as $sgrupo){ if(strtolower($sgrupo["ogc"]) == "sim"){ $imprimesubgrupo = $sgrupo["nome"]; $temas = $m->pegaListaDeTemas($grupo["id_n1"],$sgrupo["id_n2"],$menu["idmenu"]); foreach($temas as $tema){ if(strtolower($tema["ogc"]) == "sim" && strtolower($tema["down"]) !== "nao"){ $imprimir .= $imprimegrupo."->".$imprimesubgrupo."
"; $imprimir .= "      "; $imprimir .= "".$tema["tid"].""; $imprimir .= " - ".$tema["nome"]." "; $imprimir .= " Getcapabilities"; $imprimir .= " Getfeature "; if($tema["link"] != " ") $imprimir .= "  fonte"; $imprimir .= "
"; } } } } } } } echo $imprimir.""; } function ogc_imprimeListaDeTemas() { global $urli3geo,$perfil,$locaplic; $m = new Menutemas("",$perfil,$locaplic,$urli3geo); $menus = $m->pegaListaDeMenus(); echo 'WMS '; echo "Lista de temas por grupos e subgrupos e endereços de acesso aos dados por meio de Web Services WMS (os códigos dos temas estão em vermelho)

"; $imprimir = ""; foreach ($menus as $menu) { $grupos = $m->pegaListaDeGrupos($menu["idmenu"],$listasistemas="nao",$listasgrupos="sim"); foreach($grupos as $grupo) { if(strtolower($grupo["ogc"]) == "sim") { $imprimegrupo = "".$grupo["nome"].""; foreach($grupo["subgrupos"] as $sgrupo) { if(strtolower($sgrupo["ogc"]) == "sim") { $imprimesubgrupo = $sgrupo["nome"]; $temas = $m->pegaListaDeTemas($grupo["id_n1"],$sgrupo["id_n2"],$menu["idmenu"]); foreach($temas as $tema) { if(strtolower($tema["ogc"]) == "sim") { $imprimir .= $imprimegrupo."->".$imprimesubgrupo."
"; $imprimir .= "      "; $imprimir .= "".$tema["tid"].""; $imprimir .= " - ".$tema["nome"]." "; $imprimir .= " Getcapabilities"; $imprimir .= " GetMap "; if($tema["link"] != " ") $imprimir .= "  fonte"; $imprimir .= "
"; } } } } } } } echo $imprimir.""; } function carregaCacheImagem($bbox,$layer,$w,$h,$cachedir=""){ global $dir_tmp; $nome = $w.$h.$bbox.".png"; if($cachedir == "") {$nome = $dir_tmp."/cache/".$layer."/".$nome;} else {$nome = $cachedir."/".$layer."/".$nome;} if(file_exists($nome)) { ob_start(); // assuming you have image data in $imagedata $img = file_get_contents($nome); $length = strlen($img); $ft = filemtime($nome); if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && (strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]) == $ft)) { // Client's cache IS current, so we just respond '304 Not Modified'. header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ft).' GMT', true, 304); } else { // Image not cached or cache outdated, we respond '200 OK' and output the image. header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ft).' GMT', true, 200); } header('Accept-Ranges: bytes'); header('Content-Length: '.$length); header('Content-Type: image/png'); print($img); ob_end_flush(); exit; } /* if(file_exists($nome)) { if (!function_exists('imagepng')) { $s = PHP_SHLIB_SUFFIX; @dl( 'php_gd2.'.$s ); if (!function_exists('imagepng')) @dl( 'php_gd.'.$s ); } @$img = imagecreatefrompng($nome); if(!$img) { $img = imagecreatetruecolor($w, $h); imagealphablending($img, false); imagesavealpha($img, true); $bgc = imagecolorallocatealpha($img, 255, 255, 255,127); $tc = imagecolorallocate($img, 255, 0, 0); imagefilledrectangle($img, 0, 0, $w, $h, $bgc); imagestring($img, 3, 5, 5, 'Erro ao ler ' . $nome, $tc); } else { imagealphablending($img, false); imagesavealpha($img, true); } ob_clean(); error_reporting(0); echo header("Content-type: image/png \n\n"); imagepng($img); imagedestroy($img); exit; } */ } ?>