From 5e81628976ccbba318c8456fe1d04794dcd9f00c Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Sat, 30 Aug 2014 12:56:24 +0000 Subject: [PATCH] V5 - atualização do gerador de serviços OGC para permitir o download via shapefile --- .buildpath | 5 +++++ .project | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .settings/.jsdtscope | 205 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .settings/org.eclipse.core.resources.prefs | 2 ++ .settings/org.eclipse.wst.jsdt.ui.superType.container | 1 + .settings/org.eclipse.wst.jsdt.ui.superType.name | 1 + admin/admin.db | Bin 263168 -> 0 bytes ogc.php | 658 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 8 files changed, 680 insertions(+), 249 deletions(-) create mode 100755 .buildpath create mode 100755 .project create mode 100755 .settings/.jsdtscope create mode 100755 .settings/org.eclipse.core.resources.prefs create mode 100755 .settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100755 .settings/org.eclipse.wst.jsdt.ui.superType.name diff --git a/.buildpath b/.buildpath new file mode 100755 index 0000000..8bcb4b5 --- /dev/null +++ b/.buildpath @@ -0,0 +1,5 @@ + + + + + diff --git a/.project b/.project new file mode 100755 index 0000000..3918f4d --- /dev/null +++ b/.project @@ -0,0 +1,57 @@ + + + i3geo5 + + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.dltk.core.scriptbuilder + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + + org.eclipse.wst.jsdt.core.jsNature + org.eclipse.php.core.PHPNature + + + + 1398253728703 + + 14 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-compact* + + + + 1398253728704 + + 14 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-pacotes + + + + 1398253728706 + + 30 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-.* + + + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100755 index 0000000..6c0a028 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100755 index 0000000..370ae2c --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=ISO-8859-1 diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100755 index 0000000..49c8cd4 --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.JRE_CONTAINER \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100755 index 0000000..11006e2 --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Global \ No newline at end of file diff --git a/admin/admin.db b/admin/admin.db index 8cad86d..7eb1092 100755 Binary files a/admin/admin.db and b/admin/admin.db differ diff --git a/ogc.php b/ogc.php index 32668e4..78c9b05 100755 --- a/ogc.php +++ b/ogc.php @@ -1,4 +1,4 @@ -_filter= + + Exemplo de filtro + + http://localhost/i3geo/ogc.php?map_layer__lbiomashp_filter=(('[CD_LEGENDA]'='CAATINGA'))&tema=_lbiomashp&SRS=EPSG:4618&WIDTH=500&HEIGHT=500&BBOX=-76.5125927,-39.3925675209,-29.5851853,9.49014852081&FORMAT=image/png&service=wms&version=1.1.0&request=getmap&layers=_lbiomashp + + no caso de camadas Postgis basta usar map_layer__lbiomashp_filter=cd_legenda='CAATINGA' Exemplos: - -ogc.php?temas=biomashp&format=application/openlayers&bbox=-54,-14,-50,-10 + +ogc.php?temas=biomashp&format=application/openlayers&bbox=-54,-14,-50,-10 ogc.php?lista=temas @@ -69,21 +79,21 @@ ogc.php?intervalo=0,50 */ // //validações e includes -// +// $cache = true; 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"); +include(dirname(__FILE__)."/classesphp/pega_variaveis.php"); +include(dirname(__FILE__)."/classesphp/funcoes_gerais.php"); //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; + $tema = "ogcmetaestat".$id_medida_variavel; + $_GET["layers"] = $tema; $_GET["LAYERS"] = $tema; } -if(!isset($temas) && isset($tema)){ - $temas = $tema; -} +if(!isset($temas) && isset($tema)){ + $temas = $tema; +} // //recupera um mapa salvo no banco de administracao // @@ -102,29 +112,29 @@ if(!empty($restauramapa)){ if($l != ""){ $l->set("status",MS_DELETE); } - $m->save($xbase); + $m->save($xbase); //$fundo = $xbase; - $temas = $xbase; - $_GET["tema"] = $temas; - $_GET["layers"] = ""; - $l = $m->getlayer(0); + $temas = $xbase; + $_GET["tema"] = $temas; + $_GET["layers"] = ""; + $l = $m->getlayer(0); $_GET["LAYERS"] = $l->name; -} +} // //para operar como o Geoserver // if(isset($format) && strtolower($format) == "application/openlayers"){ - //var_dump($_SERVER);exit; - if(!isset($layers)){ - $layers = $temas; + //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"; - //echo $urln;exit; - if(!headers_sent()){ - header("Location:".$urln); + //echo $urln;exit; + if(!headers_sent()){ + header("Location:".$urln); } - else{ - echo ""; + else{ + echo ""; } } // @@ -162,14 +172,17 @@ if(isset($lista) && $lista == "temaswfs"){ error_reporting(0); $versao = versao(); $versao = $versao["principal"]; -$req = ms_newowsrequestobj(); +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"; +} +if(!isset($_GET["srs"]) && !isset($_GET["SRS"])){ + $_GET["srs"] = "EPSG:4326"; } foreach ($_GET as $k=>$v){ $req->setParameter(strtoupper($k), $v); @@ -177,16 +190,16 @@ foreach ($_GET as $k=>$v){ $tipo = "metadados"; $cache = false; } - if(strtolower($k) == "layers" && empty($_GET["tema"])){ - $tema = $v; + if(strtolower($k) == "layers" && empty($_GET["tema"])){ + $tema = $v; } - if(strtolower($k) == "layer" && empty($_GET["tema"])){ - $tema = $v; + if(strtolower($k) == "layer" && empty($_GET["tema"])){ + $tema = $v; } -} -$req->setParameter("srsName",$req->getValueByName("SRS")); +} +$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; +//echo $listaepsg;exit; if(count($_GET) == 0){ $tipo="intervalo"; $req->setParameter("REQUEST", "getCapabilities"); @@ -195,13 +208,13 @@ if(count($_GET) == 0){ } if(isset($tema) && $tipo != "metadados"){ $tipo = ""; -} -if(isset($version) && !isset($VERSION)){ - $VERSION = $version; +} +if(isset($version) && !isset($VERSION)){ + $VERSION = $version; } if(!isset($VERSION)){ - $req->setParameter("VeRsIoN","1.0.0"); -} + $req->setParameter("VeRsIoN","1.0.0"); +} if (!isset($intervalo)){ $intervalo = "0,5000"; } @@ -213,33 +226,42 @@ if(!isset($tema)){ $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 +} +//nome do mapfile que ficara em cache +$agora = intval(time() / 1000); +//acrescenta ao nome a indicacao do tipo de TMS if(isset($_GET["tms"])){ $agora .= "tms"; -} -if(isset($_GET["Z"]) && isset($_GET["X"])){ - $agora .= "google"; -} -if(isset($_GET["DESLIGACACHE"]) && $_GET["DESLIGACACHE"] == "sim"){ - $agora = time(); - $cache = false; -} -$nomeMapfileTmp = $dir_tmp."/ogc_".md5($tema)."_".$agora.".map"; -$nomeMapfileTmp = str_replace(",","",$nomeMapfileTmp); -$nomeMapfileTmp = str_replace(" ","",$nomeMapfileTmp); -if(file_exists($nomeMapfileTmp) && $tipo == ""){ - $oMap = ms_newMapobj($nomeMapfileTmp); -} -else{ +} +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 +// +if(isset($_GET["OUTPUTFORMAT"]) || !empty($_GET["map_layer_".$tema."_filter"])){ + $_GET["DESLIGACACHE"] = "sim"; +} +if(isset($_GET["DESLIGACACHE"]) && $_GET["DESLIGACACHE"] == "sim"){ + $agora = time(); + $cache = false; +} +$nomeMapfileTmp = $dir_tmp."/ogc_".md5($tema)."_".$agora.".map"; +$nomeMapfileTmp = str_replace(",","",$nomeMapfileTmp); +$nomeMapfileTmp = str_replace(" ","",$nomeMapfileTmp); +//essa variavel e usada para definir se a imagem final gerada devera ser cortada ou nao +$cortePixels = 0; +if(file_exists($nomeMapfileTmp) && $tipo == ""){ + $oMap = ms_newMapobj($nomeMapfileTmp); +} +else{ if(empty($ogcwsmap)){ $oMap = ms_newMapobj($locaplic."/aplicmap/ogcwsv".$versao.".map"); } else{ $oMap = ms_newMapobj($ogcwsmap); - } + } $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']; @@ -262,21 +284,20 @@ else{ $oMap->setmetadata("ows_enable_request","*"); $e = $oMap->extent; $extensaoMap = ($e->minx)." ".($e->miny)." ".($e->maxx)." ".($e->maxy); - //gera o mapa - if ($tipo == "" || $tipo == "metadados"){ + 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; - //FIXME não aceita gvp quando o caminho é completo + //FIXME nao aceita gvp quando o caminho e completo if(file_exists($_GET["tema"]) && !isset($id_medida_variavel)){ $nmap = ms_newMapobj($_GET["tema"]); $temai3geo = false; $nmap->setmetadata("ows_enable_request","*"); } foreach ($tema as $tx){ - $extensao = ".map"; + $extensao = ".map"; if($temai3geo == true && file_exists($locaplic."/temas/".$tx.".php")){ $extensao = ".php"; } @@ -285,16 +306,15 @@ else{ } if($extensao == ".map"){ //cria o mapfile com base no sistema de metadados estatisticos - //verifica se o id_medida_variavel existe no mapfile e nao foi passado como um parametro - if(!isset($id_medida_variavel) && $temai3geo == true){ - $nmap = ms_newMapobj($locaplic."/temas/".$tx.".map"); - $l = $nmap->getlayer(0); - $teste = $l->getmetadata("METAESTAT_ID_MEDIDA_VARIAVEL"); - if($teste != "" && $l->data == ""){ - $id_medida_variavel = $teste; - } - - } + //verifica se o id_medida_variavel existe no mapfile e nao foi passado como um parametro + if(!isset($id_medida_variavel) && $temai3geo == true){ + $nmap = ms_newMapobj($locaplic."/temas/".$tx.".map"); + $l = $nmap->getlayer(0); + $teste = $l->getmetadata("METAESTAT_ID_MEDIDA_VARIAVEL"); + if($teste != "" && $l->data == ""){ + $id_medida_variavel = $teste; + } + } if(isset($id_medida_variavel)){ $temai3geo = false; include("admin/php/classe_metaestat.php"); @@ -304,31 +324,31 @@ else{ $nmap = ms_newMapobj($mapfileMetaestat["mapfile"]); $nmap->setmetadata("ows_enable_request","*"); $req->setParameter("LAYERS", "ogcmetaestat".$id_medida_variavel); - } + } if($temai3geo == true){ $nmap = ms_newMapobj($locaplic."/temas/".$tx.".map"); $nmap->setmetadata("ows_enable_request","*"); } if($temai3geo == false || empty($layers)) - { - $ts = $nmap->getalllayernames(); - $nmap->setmetadata("ows_enable_request","*"); + { + $ts = $nmap->getalllayernames(); + $nmap->setmetadata("ows_enable_request","*"); } else{ $ts = explode(",",str_replace(" ",",",$layers)); } - foreach ($ts as $t){ + foreach ($ts as $t){ $l = $nmap->getlayerbyname($t); - $permite = $l->getmetadata("permiteogc"); + $permite = $l->getmetadata("permiteogc"); if(strtolower($permite) != "nao"){ //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); @@ -351,9 +371,8 @@ else{ } if($l->type == MS_LAYER_RASTER && $l->numclasses > 0){ $c = $l->getclass(0); - if($c->name == "") - { - $c->name = " "; + if($c->name == ""){ + $c->name = " "; } } //inclui extensao geografica @@ -385,8 +404,18 @@ else{ $l->setprocessing("LABEL_NO_CLIP=True"); $l->setprocessing("POLYLINE_NO_CLIP=True"); } - ms_newLayerObj($oMap, $l); - //$req->setParameter("LAYERS", "mundo"); + // + //verifica se existem parametros de substituicao passados via url + // + $parametro = $_GET["map_layer_".$l->name."_filter"]; + //echo $parametro;exit; + if(!empty($parametro)){ + $l->setfilter($parametro); + $cache = false; + } + + ms_newLayerObj($oMap, $l); + //$req->setParameter("LAYERS", "mundo"); } } } @@ -398,10 +427,10 @@ else{ include_once($locaplic."/pacotes/gvsig/gvsig2mapfile/class.gvsig2mapfile.php"); $gm = new gvsig2mapfile($locaplic."/temas/".$tx.".gvp"); $gvsigview = $gm->getViewsNames(); - foreach($gvsigview as $gv){ + foreach($gvsigview as $gv){ $dataView = $gm->getViewData($gv); $oMap = $gm->addLayers($oMap,$gv,$dataView["layerNames"]); - } + } $numlayers = $oMap->numlayers; $layers = array(); //$layers[] = "default"; @@ -424,9 +453,8 @@ else{ } if($l->type == MS_LAYER_RASTER && $l->numclasses > 0){ $c = $l->getclass(0); - if($c->name == "") - { - $c->name = " "; + if($c->name == ""){ + $c->name = " "; } } //inclui extensao geografica @@ -435,6 +463,12 @@ else{ $extensao = $extensaoMap; } $l->setmetadata("wms_extent",$extensao); + // + //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"); + } } $req->setParameter("LAYERS", implode(",",$layers)); $req->setParameter("STYLES", ""); @@ -446,8 +480,8 @@ else{ $conta = 0; $int = explode(",",$intervalo); $codigosTema = array(); - if(empty($perfil)){ - $perfil = ""; + if(empty($perfil)){ + $perfil = ""; } include("classesphp/classe_menutemas.php"); $m = new Menutemas("",$perfil,$locaplic,$urli3geo); @@ -472,6 +506,7 @@ else{ //echo "
";
 		//var_dump($codigosTema);
 		//exit;
