From ef39184d1376bdd5dc72e39ef9c8ca33061c17ad Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Thu, 21 May 2015 18:43:28 +0000 Subject: [PATCH] --- classesphp/classe_mapa.php | 35 ++++++++++++++++++++++++++++------- classesphp/funcoes_gerais.php | 6 ++++-- classesphp/mapa_googlemaps.php | 3 ++- classesphp/mapa_openlayers.php | 8 +++++--- ferramentas/parametrossql/ogc.php | 9 ++++++--- ferramentas/salvamapa/geraminiatura.php | 5 +++-- mashups/openlayers.php | 4 ++-- ogc.php | 680 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 8 files changed, 420 insertions(+), 330 deletions(-) diff --git a/classesphp/classe_mapa.php b/classesphp/classe_mapa.php index 68b3135..a416dc2 100644 --- a/classesphp/classe_mapa.php +++ b/classesphp/classe_mapa.php @@ -270,7 +270,8 @@ class Mapa "colunaidunico", "cortepixels", "plugini3geo", - "link_tema" + "link_tema", + "ferramentas" ); foreach ($this->layers as $oLayer){ $sel = "nao"; @@ -430,6 +431,19 @@ class Mapa if($link_tema == "" && $oLayer->getmetadata("link_tema") != ""){ $link_tema = $oLayer->getmetadata("link_tema"); } + //TODO colocar aqui os parametros da linha do tempo??? + // + //parametros para ferramentas especiaifcas + // + $ferramentas = array(); + //mapa 3d + if($oLayer->getmetadata("tme") != ""){ + $f = $oLayer->getmetadata("tme"); + if (!mb_detect_encoding($f,"UTF-8",true)){ + $f = mb_convert_encoding($f,"UTF-8","ISO-8859-1"); + } + $ferramentas["tme"] = json_decode($f); + } //formatacao antiga, antes da versao 6.0 /* $temas[] = array( @@ -516,7 +530,8 @@ class Mapa $oLayer->getmetadata("COLUNAIDUNICO"), $cortepixels, $plugini3geo, - $link_tema + $link_tema, + $ferramentas ); } } @@ -1091,7 +1106,7 @@ class Mapa //tem erro na versão 6 do Mapserver. Já abri um ticket no trac da OSGEO $nlayer = criaLayer($this->mapa,MS_LAYER_LINE,MS_DEFAULT,"Grade de coordenadas","SIM"); ms_newgridobj($nlayer); - + $nlayer->grid->set("labelformat", "DDMMSS"); $nlayer->grid->set("maxinterval", $intervalo); $classe = $nlayer->getclass(0); @@ -1117,7 +1132,7 @@ class Mapa else{ $label = $classe->label; } - + $label->set("size",$tamanhotexto); $label->set("type",MS_BITMAP); if ($fonte != "bitmap") { @@ -1305,7 +1320,7 @@ class Mapa $nNome = str_replace(".map","",basename($nomemap)); $nlayer->setmetadata("arquivotemaoriginal",$nNome); $nlayer->setmetadata("nomeoriginal",$nlayer->name); - + $nlayer->set("name",$nomeunico[$n]); //altera o nome do grupo se existir if ($nlayer->group != " " && $nlayer->group != "" ){ @@ -1351,8 +1366,14 @@ class Mapa for ($i = $numlayers-1;$i > 0;$i--){ $layerAbaixo = $this->mapa->getlayer($i); $tipo = $layerAbaixo->type; - if($tipo == 2 && ($layerAbaixo->getclass(0)->getstyle(0)->color->red == -1) && ($l->getclass(0)->getstyle(0)->color->red != -1)) { - $tipo = 0;//vai subir + if($layerAbaixo->numclasses > 0 && $l->numclasses > 0){ + $c = $layerAbaixo->getclass(0); + $c1 = $l->getclass(0); + if($c->numstyles > 0 && $c1->numstyles > 0){ + if($tipo == 2 && ($c->getstyle(0)->color->red == -1) && ($c1->getstyle(0)->color->red != -1)) { + $tipo = 0;//vai subir + } + } } if (($tipo != 2) && ($tipo != 3)){ $nummove++; diff --git a/classesphp/funcoes_gerais.php b/classesphp/funcoes_gerais.php index b748380..a370018 100644 --- a/classesphp/funcoes_gerais.php +++ b/classesphp/funcoes_gerais.php @@ -443,7 +443,8 @@ Envia para o navegador uma imagem. Utilizado na tag IMG em arquivos HTML function echoimg($arquivo,$tipo){ echo header("Content-type: image/png \n\n"); header('Content-Length: '.filesize($arquivo)); - fpassthru(fopen($arquivo, 'rb')); + //fpassthru(fopen($arquivo, 'rb')); + readfile($arquivo); exit; } /* @@ -2201,6 +2202,7 @@ function getRGBpallete($rule, $value){ $b=$rule["b0"] + round(($rule["b1"]-$rule["b0"])*$escala, 0); return array($r,$g,$b); } +//TODO verificar ao fechar versao /* Function: removeAcentos @@ -2216,7 +2218,7 @@ Retorno: */ function removeAcentos($var) { - $a = array('�', 'Á', 'Â', 'Ã', '�', '�', '�', 'Ç', '�', 'É', 'Ê', '�', '�', 'Í', '�', '�', '�', '�', '�', '�', 'Ô', 'Õ', '�', '�', '�', 'Ú', '�', '�', '�', '�', '�', 'á', 'â', 'ã', '�', '�', '�', 'ç', '�', 'é', 'ê', '�', '�', 'í', '�', '�', '�', '�', '�', 'ô', 'õ', '�', '�', '�', 'ú', '�', '�', '�', '�', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', '�', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', '?', '?', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', '?', '?', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', '?', 'O', 'o', 'O', 'o', 'O', 'o', '�', '�', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', '�', '�', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', '�', 'Z', 'z', 'Z', 'z', '�', '�', '?', '�', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', '?', '?', '?', '?', '?', '?'); + $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'Ð', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', '?', '?', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', '?', '?', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', '?', 'O', 'o', 'O', 'o', 'O', 'o', 'Œ', 'œ', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'Š', 'š', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Ÿ', 'Z', 'z', 'Z', 'z', 'Ž', 'ž', '?', 'ƒ', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', '?', '?', '?', '?', '?', '?'); $b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o'); return str_replace($a, $b, $var); } diff --git a/classesphp/mapa_googlemaps.php b/classesphp/mapa_googlemaps.php index 48b69fe..a9f9378 100644 --- a/classesphp/mapa_googlemaps.php +++ b/classesphp/mapa_googlemaps.php @@ -511,7 +511,8 @@ function carregaCacheImagem(){ header('Content-Type: image/png'); header('Cache-Control: public, max-age=22222222'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+48*60*60) . ' GMT'); - fpassthru(fopen($nome, 'rb')); + //fpassthru(fopen($nome, 'rb')); + readfile($nome); } else{ header('Cache-Control: public, max-age=22222222'); diff --git a/classesphp/mapa_openlayers.php b/classesphp/mapa_openlayers.php index 9c937a1..913e8e2 100644 --- a/classesphp/mapa_openlayers.php +++ b/classesphp/mapa_openlayers.php @@ -92,7 +92,7 @@ if(isset($_GET["X"])){ $z = intval((0.703125 / $res) / 4) + 1; $x = floor((($box[0] + 180) / 360) * pow(2, $z)); $y = floor((1 - log(tan(deg2rad($box[3])) + 1 / cos(deg2rad($box[3]))) / pi()) /2 * pow(2, $z)); - + $_GET["WIDTH"] = 256; $_GET["HEIGHT"] = 256; $_GET["tms"] = "/".$_GET["layer"]."/".$z."/".$x."/".$y.".png"; @@ -413,7 +413,8 @@ else{ //header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT'); header('Cache-Control: public, max-age=22222222'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+48*60*60) . ' GMT'); - fpassthru(fopen($nomer, 'rb')); + //fpassthru(fopen($nomer, 'rb')); + readfile($nomer); } } else{ @@ -501,7 +502,8 @@ function carregaCacheImagem($cachedir,$map,$tms,$i3georendermode=0){ header('Cache-Control: public, max-age=22222222'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+48*60*60) . ' GMT'); //header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200); - fpassthru(fopen($nome, 'rb')); + //fpassthru(fopen($nome, 'rb')); + readfile($nome); } else{ header('Cache-Control: public, max-age=22222222'); diff --git a/ferramentas/parametrossql/ogc.php b/ferramentas/parametrossql/ogc.php index 0ab1f04..6216abc 100644 --- a/ferramentas/parametrossql/ogc.php +++ b/ferramentas/parametrossql/ogc.php @@ -459,7 +459,8 @@ function renderNocacheTms(){ header('Cache-Control: max-age=3600, must-revalidate'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nomer)).' GMT', true, 200); - fpassthru(fopen($nomer, 'rb')); + //fpassthru(fopen($nomer, 'rb')); + readfile($nomer); } if($i3georendermode == 2){ ob_clean(); @@ -488,7 +489,8 @@ function carregaCacheImagem($cachedir,$map,$tms, $plugin, $tema){ header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200); $etag = md5_file($nome); header('Etag: '.$etag); - fpassthru(fopen($nome, 'rb')); + //fpassthru(fopen($nome, 'rb')); + readfile($nome); exit; } } @@ -527,7 +529,8 @@ function salvaCacheImagem($cachedir,$map,$tms, $plugin, $tema){ header('Cache-Control: max-age=3600, must-revalidate'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200); - fpassthru(fopen($nome, 'rb')); + //fpassthru(fopen($nome, 'rb')); + readfile($nome); exit; } diff --git a/ferramentas/salvamapa/geraminiatura.php b/ferramentas/salvamapa/geraminiatura.php index f3fcb29..29895de 100644 --- a/ferramentas/salvamapa/geraminiatura.php +++ b/ferramentas/salvamapa/geraminiatura.php @@ -2,7 +2,7 @@ /* * Gera uma miniatura de um mapfile salvo no banco de dados * Verifica se a imagem existe, caso contrario cria uma no diretorio temporario - * + * * @param restauramapa - id do mapa a ser restaurado * @param w * @param h @@ -47,5 +47,6 @@ header('Content-Length: '.filesize($nomeImagem)); header('Content-Type: image/png'); header('Cache-Control: public, max-age=22222222'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+48*60*60) . ' GMT'); -fpassthru(fopen($nomeImagem, 'rb')); +//fpassthru(fopen($nomeImagem, 'rb')); +readfile($nomeImagem); ?> \ No newline at end of file diff --git a/mashups/openlayers.php b/mashups/openlayers.php index adbe566..0cdd36a 100644 --- a/mashups/openlayers.php +++ b/mashups/openlayers.php @@ -277,7 +277,7 @@ if($temas != ""){ if(in_array($tema,$visiveis)){ $visivel = "true"; } - if($nlayers == 1 && strtoupper($layern->getmetadata("cache")) == "SIM" && $layern->getmetadata("PLUGINI3GEO") == ""){ + if(strtolower($DESLIGACACHE) != "sim" && $nlayers == 1 && strtoupper($layern->getmetadata("cache")) == "SIM" && $layern->getmetadata("PLUGINI3GEO") == ""){ if($layern->type != 2 && $layern->type != 3){ $opacidade = 1; } @@ -646,7 +646,7 @@ if(!i3GEO.configura){ } ?> i3GEO.editorOL.inicia(); - + function adicionaPluginI3geo(camada,visivel){ if(!camada.cache){ camada["cache"] = "NAO"; diff --git a/ogc.php b/ogc.php index dc5df36..68b0db0 100644 --- a/ogc.php +++ b/ogc.php @@ -77,9 +77,16 @@ ogc.php?tema=/var/www/i3geo/aplicmap/geral1debianv6.map&layers=mundo ogc.php?intervalo=0,50 */ +$_GET = array_merge($_GET,$_POST); // -//validações e includes -// +//caso nenhum parametros tenha sido enviado +// +if(count($_GET) == 0){ + $tipo="metadados"; + $_GET["REQUEST"] = "getCapabilities"; + $_GET["request"] = "getCapabilities"; + $_GET["SERVICE"] = "WMS"; +} // //compatibiliza chamadas fora do padrao // @@ -89,175 +96,158 @@ if(isset($_GET["outputFormat"]) && $_GET["outputFormat"] != ""){ if(isset($_GET["outputformat"]) && $_GET["outputformat"] != ""){ $_GET["OUTPUTFORMAT"] = $_GET["outputformat"]; } -if(strtolower($OUTPUTFORMAT) == "geojson"){ - $OUTPUTFORMAT = "json"; -} $cache = true; -require_once(dirname(__FILE__)."/classesphp/carrega_ext.php"); +//require_once(dirname(__FILE__)."/classesphp/carrega_ext.php"); include(dirname(__FILE__)."/ms_configura.php"); include(dirname(__FILE__)."/classesphp/pega_variaveis.php"); include(dirname(__FILE__)."/classesphp/funcoes_gerais.php"); -//para o caso da requisicao kml -if(strtolower($OUTPUTFORMAT) == "kml" || strtolower($OUTPUTFORMAT) == "kmz"){ - //http://localhost/i3geo/pacotes/kmlmapserver/kmlservice.php?request=kmz&map=_lbiomashp&typename=_lbiomashp - if(!isset($tema) && isset($layers)){ - $tema = $layers; +// +//imprime na tela a ajuda +// +if(isset($ajuda)){ + ogc_imprimeAjuda(); + exit; +} +// +//pega os enderecos para compor a url de chamada do gerador de web services +// +$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 lista de temas disponiveis +// +if(isset($lista) && $lista != ""){ + include_once(dirname(__FILE__)."/classesphp/classe_menutemas.php"); + if($lista == "temas"){ + ogc_imprimeListaDeTemas(); } - $urln = "pacotes/kmlmapserver/kmlservice.php?request=kmz&map=".$tema."&typename=".$tema; - header("Location:".$urln); + if($lista == "temaswfs"){ + ogc_imprimeListaDeTemasWfs(); + } exit; } - +// //define um nome para o mapfile caso a origem seja o sistema de metadados estatisticos -if(isset($id_medida_variavel)){ - $tema = "ogcmetaestat".$id_medida_variavel; - $_GET["layers"] = $tema; - $_GET["LAYERS"] = $tema; -} -if(!isset($temas) && isset($tema)){ - $temas = $tema; +// +if(isset($id_medida_variavel) && $id_medida_variavel != ""){ + $tema = "ogcmetaestat".$id_medida_variavel; } -if(isset($typeName)){ - $typename = $typeName; +// +//compatibiliza variaveis +// +if(!isset($tema) && isset($layers)){ + $tema = $layers; } -if(!isset($temas) && isset($typename)){ - $temas = $typename; +if(!isset($tema) && isset($LAYERS)){ + $tema = $LAYERS; +} +if(!isset($tema) && isset($temas)){ + $tema = $temas; +} +if(isset($typeName)){ + $typename = $typeName; +} +if(!isset($tema) && isset($typename)){ $tema = $typename; } +// +//garante que layers possam ser especificados de diferentes maneiras +// +$_GET["layers"] = $tema; +$_GET["LAYERS"] = $tema; +$layers = $tema; +// +//verifica o OUTPUTFORMAT e o cache de arquivo +// +if(!empty($OUTPUTFORMAT)){ + carregaCacheArquivo(); +} +// +//para o caso da requisicao kml +// +if(strtolower($OUTPUTFORMAT) == "kml" || strtolower($OUTPUTFORMAT) == "kmz"){ + $urln = "pacotes/kmlmapserver/kmlservice.php?request=kmz&map=".$tema."&typename=".$tema; + header("Location:".$urln); + exit; +} +// +//usa o epsg correto ao inves do apelido inventado pelo Google +// +if($_GET["SRS"] == "EPSG:900913" || $_GET["srs"] == "EPSG:900913"){ + $_GET["SRS"] = "EPSG:3857"; + $_GET["srs"] = "EPSG:3857"; +} +if(!isset($_GET["srs"]) && !isset($_GET["SRS"])){ + $_GET["srs"] = "EPSG:4326"; + $_GET["SRS"] = "EPSG:4326"; +} +// +//trata geojson da mesma forma que json +// +if(strtolower($OUTPUTFORMAT) == "geojson"){ + $OUTPUTFORMAT = "json"; +} // //recupera um mapa salvo no banco de administracao // if(!empty($restauramapa)){ - $xbase = restauraMapaAdmin($restauramapa,$dir_tmp); - $m = ms_newMapObj($xbase); - $w = $m->web; - $w->set("imagepath",dirname($w->imagepath)."/"); - $w->set("imageurl",dirname($w->imageurl)."/"); - //apaga algumas camadas - $l = $m->getlayerbyname("rosadosventos"); - if($l != ""){ - $l->set("status",MS_DELETE); - } - $l = $m->getlayerbyname("copyright"); - if($l != ""){ - $l->set("status",MS_DELETE); - } - $m->save($xbase); - //$fundo = $xbase; - $temas = $xbase; - $_GET["tema"] = $temas; - $_GET["layers"] = ""; - $l = $m->getlayer(0); - $_GET["LAYERS"] = $l->name; + restauraMapaSalvo(); } // -//para operar como o Geoserver +//para operar como o Geoserver, abre o openlayers // if(isset($format) && strtolower($format) == "application/openlayers"){ - //var_dump($_SERVER);exit; - if(!isset($layers)){ - $layers = $temas; - } - $urln = dirname($_SERVER["PHP_SELF"])."/mashups/openlayers.php?temas=".$layers."&layers=".$layers."&mapext=".$bbox."&botoes=pan,zoombox,zoomtot,identifica"; + $urln = dirname($_SERVER["PHP_SELF"])."/mashups/openlayers.php?layers=".$layers."&mapext=".$bbox."&botoes=pan,zoombox,zoomtot,identifica"; //echo $urln;exit; if(!headers_sent()){ header("Location:".$urln); } else{ echo ""; - } -} -// -//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(dirname(__FILE__)."/classesphp/classe_menutemas.php"); - ogc_imprimeListaDeTemas(); - exit; -} -if(isset($lista) && $lista == "temaswfs"){ - include_once(dirname(__FILE__)."/classesphp/classe_menutemas.php"); - ogc_imprimeListaDeTemasWfs(); - exit; + } + //exit.... } // -//cria o web service +//pega a versao do Mapserver // error_reporting(0); $versao = versao(); $versao = $versao["principal"]; -if($_GET["SRS"] == "EPSG:900913"){ - $_GET["SRS"] = "EPSG:3857"; -} + $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"; -} +// +//inclui todos os parametros na requisicao e aproveita para verificar getcapabilities +// 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; - } } +// +//cria uma lista de epsgs para o getcapabilities +// $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"; -//echo $listaepsg;exit; -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.1.1"); } -if (!isset($intervalo)){ - $intervalo = "0,5000"; -} -else{ - $tipo = "intervalo"; -} -if(!isset($tema)){ - if(!isset($intervalo)){ - $intervalo = "0,5000"; - } - $tipo = "intervalo"; -} +// //nome do mapfile que ficara em cache +// $agora = intval(time() / 1000); //acrescenta ao nome a indicacao do tipo de TMS if(isset($_GET["tms"])){ @@ -266,7 +256,6 @@ if(isset($_GET["tms"])){ if(isset($_GET["Z"]) && isset($_GET["X"])){ $agora .= "google"; } - // //se o outputformat for definido, evita o cahce de arquivo //o mesmo se existir filtro para o layer @@ -278,9 +267,7 @@ if(isset($_GET["DESLIGACACHE"]) && $_GET["DESLIGACACHE"] == "sim"){ $agora = time(); $cache = false; } -$nomeMapfileTmp = $dir_tmp."/ogc_".md5($tema.($req->getValueByName("SRS")))."_".$agora.".map"; -$nomeMapfileTmp = str_replace(",","",$nomeMapfileTmp); -$nomeMapfileTmp = str_replace(" ","",$nomeMapfileTmp); +$nomeMapfileTmp = $dir_tmp."/ogc_".md5(implode("",$_GET))."_".$agora.".map"; //essa variavel e usada para definir se a imagem final gerada devera ser cortada ou nao $cortePixels = 0; if(file_exists($nomeMapfileTmp) && $tipo == ""){ @@ -295,7 +282,7 @@ else{ } $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']; + $or = $urli3geo."/ogc.php"; if((isset($tema)) && ($tema != "") && ($tipo=="metadados")){ $or = $or."?tema=".$tema."&"; } @@ -309,8 +296,8 @@ else{ $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_logourl_href",$urli3geo."/imagens/i3geo.png"); + $oMap->setmetadata("wms_attribution_onlineresource",$urli3geo); $oMap->setmetadata("wms_attribution_title",$tituloInstituicao); $oMap->setmetadata("ows_enable_request","*"); //parametro mandatario @@ -320,8 +307,8 @@ else{ $e = $oMap->extent; $extensaoMap = ($e->minx)." ".($e->miny)." ".($e->maxx)." ".($e->maxy); //gera o mapa - if ($tipo == "" || $tipo == "metadados"){ - $tema = explode(" ",$tema); + if ($tema != ""){ + $listatema = 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; @@ -331,7 +318,7 @@ else{ $temai3geo = false; $nmap->setmetadata("ows_enable_request","*"); } - foreach ($tema as $tx){ + foreach ($listatema as $tx){ $extensao = ".map"; if($temai3geo == true && file_exists($locaplic."/temas/".$tx.".php")){ $extensao = ".php"; @@ -364,8 +351,7 @@ else{ $nmap = ms_newMapobj($locaplic."/temas/".$tx.".map"); $nmap->setmetadata("ows_enable_request","*"); } - if($temai3geo == false || empty($layers)) - { + if($temai3geo == false || empty($layers)){ $ts = $nmap->getalllayernames(); $nmap->setmetadata("ows_enable_request","*"); } @@ -473,7 +459,7 @@ else{ $oMap = $gm->addLayers($oMap,$gv,$dataView["layerNames"]); } $numlayers = $oMap->numlayers; - $layers = array(); + $lys = array(); //$layers[] = "default"; for ($i=0;$i < $numlayers;$i++){ $l = $oMap->getlayer($i); @@ -484,7 +470,7 @@ else{ $l->setmetadata("ows_srs",$listaepsg); $l->setmetadata("ows_title",$l->getmetadata("TEMA")); $l->set("status",MS_OFF); - $layers[] = $l->name; + $lys[] = $l->name; if(file_exists($locaplic."/temas/miniaturas/".$tx.".map.mini.png")){ $mini = $proto.$server.dirname($_SERVER['PHP_SELF'])."/temas/miniaturas/".$tx.".map.mini.png"; $l->setmetadata("wms_attribution_logourl_format","image/png"); @@ -511,13 +497,13 @@ else{ $cortePixels = $l->getmetadata("cortepixels"); } } - $req->setParameter("LAYERS", implode(",",$layers)); + $req->setParameter("LAYERS", implode(",",$lys)); $req->setParameter("STYLES", ""); - //r_dump($req);exit; } } } - else{ + else{ + $intervalo = "0,5000"; $conta = 0; $int = explode(",",$intervalo); $codigosTema = array(); @@ -533,10 +519,10 @@ else{ 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"]); + $lts = $m->pegaListaDeTemas($grupo["id_n1"],$sgrupo["id_n2"],$menu["idmenu"]); + foreach($lts as $t){ + if(strtolower($t["ogc"]) == "sim"){ + $codigosTema[] = array("tema"=>$t["tid"],"fonte"=>$t["link"]); } } } @@ -544,10 +530,6 @@ else{ } } } - //echo "
";
-		//var_dump($codigosTema);
-		//exit;
-
 		foreach($codigosTema as $c){
 			$codigoTema = $c["tema"];
 			if(file_exists($locaplic."/temas/".$codigoTema.".map")){
@@ -555,48 +537,41 @@ else{
 					$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");
-									if($l->getmetadata("ows_metadataurl_href") == ""){
-										$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);
-									}
-									//
-									//numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos
-									//
-									if ($l->getmetadata("cortepixels") != ""){
-										$cortePixels = $l->getmetadata("cortepixels");
-									}
-									cloneInlineSymbol($l,$nmap,$oMap);
-									ms_newLayerObj($oMap, $l);
-
-								}
+					foreach ($ts as $t){
+						if ($oMap->getlayerbyname($t) == ""){
+							$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");
+							if($l->getmetadata("ows_metadataurl_href") == ""){
+								$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);
+							}
+							//
+							//numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos
+							//
+							if ($l->getmetadata("cortepixels") != ""){
+								$cortePixels = $l->getmetadata("cortepixels");
+							}
+							cloneInlineSymbol($l,$nmap,$oMap);
+							ms_newLayerObj($oMap, $l);
 						}
 					}
 				}