+
 		foreach($codigosTema as $c){
 			$codigoTema = $c["tema"];
 			if(file_exists($locaplic."/temas/".$codigoTema.".map")){
@@ -486,9 +521,8 @@ else{
 								if (($conta >= $int[0]) && ($conta <= $int[1])){
 									$l = $nmap->getlayerbyname($t);
 									$extensao = $l->getmetadata("EXTENSAO");
-									if($extensao == "")
-									{
-										$extensao = $extensaoMap;
+									if($extensao == ""){
+										$extensao = $extensaoMap;
 									}
 									$l->setmetadata("wms_extent",$extensao);
 
@@ -499,21 +533,27 @@ else{
 									$l->set("dump",MS_TRUE);
 									$l->setmetadata("WMS_INCLUDE_ITEMS","all");
 									$l->setmetadata("WFS_INCLUDE_ITEMS","all");
-
-									if($l->getmetadata("ows_metadataurl_href") == ""){
+									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);
+
 								}
 							}
 						}
@@ -528,63 +568,92 @@ else{
 					}
 				}
 			}
-		}
-	}
-	$oMap->setSymbolSet($locaplic."/symbols/".basename($oMap->symbolsetfilename));
-	$oMap->setFontSet($locaplic."/symbols/".basename($oMap->fontsetfilename));
-	$oMap->save($nomeMapfileTmp);
-	$oMap = ms_newMapobj($nomeMapfileTmp);
-}
+		}
+	}
+	$oMap->setSymbolSet($locaplic."/symbols/".basename($oMap->symbolsetfilename));
+	$oMap->setFontSet($locaplic."/symbols/".basename($oMap->fontsetfilename));
+	$oMap->save($nomeMapfileTmp);
+	$oMap = ms_newMapobj($nomeMapfileTmp);
+}
 if(ob_get_contents ()){
 	ob_end_clean();
 }