@@ -611,8 +586,20 @@ else{
 			}
 		}
 	}
+	//
+	//a imagem do mapa recebera a legenda
+	//
+	if((isset($legenda)) && (strtolower($legenda) == "sim")){
+		$leg = $oMap->legend;
+		$leg->set("status",MS_EMBED);
+	}
 	$oMap->setSymbolSet($locaplic."/symbols/".basename($oMap->symbolsetfilename));
 	$oMap->setFontSet($locaplic."/symbols/".basename($oMap->fontsetfilename));
+	//
+	//caso seja download ou json ou csv
+	//
+	processaOutputformatMapfile();
+
 	$oMap->save($nomeMapfileTmp);
 	$oMap = ms_newMapobj($nomeMapfileTmp);
 }
@@ -788,10 +775,10 @@ if(strtolower($req->getValueByName("REQUEST")) == "getlegendgraphic"){
 			if (function_exists("mb_convert_encoding")){
 				$leg = mb_convert_encoding($leg,"UTF-8","ISO-8859-1");
 			}
-			echo $leg;exit;
+			echo $leg;
+			exit;
 		}
-	}
-
+	}
 }
 if(strtolower($req->getValueByName("REQUEST")) == "getfeature"){
 	$l = $oMap->getlayer(0);
@@ -814,54 +801,11 @@ if(strtolower($req->getValueByName("REQUEST")) == "getfeatureinfo"){
 		$_GET["SRS"] = "EPSG:3857";
 	}
 }