-//
-//verifica se a requisicao e do tipo TMS.
-//
-//
-//calcula a extensao geografica com base no x,y,z em requisições TMS
-//quando for do tipo tms $_GET["tms"] contem os parametros do tile
-//essa rotina faz um exit ao final
-//o cache tms so fucniona se houver apenas uma camada no mapa
-//tms e usado basicamente por mashup ou openlayers
-//
-if(isset($_GET["tms"])){
-	$temp = explode("/",$_GET["tms"]);
-	$z = $temp[2];
-	$x = $temp[3];
-	$y = str_replace(".png","",$temp[4]);
-	$n = pow(2,$z+1);
-	$lon1 = $x / $n * 360.0 - 180.0;
-	$lon2 = ($x+1) / $n * 360.0 - 180.0;
-	$n = pow(2,$z);
-	$lat1 = $y / $n * 180.0 - 90.0;
-	$lat2 = ($y+1) / $n * 180.0 - 90.0;
-	//essa funcao termina o processo se a imagem existir
-	if($cache == true){
-		carregaCacheImagem($cachedir,$nomeMapfileTmp,$_GET["tms"]);
-	}
-	//se nao existir, salva a imagem
-	//echo $lon1." ".$lat1." ".$lon2." ".$lat2;exit;
-	$oMap->setExtent($lon1,$lat1,$lon2,$lat2);
-	$oMap->setsize(256,256);
-	$oMap->getlayer(0)->set("status",MS_DEFAULT);
-	$img = $oMap->draw();
-	if($img->imagepath == ""){
-		exit;
-	}
-	if($cache == true){
-		salvaCacheImagem($cachedir,$nomeMapfileTmp,$_GET["tms"]);
-	}
-	renderNocacheTms();
-}
+//
+//verifica se a requisicao e do tipo TMS.
+//
+//
+//calcula a extensao geografica com base no x,y,z em requisisoes TMS
+//quando for do tipo tms $_GET["tms"] contem os parametros do tile
+//essa rotina faz um exit ao final
+//o cache tms so fucniona se houver apenas uma camada no mapa
+//tms e usado basicamente por mashup ou openlayers
+//
+if(isset($_GET["tms"])){
+	$temp = explode("/",$_GET["tms"]);
+	$z = $temp[2];
+	$x = $temp[3];
+	$y = str_replace(".png","",$temp[4]);
+	$n = pow(2,$z+1);
+	$lon1 = $x / $n * 360.0 - 180.0;
+	$lon2 = ($x+1) / $n * 360.0 - 180.0;
+	$n = pow(2,$z);
+	$lat1 = $y / $n * 180.0 - 90.0;
+	$lat2 = ($y+1) / $n * 180.0 - 90.0;
+	//essa funcao termina o processo se a imagem existir
+	if($cache == true){
+		carregaCacheImagem($cachedir,$nomeMapfileTmp,$_GET["tms"]);
+	}
+	$layer0 = $oMap->getlayer(0);
+	//
+	//numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos
+	//
+	if ($layer0->getmetadata("cortepixels") != ""){
+		$cortePixels = $layer0->getmetadata("cortepixels");
+	}
+	//se nao existir, salva a imagem
+	//echo $lon1." ".$lat1." ".$lon2." ".$lat2;exit;
+	$oMap->setsize(256,256);
+
+	$oMap->setExtent($lon1,$lat1,$lon2,$lat2);
+
+	$layer0->set("status",MS_DEFAULT);
+	//
+	//se o layer foi marcado para corte altera os parametros para ampliar o mapa
+	//antes de gerar a imagem
+	//
+	if($cortePixels > 0){
+		//$oMap->prepareImage();
+		$escalaInicial = $oMap->scaledenom;
+		$extensaoInicial = $oMap->extent;
+		$wh = 256+($cortePixels*2);
+		$oMap->setsize($wh,$wh);
+		$ponto = new pointObj();
+		$ponto->setxy(($wh/2),($wh/2));
+		$oMap->zoomScale($escalaInicial, $ponto, $wh, $wh, $extensaoInicial);
+	}
+	$img = $oMap->draw();
+	if($img->imagepath == ""){
+		exit;
+	}
+	if($cache == true){
+		salvaCacheImagem($cachedir,$nomeMapfileTmp,$_GET["tms"]);
+	}
+	renderNocacheTms();
+}
 //
 //verifica se a chamada do servico e do tipo TILE no padrao do Google
 //