-//
-//altera os caminhos das imagens
-//
-if((isset($legenda)) && (strtolower($legenda) == "sim")){
-	$leg = $oMap->legend;
-	$leg->set("status",MS_EMBED);
-}
+
+ms_ioinstallstdouttobuffer();
 //
-//altera o outputformat
+//verifica parametro outputformat e ajusta a requisicao
 //
-if(isset($OUTPUTFORMAT)){
-	if(strtolower($OUTPUTFORMAT) == "shape-zip"){
-		$l = $oMap->getlayer(0);
-		$n = $l->name;
-		$oMap->selectOutputFormat("shape-zip");
-		$oMap->outputformat->setOption("STORAGE", "memory");
-		$oMap->outputformat->setOption("FORM", "zip");
-		$oMap->outputformat->setOption("FILENAME", $n.".zip");
-		$l->setmetadata("wfs_getfeature_formatlist","shape-zip");
-		$oMap->save($nomeMapfileTmp);
-		if(strtolower($request) != "getcapabilities"){
-			header('Content-Disposition: attachment; filename='.$n.'.zip');
-		}
-	}
-	if(strtolower($OUTPUTFORMAT) == "csv"){
-		$l = $oMap->getlayer(0);
-		$n = $l->name."-csv";
-		$oMap->selectOutputFormat("csv");
-		$oMap->outputformat->setOption("STORAGE", "memory");
-		$oMap->outputformat->setOption("FILENAME", $n.".zip");
-		$oMap->outputformat->setOption("FORM", "zip");
-		$l->setmetadata("wfs_getfeature_formatlist","csv");
-		$oMap->save($nomeMapfileTmp);
-		if(strtolower($request) != "getcapabilities"){
-			header('Content-Disposition: attachment; filename='.$n.'.zip');
-		}
-	}
-	if(strtolower($OUTPUTFORMAT) == "geojson"){
-		$l = $oMap->getlayer(0);
-		$oMap->selectOutputFormat("geojson");
-		$l->setmetadata("wfs_getfeature_formatlist","geojson");
-		$oMap->save($nomeMapfileTmp);
-		header("Content-type: application/json; subtype=geojson");
-	}
-}
-ms_ioinstallstdouttobuffer();
-
-//verifica parametro outputformat
 if(strtolower($req->getValueByName("REQUEST")) == "getmap" && $req->getValueByName("format") == ""){
 	$req->setParameter("format","image/png");
 }