-if(isset($_GET["Z"]) && isset($_GET["X"])){
+if(isset($_GET["Z"]) && isset($_GET["X"])){
 	$x = $_GET["X"];
 	$y = $_GET["Y"];
 	$z = $_GET["Z"];
-	$layer0 = $oMap->getlayer(0);
+	$layer0 = $oMap->getlayer(0);
+	//
+	//numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos
+	//
+	if ($layer0->getmetadata("cortepixels") != ""){
+		$cortePixels = $layer0->getmetadata("cortepixels");
+	}
 	if($cache == true){
 		carregaCacheImagem($cachedir,$nomeMapfileTmp,"/googlemaps/$layer0->name/$z/$x/$y");
 	}
@@ -606,43 +675,52 @@ if(isset($_GET["Z"]) && isset($_GET["X"])){
 	$poPoint1->project($projInObj, $projOutObj);
 	$poPoint2 = ms_newpointobj();
 	$poPoint2->setXY($lon2, $lat2);
-	$poPoint2->project($projInObj, $projOutObj);
-	$oMap->setExtent($poPoint1->x,$poPoint1->y,$poPoint2->x,$poPoint2->y);
+	$poPoint2->project($projInObj, $projOutObj);
 	$oMap->setsize(256,256);
-	$oMap->getlayer(0)->set("status",MS_DEFAULT);
-	$oMap->setProjection("proj=merc,a=6378137,b=6378137,lat_ts=0.0,lon_0=0.0,x_0=0.0,y_0=0,k=1.0,units=m");
-	$layer0->setProjection("proj=latlong,a=6378137,b=6378137");
-	//$oMap->save();
+	$oMap->setExtent($poPoint1->x,$poPoint1->y,$poPoint2->x,$poPoint2->y);
+
+	$oMap->getlayer(0)->set("status",MS_DEFAULT);
+	$oMap->setProjection("proj=merc,a=6378137,b=6378137,lat_ts=0.0,lon_0=0.0,x_0=0.0,y_0=0,k=1.0,units=m");
+	$layer0->setProjection("proj=latlong,a=6378137,b=6378137");
+	//
+	//se o layer foi marcado para corte altera os parametros para ampliar o mapa
+	//antes de gerar a imagem
+	//
+	if($cortePixels > 0){
+		//$oMap->prepareImage();
+		$escalaInicial = $oMap->scaledenom;
+		$extensaoInicial = $oMap->extent;
+		$wh = 256+($cortePixels*2);
+		$oMap->setsize($wh,$wh);
+		$ponto = new pointObj();
+		$ponto->setxy(($wh/2),($wh/2));
+		$oMap->zoomScale($escalaInicial, $ponto, $wh, $wh, $extensaoInicial);
+	}
 	$img = $oMap->draw();
 	if($img->imagepath == ""){
 		exit;
-	}
-	/**
-	 * @TODO ativar cache
-	 */
-
+	}
 	if($cache == true){
-		salvaCacheImagem($cachedir,$nomeMapfileTmp,"/googlemaps/$layer0->name/$z/$x/$y");
-	}
-	renderNocacheTms();
-}
-if(strtolower($req->getValueByName("REQUEST")) == "getlegendgraphic"){
-	$l = $oMap->getlayer(0);
-	if($req->getValueByName("LAYER") == ""){
-		$req->setParameter("LAYER",$l->name);
-	}
+		salvaCacheImagem($cachedir,$nomeMapfileTmp,"/googlemaps/$layer0->name/$z/$x/$y");
+	}
+	renderNocacheTms();
+}
+if(strtolower($req->getValueByName("REQUEST")) == "getlegendgraphic"){
+	$l = $oMap->getlayer(0);
+	if($req->getValueByName("LAYER") == ""){
+		$req->setParameter("LAYER",$l->name);
+	}
 	if($req->getValueByName("FORMAT") == ""){
 		$req->setParameter("FORMAT","image/png");
 	}
-
+	$legenda = $oMap->legend;
+	$legenda->set("status",MS_DEFAULT);
+	$l->set("minscaledenom",0);
+	$l->set("maxscaledenom",0);
 	if($req->getValueByName("FORMAT") == "text/html"){
 		$req->setParameter("FORMAT","image/png");
 		$l = $oMap->getlayerbyname($req->getValueByName("LAYER"));
 		$l->set("status",MS_DEFAULT);
-		$l->set("minscaledenom",0);
-		$l->set("maxscaledenom",0);
-		$legenda = $oMap->legend;
-		$legenda->set("status",MS_DEFAULT);
 		$legenda->set("template",$locaplic."/aplicmap/legendaOgc.html");
 
 		$tmparray["my_tag"] = "value_of_my_tag";
@@ -653,14 +731,29 @@ if(strtolower($req->getValueByName("REQUEST")) == "getlegendgraphic"){
 			echo $leg;exit;
 		}
 	}
-
-}
+
+}
 if(strtolower($req->getValueByName("REQUEST")) == "getfeature"){
 	$l = $oMap->getlayer(0);
 	if($req->getValueByName("TYPENAME") == "" || $req->getValueByName("TYPENAME") == "undefined"){
 		$req->setParameter("TYPENAME",$l->name);
 	}
-}
+	if($l->getProjection() == "" ){
+		$l->setProjection("proj=latlong,a=6378137,b=6378137");
+	}
+	if(strtolower($req->getValueByName("SRS")) == "epsg:900913"){
+		$req->setParameter("SRS","EPSG:3857");
+	}
+}
+if(strtolower($req->getValueByName("REQUEST")) == "getfeatureinfo"){
+	$l = $oMap->getlayer(0);
+	$req->setParameter("LAYERS",$l->name);
+	$req->setParameter("QUERY_LAYERS",$l->name);
+	if(strtolower($req->getValueByName("SRS")) == "epsg:900913"){
+		$req->setParameter("SRS","EPSG:3857");
+		$_GET["SRS"] = "EPSG:3857";
+	}
+}
 //
 //altera os caminhos das imagens
 //