@@ -870,54 +814,13 @@ if(strtolower($req->getValueByName("REQUEST")) == "getfeatureinfo" && $_GET["inf
 }
 //json conforme cesium
 if(strtolower($req->getValueByName("REQUEST")) == "getfeatureinfo" && $_GET["info_format"] == "application/json"){
-	$req->setParameter("info_format","application/vnd.ogc.gml");
-	$oMap->owsdispatch($req);
-	ms_iostripstdoutbuffercontentheaders();
-	ob_clean();
-	$r = ms_iogetstdoutbufferstring();
-	//$r = converteenc($r);
-	$nome = $oMap->getlayer(0)->name;
-	$xml = simplexml_load_string($r);
-
-	$json = json_encode($xml);
-	$r = json_decode($json,TRUE);
-	$propriedades = $r[$nome."_layer"];
-	$propriedades = $propriedades[$nome."_feature"];
-	$propriedades = converteenc(json_encode($propriedades));
-	$propriedades = json_decode($propriedades);
-	$n = array();
-	$n[] = array (
-			"type" => "FeatureCollection",
-			"features" => array(
-					array(
-							"type"=>"Feature",
-							"id" => "",
-							"geometry" => array(),
-							"properties" => array(
-									$propriedades
-							),
-							"geometry_name" => ""
-					)
-			)
-	);
-	header("Content-type: application/json");
-	$json = json_encode($n[0]);
-	//verifica a substituicao de alias
-	$itens = $oMap->getlayer(0)->getmetadata("ITENS"); // itens
-	$itensdesc = $oMap->getlayer(0)->getmetadata("ITENSDESC"); // descrição dos itens
-	$itens = explode(",",$itens);
-	$itensdesc = explode(",",converteenc($itensdesc));
-	$n = count($itens);
-	for($i = 0; $i < $n; $i++){
-		$json = str_ireplace($itens[$i],$itensdesc[$i],$json);
-	}
-	echo $json;
+	getfeatureinfoJson();
 	exit;
 }
-
 $oMap->owsdispatch($req);
 
-$contenttype = ms_iostripstdoutbuffercontenttype();
+$contenttype = ms_iostripstdoutbuffercontenttype();
+
 if(strtolower($request) == "getcapabilities"){
 	header('Content-Disposition: attachment; filename=getcapabilities.xml');
 }
@@ -925,12 +828,45 @@ if(strtolower($request) == "getcapabilities"){
 if(!isset($OUTPUTFORMAT)){
 	header("Content-type: $contenttype");
 }
-if(strtolower($OUTPUTFORMAT) == "geojson"){
-	ms_iostripstdoutbuffercontentheaders();
-	header("Content-type: application/json; subtype=geojson");
+
+//precisa limpar o cabecalho
+if(strtolower($OUTPUTFORMAT) == "geojson" || strtolower($OUTPUTFORMAT) == "json"){
+	ms_iostripstdoutbuffercontentheaders();
+	//grava em disco
+	$arq = $dir_tmp."/".$tema.".json";
+	$contents = ms_iogetstdoutbufferstring();
+	file_put_contents($arq,$contents);
+	//envia para download
+	header("Content-type: application/json; subtype=geojson");
+	ms_iogetStdoutBufferBytes();
+	ms_ioresethandlers();
+	exit;
 }
+if(strtolower($OUTPUTFORMAT) == "shape-zip"){
+	//grava em disco
+	$arq = $dir_tmp."/".$tema."_shapefile.zip";
+	$contents = ms_iogetstdoutbufferstring();
+	file_put_contents($arq,$contents);
+	//envia para download
+	header('Content-Disposition: attachment; filename='.$tema.'_shapefile.zip');
+	ms_iogetStdoutBufferBytes();
+	ms_ioresethandlers();
+	exit;
+}
+if(strtolower($OUTPUTFORMAT) == "csv"){
+	//grava em disco
+	$arq = $dir_tmp."/".$tema.".csv";
+	$contents = ms_iogetstdoutbufferstring();
+	file_put_contents($arq,$contents);
+	//envia para download
+	header('Content-Disposition: attachment; filename='.$tema.'.csv');
+	header("Content-type: text/csv");
+	ms_iogetStdoutBufferBytes();
+	ms_ioresethandlers();
+	exit;
+}
+$buffer = ms_iogetStdoutBufferBytes();
 
-$buffer = ms_iogetStdoutBufferBytes();
 ms_ioresethandlers();
 //
 //funções
@@ -949,16 +885,17 @@ function ogc_pegaListaDeMenus(){
 }
 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 "Esse programa usa os arquivos mapfiles existentes em
"; + echo "i3geo/temas para gerar web services 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&ocaute;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."; - echo "Utilize o parametro restauramapa para indicar o ID de um mapa salvo no banco de dados de administração para utilizá-lo como um WMS"; + echo "Para usar esse web service voce pode usar o parametro &tema=,
"; + echo "ou seja,http://[host]/i3geo/ogc.php?tema=[codigo do tema]
"; + echo "no lugar do codigo pode ser especificado um arquivo mapfile qualquer. "; + echo "Nesse caso, deve ser digitado o caminho completo no servidor

"; + echo "Utilize o sistema de administracao do i3Geo para configurar quais os temas da pasta i3geo/temas podem ser utilizados.

"; + echo "Utilize o parametro restauramapa para indicar o ID de um mapa salvo no banco
"; + echo "de dados de administracao para utiliza-lo como um WMS"; } function ogc_imprimeListaDeTemas(){ global $urli3geo,$perfil,$locaplic; @@ -975,17 +912,17 @@ function ogc_imprimeListaDeTemas(){ 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"){ + $lts = $m->pegaListaDeTemas($grupo["id_n1"],$sgrupo["id_n2"],$menu["idmenu"]); + foreach($lts as $t){ + if(strtolower($t["ogc"]) == "sim"){ $imprimir .= texto2iso($imprimegrupo)."->".texto2iso($imprimesubgrupo)."
"; $imprimir .= "      "; - $imprimir .= "".$tema["tid"].""; - $imprimir .= " - ".texto2iso($tema["nome"])." "; - $imprimir .= " Getcapabilities"; - $imprimir .= " GetMap "; - if($tema["link"] != " ") - $imprimir .= "  fonte"; + $imprimir .= "".$t["tid"].""; + $imprimir .= " - ".texto2iso($t["nome"])." "; + $imprimir .= " Getcapabilities"; + $imprimir .= " GetMap "; + if($t["link"] != " ") + $imprimir .= "  fonte"; $imprimir .= "
"; } } @@ -1011,17 +948,17 @@ function ogc_imprimeListaDeTemasWfs(){ 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"){ + $lts = $m->pegaListaDeTemas($grupo["id_n1"],$sgrupo["id_n2"],$menu["idmenu"]); + foreach($lts as $t){ + if(strtolower($t["ogc"]) == "sim" && strtolower($t["down"]) !== "nao"){ $imprimir .= $imprimegrupo."->".$imprimesubgrupo."
"; $imprimir .= "      "; - $imprimir .= "".$tema["tid"].""; - $imprimir .= " - ".$tema["nome"]." "; - $imprimir .= " Getcapabilities"; - $imprimir .= " Getfeature "; - if($tema["link"] != " ") - $imprimir .= "  fonte"; + $imprimir .= "".$t["tid"].""; + $imprimir .= " - ".$t["nome"]." "; + $imprimir .= " Getcapabilities"; + $imprimir .= " Getfeature "; + if($t["link"] != " ") + $imprimir .= "  fonte"; $imprimir .= "
"; } } @@ -1048,7 +985,7 @@ function carregaCacheImagem($cachedir,$map,$tms){ header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200); $etag = md5_file($nome); header('Etag: '.$etag); - fpassthru(fopen($nome, 'rb')); + readfile($nome); exit; } } @@ -1084,7 +1021,7 @@ function salvaCacheImagem($cachedir,$map,$tms){ header('Cache-Control: max-age=3600, must-revalidate'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200); - fpassthru(fopen($nome, 'rb')); + readfile($nome); exit; } function texto2iso($texto){ @@ -1135,7 +1072,7 @@ function renderNocacheTms(){ header('Cache-Control: max-age=3600, must-revalidate'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nomer)).' GMT', true, 200); - fpassthru(fopen($nomer, 'rb')); + readfile($nomer); } if($i3georendermode == 2){ ob_clean(); @@ -1145,6 +1082,129 @@ function renderNocacheTms(){ header("Content-type: image/png"); } } +function getfeatureinfoJson(){ + global $req, $oMap; + $req->setParameter("info_format","application/vnd.ogc.gml"); + $oMap->owsdispatch($req); + ms_iostripstdoutbuffercontentheaders(); + ob_clean(); + $r = ms_iogetstdoutbufferstring(); + //$r = converteenc($r); + $nome = $oMap->getlayer(0)->name; + $xml = simplexml_load_string($r); + + $json = json_encode($xml); + $r = json_decode($json,TRUE); + $propriedades = $r[$nome."_layer"]; + $propriedades = $propriedades[$nome."_feature"]; + $propriedades = converteenc(json_encode($propriedades)); + $propriedades = json_decode($propriedades); + $n = array(); + $n[] = array ( + "type" => "FeatureCollection", + "features" => array( + array( + "type"=>"Feature", + "id" => "", + "geometry" => array(), + "properties" => array( + $propriedades + ), + "geometry_name" => "" + ) + ) + ); + header("Content-type: application/json"); + $json = json_encode($n[0]); + //verifica a substituicao de alias + $itens = $oMap->getlayer(0)->getmetadata("ITENS"); // itens + $itensdesc = $oMap->getlayer(0)->getmetadata("ITENSDESC"); // descrição dos itens + $itens = explode(",",$itens); + $itensdesc = explode(",",converteenc($itensdesc)); + $n = count($itens); + for($i = 0; $i < $n; $i++){ + $json = str_ireplace($itens[$i],$itensdesc[$i],$json); + } + echo $json; +} +function processaOutputformatMapfile(){ + global $OUTPUTFORMAT, $oMap, $tema; + if(strtolower($OUTPUTFORMAT) == "shape-zip"){ + $l = $oMap->getlayer(0); + $n = $l->name; + $oMap->selectOutputFormat("shape-zip"); + $oMap->outputformat->setOption("STORAGE", "filesystem"); + $oMap->outputformat->setOption("FORM", "zip"); + $oMap->outputformat->setOption("FILENAME", $tema."_shapefile.zip"); + $l->setmetadata("wfs_getfeature_formatlist","shape-zip"); + } + if(strtolower($OUTPUTFORMAT) == "csv"){ + $l = $oMap->getlayer(0); + $n = $l->name."-csv"; + $oMap->selectOutputFormat("csv"); + $oMap->outputformat->setOption("STORAGE", "filesystem"); + $oMap->outputformat->setOption("FILENAME", $tema.".csv"); + $oMap->outputformat->setOption("FORM", "simple"); + $l->setmetadata("wfs_getfeature_formatlist","csv"); + } + if(strtolower($OUTPUTFORMAT) == "geojson" || strtolower($OUTPUTFORMAT) == "json"){ + $l = $oMap->getlayer(0); + $oMap->selectOutputFormat("geojson"); + $l->setmetadata("wfs_getfeature_formatlist","geojson"); + } +} +function carregaCacheArquivo(){ + global $dir_tmp, $tema, $OUTPUTFORMAT; + if(strtolower($OUTPUTFORMAT) == "shape-zip"){ + $arq = $dir_tmp."/".$tema."_shapefile.zip"; + if(file_exists($arq)){ + header('Content-Disposition: attachment; filename='.$tema.'_shapefile.zip'); + readfile($arq); + exit; + } + } + if(strtolower($OUTPUTFORMAT) == "csv"){ + $arq = $dir_tmp."/".$tema.".csv"; + if(file_exists($arq)){ + header('Content-Disposition: attachment; filename='.$tema.'.csv'); + header("Content-type: text/csv"); + readfile($arq); + exit; + } + } + if(strtolower($OUTPUTFORMAT) == "geojson" || strtolower($OUTPUTFORMAT) == "json"){ + $arq = $dir_tmp."/".$tema.".json"; + if(file_exists($arq)){ + header("Content-type: application/json; subtype=geojson"); + readfile($arq); + exit; + } + } +} +function restauraMapaSalvo(){ + global $restauramapa, $dir_tmp, $tema; + $xbase = restauraMapaAdmin($restauramapa,$dir_tmp); + $m = ms_newMapObj($xbase); + $w = $m->web; + $w->set("imagepath",dirname($w->imagepath)."/"); + $w->set("imageurl",dirname($w->imageurl)."/"); + //apaga algumas camadas + $l = $m->getlayerbyname("rosadosventos"); + if($l != ""){ + $l->set("status",MS_DELETE); + } + $l = $m->getlayerbyname("copyright"); + if($l != ""){ + $l->set("status",MS_DELETE); + } + $m->save($xbase); + //$fundo = $xbase; + $tema = $xbase; + $_GET["tema"] = $xbase; + $_GET["layers"] = ""; + $l = $m->getlayer(0); + $_GET["LAYERS"] = $l->name; +} function converteenc($texto){ if (!mb_detect_encoding($texto,"UTF-8",true)){ $texto = mb_convert_encoding($texto,"UTF-8","ISO-8859-1"); -- libgit2 0.21.2