@@ -668,14 +761,55 @@ if((isset($legenda)) && (strtolower($legenda) == "sim")){
 	$leg = $oMap->legend;
 	$leg->set("status",MS_EMBED);
 }
-ms_ioinstallstdouttobuffer();
+//
+//altera o outputformat
+//
+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');
+		}
+	}
+	//FIXME envia uma linha estranha no header. Nao da pra usar
+	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();
 $oMap->owsdispatch($req);
 $contenttype = ms_iostripstdoutbuffercontenttype();
-if(strtolower($request) == "getcapabilities"){
-	header('Content-Disposition: attachment; filename=getcapabilities.xml');
+if(strtolower($request) == "getcapabilities"){
+	header('Content-Disposition: attachment; filename=getcapabilities.xml');
+}
+
+if(!isset($OUTPUTFORMAT)){
+	header("Content-type: $contenttype");
 }
-//header("Content-type: application/xml");
-header("Content-type: $contenttype");
 
 $buffer = ms_iogetStdoutBufferBytes();
 ms_ioresethandlers();
@@ -684,13 +818,13 @@ ms_ioresethandlers();
 //
 function ogc_pegaListaDeMenus(){
 	global $perfil,$locaplic,$urli3geo;
-	if(!isset($perfil)){
-		$perfil = "";
+	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"];
+	{
+		$menus[] = $urli3geo."/admin/xmlmenutemas.php?id_menu=".$menu["idmenu"];
 	}
 	return $menus;
 }
@@ -701,11 +835,11 @@ function ogc_imprimeAjuda(){
 	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 "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 "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"; } function ogc_imprimeListaDeTemas(){ global $urli3geo,$perfil,$locaplic; @@ -779,39 +913,53 @@ function ogc_imprimeListaDeTemasWfs(){ } echo $imprimir.""; } -function carregaCacheImagem($cachedir,$map,$tms){ - global $dir_tmp; - if($cachedir == ""){ - $nome = $dir_tmp."/cache".$tms; - } - else{ - $nome = $cachedir.$tms; - } - if(file_exists($nome)){ - header('Content-Length: '.filesize($nome)); - header('Content-Type: image/png'); - 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); - $etag = md5_file($nome); - header('Etag: '.$etag); - fpassthru(fopen($nome, 'rb')); - exit; - } -} +function carregaCacheImagem($cachedir,$map,$tms){ + global $dir_tmp; + if($cachedir == ""){ + $nome = $dir_tmp."/cache".$tms; + } + else{ + $nome = $cachedir.$tms; + } + if(file_exists($nome)){ + header('Content-Length: '.filesize($nome)); + header('Content-Type: image/png'); + 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); + $etag = md5_file($nome); + header('Etag: '.$etag); + fpassthru(fopen($nome, 'rb')); + exit; + } +} function salvaCacheImagem($cachedir,$map,$tms){ - global $img,$dir_tmp; + global $img,$dir_tmp,$cortePixels; if($cachedir == ""){ $nome = $dir_tmp."/cache".$tms; } else{ $nome = $cachedir.$tms; - } + } @mkdir(dirname($nome),0777,true); - chmod(dirname($nome),0777); + chmod(dirname($nome),0777); $img->saveImage($nome); - chmod($nome,0777); + // + //corta a imagem gerada para voltar ao tamanho normal + // + if($cortePixels > 0){ + $img = imagecreatefrompng($nome); + $imgc = imagecreate(256,256); + imagesavealpha($imgc, true); + // Fill the image with transparent color + $color = imagecolorallocatealpha($imgc,0x00,0x00,0x00,127); + imagefill($imgc, 0, 0, $color); + + imagecopy($imgc, $img, 0 , 0 , $cortePixels , $cortePixels , 256, 256); + imagepng($imgc,$nome); + } + chmod($nome,0777); header('Content-Length: '.filesize($nome)); header('Content-Type: image/png'); header('Cache-Control: max-age=3600, must-revalidate'); @@ -819,15 +967,15 @@ function salvaCacheImagem($cachedir,$map,$tms){ header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200); fpassthru(fopen($nome, 'rb')); exit; -} -function texto2iso($texto){ - if (function_exists("mb_convert_encoding")){ - if (mb_detect_encoding($texto,"UTF-8",true)){ - $texto = mb_convert_encoding($texto,"ISO-8859-1","UTF-8"); - } - } - return $texto; -} +} +function texto2iso($texto){ + if (function_exists("mb_convert_encoding")){ + if (mb_detect_encoding($texto,"UTF-8",true)){ + $texto = mb_convert_encoding($texto,"ISO-8859-1","UTF-8"); + } + } + return $texto; +} function nomeRand($n=10) { $nomes = ""; @@ -836,32 +984,44 @@ function nomeRand($n=10) for($i=0; $i < $n; ++$i) {$nomes .= $a{mt_rand(0, $max)};} return $nomes; -} -function renderNocacheTms(){ - global $img,$i3georendermode,$dir_tmp; - if($i3georendermode == 0 || !isset($i3georendermode)){ - $nomer = $dir_tmp."/temp".nomeRand().".png"; - $img->saveImage($nomer); - header('Content-Length: '.filesize($nomer)); - header('Content-Type: image/png'); - 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')); - } - if($i3georendermode == 1){ +} +function renderNocacheTms(){ + global $img,$i3georendermode,$dir_tmp,$cortePixels; + if($i3georendermode == 1 && $cortePixels == 0){ ob_clean(); header('Content-Type: image/png'); $img->saveImage(); + exit; + } + if($i3georendermode == 1 && $cortePixels > 0){ + $i3georendermode = 0; + } + $nomer = $dir_tmp."/temp".nomeRand().".png"; + $img->saveImage($nomer); + // + //corta a imagem gerada para voltar ao tamanho normal + // + if($cortePixels > 0){ + $img = imagecreatefrompng($nomer); + $imgc = imagecreate(256,256); + imagecopy( $imgc, $img, 0 , 0 , $cortePixels , $cortePixels , 256, 256 ); + imagepng($imgc,$nomer); + } + if($i3georendermode == 0 || !isset($i3georendermode)){ + + header('Content-Length: '.filesize($nomer)); + header('Content-Type: image/png'); + 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')); } if($i3georendermode == 2){ - $nomer = $dir_tmp."/temp".nomeRand().".png"; - $img->saveImage($nomer); ob_clean(); header('Cache-Control: public, max-age=22222222'); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+48*60*60) . ' GMT'); header("X-Sendfile: $nomer"); header("Content-type: image/png"); - } -} + } +} ?> -- libgit2 0.21.2