Commit 5a681e41224ea73dc784364f49966bb15fa9c9b2

Authored by Edmar Moretti
1 parent 012feafb

Inclusão de rotina para geração e recuperação de imagens em cache em ogc.php e mashup openlayers

admin/admin.db
No preview for this file type
classesphp/mapa_openlayers.php
... ... @@ -334,28 +334,6 @@ function carregaCacheImagem($cachedir,$map,$tms){
334 334 exit;
335 335 }
336 336 }
337   -function XcarregaCacheImagem($cachedir,$bbox,$layer,$map,$w,$h){
338   - if($layer == "copyright" || $layer == "")
339   - {$bbox = "";}
340   - if($layer == "")
341   - {$layer = "fundo";}
342   - $nome = $w.$h.$bbox.".png";
343   - if($cachedir == "")
344   - {$nome = dirname(dirname($map))."/cache/".$layer."/".$nome;}
345   - else
346   - {$nome = $cachedir."/".$layer."/".$nome;}
347   - if(file_exists($nome)){
348   - header('Content-Length: '.filesize($nome));
349   - header('Content-Type: image/png');
350   - header('Cache-Control: max-age=3600, must-revalidate');
351   - header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT');
352   - header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200);
353   - $etag = md5_file($nome);
354   - header('Etag: '.$etag);
355   - fpassthru(fopen($nome, 'rb'));
356   - exit;
357   - }
358   -}
359 337 function nomeRand($n=10)
360 338 {
361 339 $nomes = "";
... ...
mashups/openlayers.js
... ... @@ -204,7 +204,7 @@ i3GEO.editorOL = {
204 204 {i3GEO.editorOL.ativaLayerSwitcher();}
205 205 if(i3GEO.editorOL.ativarodadomouse === false)
206 206 {i3GEO.editorOL.desativaRodaDoMouse();}
207   -
  207 +
208 208 if(i3GEO.editorOL.numzoom !== ""){
209 209 i3GEO.editorOL.mapa.setOptions({
210 210 numZoomLevels: i3GEO.editorOL.numzoom
... ... @@ -277,6 +277,17 @@ i3GEO.editorOL = {
277 277 }
278 278 return ins;
279 279 },
  280 + layersClonados: function(paramsLayers){
  281 + var layers = i3GEO.editorOL.mapa.layers,
  282 + nlayers = layers.length,
  283 + ins = [],i;
  284 + for(i=0;i<nlayers;i++){
  285 + if(layers[i].params.CLONETMS === paramsLayers){
  286 + return(layers[i]);
  287 + }
  288 + }
  289 + return false;
  290 + },
280 291 coordenadas: function(){
281 292 //
282 293 //substitui o controle que mostra as coordenadas
... ... @@ -702,7 +713,7 @@ i3GEO.editorOL = {
702 713 button = new OpenLayers.Control.Button({
703 714 displayClass: "editorOLzoomtot",
704 715 trigger: function(){i3GEO.editorOL.mapa.zoomToMaxExtent();},
705   - title: "ajusta extens&atilde;o",
  716 + title: "ajusta extensao",
706 717 type: OpenLayers.Control.TYPE_BUTTON
707 718 });
708 719 controles.push(button);
... ... @@ -725,7 +736,7 @@ i3GEO.editorOL = {
725 736 handlerOptions: {layerOptions: {styleMap: styleMap}},
726 737 persist: true,
727 738 displayClass: "editorOLdistancia",
728   - title: "dist&acirc;ncia",
  739 + title: "distancia",
729 740 type: OpenLayers.Control.TYPE_TOOL
730 741 }
731 742 );
... ... @@ -746,7 +757,7 @@ i3GEO.editorOL = {
746 757 handlerOptions: {layerOptions: {styleMap: styleMap}},
747 758 persist: true,
748 759 displayClass: "editorOLarea",
749   - title: "&aacute;rea",
  760 + title: "area",
750 761 type: OpenLayers.Control.TYPE_TOOL
751 762 }
752 763 );
... ... @@ -771,6 +782,14 @@ i3GEO.editorOL = {
771 782 displayClass: "editorOLidentifica",
772 783 eventListeners: {
773 784 getfeatureinfo: function(event) {
  785 + var ativo = [i3GEO.editorOL.layerAtivo()];
  786 + //se for TMS tem de pegar o clone wms
  787 + if(ativo[0].CLASS_NAME == "OpenLayers.Layer.TMS"){
  788 + temp = i3GEO.editorOL.layersClonados(ativo[0].layername);
  789 + if(temp != ""){
  790 + temp.setVisibility(false);
  791 + }
  792 + }
774 793 var lonlat = i3GEO.editorOL.mapa.getLonLatFromPixel(event.xy),
775 794 lonlattexto = "<hr>",
776 795 formata;
... ... @@ -815,7 +834,15 @@ i3GEO.editorOL = {
815 834 ));
816 835 },
817 836 beforegetfeatureinfo: function(event){
818   - var ativo = [i3GEO.editorOL.layerAtivo()];
  837 + var temp,ativo = [i3GEO.editorOL.layerAtivo()];
  838 + //se for TMS tem de pegar o clone wms
  839 + if(ativo[0].CLASS_NAME == "OpenLayers.Layer.TMS"){
  840 + temp = i3GEO.editorOL.layersClonados(ativo[0].layername);
  841 + if(temp != ""){
  842 + temp.setVisibility(true);
  843 + ativo = [temp];
  844 + }
  845 + }
819 846 event.object.layers = ativo;
820 847 botaoIdentifica.layers = ativo;
821 848 botaoIdentifica.url = ativo[0].url;
... ... @@ -895,7 +922,7 @@ i3GEO.editorOL = {
895 922 OpenLayers.Handler.Polygon,
896 923 {
897 924 displayClass: "editorOLpoligono",
898   - title: "digitalizar pol&iacute;gono",
  925 + title: "digitalizar poligono",
899 926 type: OpenLayers.Control.TYPE_TOOL,
900 927 //handlerOptions: {holeModifier: "altKey"},
901 928 callbacks:{
... ...
mashups/openlayers.php
... ... @@ -140,7 +140,6 @@ if(isset($fundo) &amp;&amp; $fundo != &quot;&quot;){
140 140 $fundo = str_replace(","," ",$fundo);
141 141 $fundo = explode(" ",$fundo);
142 142 }
143   -
144 143 //
145 144 //define quais os layers que compor&atilde;o o mapa
146 145 //
... ... @@ -189,7 +188,8 @@ if($temas != &quot;&quot;){
189 188 $layers = array();
190 189 $maptemp = @ms_newMapObj($nomeMap);
191 190 if($maptemp){
192   - for($i=0;$i<($maptemp->numlayers);++$i) {
  191 + $nlayers = $maptemp->numlayers;
  192 + for($i=0;$i<($nlayers);++$i) {
193 193 $layern = $maptemp->getLayer($i);
194 194 $layers[] = $layern->name;
195 195 }
... ... @@ -204,7 +204,17 @@ if($temas != &quot;&quot;){
204 204 $visivel = "false";
205 205 if(in_array($tema,$visiveis))
206 206 {$visivel = "true";}
207   - $objOpenLayers[] = 'new OpenLayers.Layer.WMS( "'.$tituloLayer.'", "../ogc.php?tema='.$tema.'&",{layers:"'.$nomeLayer.'",transparent: "true", format: "image/png"},{singleTile:true,visibility:'.$visivel.',isBaseLayer:'.$ebase.'})';
  207 + if($nlayers == 1 && strtoupper($layern->getmetadata("cache")) == "SIM"){
  208 + //nesse caso o layer e adicionado como TMS
  209 + //tms leva os parametros do TMS
  210 + $objOpenLayers[] = 'new OpenLayers.Layer.TMS("'.$tituloLayer.'", "../ogc.php?tema='.$tema.'",{tileOrigin: new OpenLayers.LonLat(-180, -90),serviceVersion:"&tms=",visibility:'.$visivel.',isBaseLayer:'.$ebase.',layername:"'.$nomeLayer.'",type:"png"})';
  211 + //cria um clone WMS para efeitos de getfeatureinfo
  212 + $objOpenLayers[] = 'new OpenLayers.Layer.WMS( "'.$tituloLayer.'", "../ogc.php?tema='.$tema.'&",{cloneTMS:"'.$nomeLayer.'",layers:"'.$nomeLayer.'",transparent: "true", format: "image/png"},{displayInLayerSwitcher:false,singleTile:true,visibility:false,isBaseLayer:false})';
  213 + }
  214 + else{
  215 + $objOpenLayers[] = 'new OpenLayers.Layer.WMS( "'.$tituloLayer.'", "../ogc.php?tema='.$tema.'&",{layers:"'.$nomeLayer.'",transparent: "true", format: "image/png"},{singleTile:true,visibility:'.$visivel.',isBaseLayer:'.$ebase.'})';
  216 + }
  217 + //var_dump($objOpenLayers);exit;
208 218 }
209 219 }
210 220 else
... ... @@ -313,18 +323,19 @@ Par&amp;acirc;metros:
313 323 <script type="text/javascript" src="../pacotes/yui290/build/dragdrop/dragdrop-min.js"></script>
314 324 <script type="text/javascript" src="../pacotes/yui290/build/container/container-min.js"></script>
315 325 <script type="text/javascript" src="../classesjs/compactados/classe_calculo_compacto.js"></script>
  326 +<script type="text/javascript" src="../classesjs/compactados/classe_util_compacto.js"></script>
316 327 <script type="text/javascript" src="../pacotes/openlayers/OpenLayers211.js"></script>
317 328 <script type="text/javascript" src="openlayers.js"></script>
318   -
  329 +<link rel="stylesheet" href="theme/default/style.css" type="text/css" />
  330 +<link rel="stylesheet" href="openlayers.css" type="text/css" />
319 331 -->
  332 +
  333 +
320 334 <script type="text/javascript" src="openlayers_compacto.js.php"></script>
321 335 <script type="text/javascript" src="../classesjs/compactados/classe_util_compacto.js"></script>
322 336 <link rel="stylesheet" href="openlayers_compacto.css" type="text/css" />
323 337  
324   -<!--
325   -<link rel="stylesheet" href="theme/default/style.css" type="text/css" />
326   -<link rel="stylesheet" href="openlayers.css" type="text/css" />
327   --->
  338 +
328 339 <style>
329 340 .yui-skin-sam .container-minimiza {
330 341 background:transparent url(../pacotes/yui290/build/assets/skins/sam/sprite.png) no-repeat scroll 0 -450px;
... ... @@ -433,7 +444,7 @@ i3GEO.editorOL.mapa = new OpenLayers.Map(
433 444 'i3geoMapa',
434 445 {
435 446 controls:[],
436   - resolutions:[0.703125,0.3515625,0.17578125,0.087890625,0.0439453125,0.02197265625,0.010986328125,0.0054931640625,0.00274658203125,0.001373291015625,0.0006866455078125,0.00034332275390625,0.000171661376953125,0.0000858306884765625,0.00004291534423828125,0.000021457672119140625]
  447 + resolutions: [0.703125,0.3515625,0.17578125,0.087890625,0.0439453125,0.02197265625,0.010986328125,0.0054931640625,0.00274658203125,0.001373291015625,0.0006866455078125,0.00034332275390625,0.000171661376953125,0.0000858306884765625,0.00004291534423828125,0.000021457672119140625,0.000010728836059570312,0.000005364418029785156,0.000002682209014892578]
437 448 }
438 449 );
439 450 i3GEO.editorOL.inicia();
... ...
mashups/openlayers_compacto.js
... ... @@ -3290,6 +3290,17 @@ ins.push(layers[i]);
3290 3290 }
3291 3291 return ins;
3292 3292 },
  3293 +layersClonados: function(paramsLayers){
  3294 +var layers = i3GEO.editorOL.mapa.layers,
  3295 +nlayers = layers.length,
  3296 +ins = [],i;
  3297 +for(i=0;i<nlayers;i++){
  3298 +if(layers[i].params.CLONETMS === paramsLayers){
  3299 +return(layers[i]);
  3300 +}
  3301 +}
  3302 +return false;
  3303 +},
3293 3304 coordenadas: function(){
3294 3305 //
3295 3306 //substitui o controle que mostra as coordenadas
... ... @@ -3710,7 +3721,7 @@ if(botoes.zoomtot===true){
3710 3721 button = new OpenLayers.Control.Button({
3711 3722 displayClass: "editorOLzoomtot",
3712 3723 trigger: function(){i3GEO.editorOL.mapa.zoomToMaxExtent();},
3713   -title: "ajusta extens&atilde;o",
  3724 +title: "ajusta extensao",
3714 3725 type: OpenLayers.Control.TYPE_BUTTON
3715 3726 });
3716 3727 controles.push(button);
... ... @@ -3733,7 +3744,7 @@ OpenLayers.Handler.Path,
3733 3744 handlerOptions: {layerOptions: {styleMap: styleMap}},
3734 3745 persist: true,
3735 3746 displayClass: "editorOLdistancia",
3736   -title: "dist&acirc;ncia",
  3747 +title: "distancia",
3737 3748 type: OpenLayers.Control.TYPE_TOOL
3738 3749 }
3739 3750 );
... ... @@ -3754,7 +3765,7 @@ OpenLayers.Handler.Polygon,
3754 3765 handlerOptions: {layerOptions: {styleMap: styleMap}},
3755 3766 persist: true,
3756 3767 displayClass: "editorOLarea",
3757   -title: "&aacute;rea",
  3768 +title: "area",
3758 3769 type: OpenLayers.Control.TYPE_TOOL
3759 3770 }
3760 3771 );
... ... @@ -3779,6 +3790,14 @@ type: OpenLayers.Control.TYPE_TOOL,
3779 3790 displayClass: "editorOLidentifica",
3780 3791 eventListeners: {
3781 3792 getfeatureinfo: function(event) {
  3793 +var ativo = [i3GEO.editorOL.layerAtivo()];
  3794 +//se for TMS tem de pegar o clone wms
  3795 +if(ativo[0].CLASS_NAME == "OpenLayers.Layer.TMS"){
  3796 +temp = i3GEO.editorOL.layersClonados(ativo[0].layername);
  3797 +if(temp != ""){
  3798 +temp.setVisibility(false);
  3799 +}
  3800 +}
3782 3801 var lonlat = i3GEO.editorOL.mapa.getLonLatFromPixel(event.xy),
3783 3802 lonlattexto = "<hr>",
3784 3803 formata;
... ... @@ -3823,7 +3842,15 @@ true
3823 3842 ));
3824 3843 },
3825 3844 beforegetfeatureinfo: function(event){
3826   -var ativo = [i3GEO.editorOL.layerAtivo()];
  3845 +var temp,ativo = [i3GEO.editorOL.layerAtivo()];
  3846 +//se for TMS tem de pegar o clone wms
  3847 +if(ativo[0].CLASS_NAME == "OpenLayers.Layer.TMS"){
  3848 +temp = i3GEO.editorOL.layersClonados(ativo[0].layername);
  3849 +if(temp != ""){
  3850 +temp.setVisibility(true);
  3851 +ativo = [temp];
  3852 +}
  3853 +}
3827 3854 event.object.layers = ativo;
3828 3855 botaoIdentifica.layers = ativo;
3829 3856 botaoIdentifica.url = ativo[0].url;
... ... @@ -3903,7 +3930,7 @@ i3GEO.editorOL.layergrafico,
3903 3930 OpenLayers.Handler.Polygon,
3904 3931 {
3905 3932 displayClass: "editorOLpoligono",
3906   -title: "digitalizar pol&iacute;gono",
  3933 +title: "digitalizar poligono",
3907 3934 type: OpenLayers.Control.TYPE_TOOL,
3908 3935 //handlerOptions: {holeModifier: "altKey"},
3909 3936 callbacks:{
... ...
mashups/openlayers_compacto.js.php
... ... @@ -3290,6 +3290,17 @@ ins.push(layers[i]);
3290 3290 }
3291 3291 return ins;
3292 3292 },
  3293 +layersClonados: function(paramsLayers){
  3294 +var layers = i3GEO.editorOL.mapa.layers,
  3295 +nlayers = layers.length,
  3296 +ins = [],i;
  3297 +for(i=0;i<nlayers;i++){
  3298 +if(layers[i].params.CLONETMS === paramsLayers){
  3299 +return(layers[i]);
  3300 +}
  3301 +}
  3302 +return false;
  3303 +},
3293 3304 coordenadas: function(){
3294 3305 //
3295 3306 //substitui o controle que mostra as coordenadas
... ... @@ -3710,7 +3721,7 @@ if(botoes.zoomtot===true){
3710 3721 button = new OpenLayers.Control.Button({
3711 3722 displayClass: "editorOLzoomtot",
3712 3723 trigger: function(){i3GEO.editorOL.mapa.zoomToMaxExtent();},
3713   -title: "ajusta extens&atilde;o",
  3724 +title: "ajusta extensao",
3714 3725 type: OpenLayers.Control.TYPE_BUTTON
3715 3726 });
3716 3727 controles.push(button);
... ... @@ -3733,7 +3744,7 @@ OpenLayers.Handler.Path,
3733 3744 handlerOptions: {layerOptions: {styleMap: styleMap}},
3734 3745 persist: true,
3735 3746 displayClass: "editorOLdistancia",
3736   -title: "dist&acirc;ncia",
  3747 +title: "distancia",
3737 3748 type: OpenLayers.Control.TYPE_TOOL
3738 3749 }
3739 3750 );
... ... @@ -3754,7 +3765,7 @@ OpenLayers.Handler.Polygon,
3754 3765 handlerOptions: {layerOptions: {styleMap: styleMap}},
3755 3766 persist: true,
3756 3767 displayClass: "editorOLarea",
3757   -title: "&aacute;rea",
  3768 +title: "area",
3758 3769 type: OpenLayers.Control.TYPE_TOOL
3759 3770 }
3760 3771 );
... ... @@ -3779,6 +3790,14 @@ type: OpenLayers.Control.TYPE_TOOL,
3779 3790 displayClass: "editorOLidentifica",
3780 3791 eventListeners: {
3781 3792 getfeatureinfo: function(event) {
  3793 +var ativo = [i3GEO.editorOL.layerAtivo()];
  3794 +//se for TMS tem de pegar o clone wms
  3795 +if(ativo[0].CLASS_NAME == "OpenLayers.Layer.TMS"){
  3796 +temp = i3GEO.editorOL.layersClonados(ativo[0].layername);
  3797 +if(temp != ""){
  3798 +temp.setVisibility(false);
  3799 +}
  3800 +}
3782 3801 var lonlat = i3GEO.editorOL.mapa.getLonLatFromPixel(event.xy),
3783 3802 lonlattexto = "<hr>",
3784 3803 formata;
... ... @@ -3823,7 +3842,15 @@ true
3823 3842 ));
3824 3843 },
3825 3844 beforegetfeatureinfo: function(event){
3826   -var ativo = [i3GEO.editorOL.layerAtivo()];
  3845 +var temp,ativo = [i3GEO.editorOL.layerAtivo()];
  3846 +//se for TMS tem de pegar o clone wms
  3847 +if(ativo[0].CLASS_NAME == "OpenLayers.Layer.TMS"){
  3848 +temp = i3GEO.editorOL.layersClonados(ativo[0].layername);
  3849 +if(temp != ""){
  3850 +temp.setVisibility(true);
  3851 +ativo = [temp];
  3852 +}
  3853 +}
3827 3854 event.object.layers = ativo;
3828 3855 botaoIdentifica.layers = ativo;
3829 3856 botaoIdentifica.url = ativo[0].url;
... ... @@ -3903,7 +3930,7 @@ i3GEO.editorOL.layergrafico,
3903 3930 OpenLayers.Handler.Polygon,
3904 3931 {
3905 3932 displayClass: "editorOLpoligono",
3906   -title: "digitalizar pol&iacute;gono",
  3933 +title: "digitalizar poligono",
3907 3934 type: OpenLayers.Control.TYPE_TOOL,
3908 3935 //handlerOptions: {holeModifier: "altKey"},
3909 3936 callbacks:{
... ...
ogc.php
... ... @@ -120,7 +120,7 @@ include(dirname(__FILE__).&quot;/classesphp/funcoes_gerais.php&quot;);
120 120 error_reporting(0);
121 121 $versao = versao();
122 122 $versao = $versao["principal"];
123   -$req = ms_newowsrequestobj();
  123 +$req = ms_newowsrequestobj();
124 124 $tipo = "";
125 125 $_GET = array_merge($_GET,$_POST);
126 126 if(isset($_GET["sld"]) || isset($_GET["filter"])){
... ... @@ -135,12 +135,10 @@ foreach ($_GET as $k=&gt;$v){
135 135 $tipo = "metadados";
136 136 $cache = false;
137 137 }
138   - if(strtolower($k) == "layers" && empty($_GET["tema"]))
139   - {
  138 + if(strtolower($k) == "layers" && empty($_GET["tema"])){
140 139 $tema = $v;
141 140 }
142   - if(strtolower($k) == "layer" && empty($_GET["tema"]))
143   - {
  141 + if(strtolower($k) == "layer" && empty($_GET["tema"])){
144 142 $tema = $v;
145 143 }
146 144 }
... ... @@ -162,17 +160,6 @@ if(isset($version) &amp;&amp; !isset($VERSION)){
162 160 if(!isset($VERSION)){
163 161 $req->setParameter("VeRsIoN","1.0.0");
164 162 }
165   -/*
166   -$n = $req->numparams;
167   -for($i=0;$i<$n;$i++){
168   - echo $req->getName($i);
169   - echo "=";
170   - echo $req->getValue($i);
171   - echo "<br>";
172   -}
173   -exit;
174   -*/
175   -
176 163 if (!isset($intervalo)){
177 164 $intervalo = "0,5000";
178 165 }
... ... @@ -190,7 +177,6 @@ if(!isset($tema)){
190 177 $nomeMapfileTmp = $dir_tmp."/ogc_".md5($tema).".map";
191 178 $nomeMapfileTmp = str_replace(",","",$nomeMapfileTmp);
192 179 $nomeMapfileTmp = str_replace(" ","",$nomeMapfileTmp);
193   -
194 180 if(file_exists($nomeMapfileTmp) && $tipo == ""){
195 181 $oMap = ms_newMapobj($nomeMapfileTmp);
196 182 }
... ... @@ -461,21 +447,63 @@ else{
461 447 $oMap->setFontSet($locaplic."/symbols/".basename($oMap->fontsetfilename));
462 448 $oMap->save($nomeMapfileTmp);
463 449 }
464   -if($cache == true){
465   -
  450 +//
  451 +//verifica se a requisicao e do tipo TMS. Se for, tenta gerar ou usar o cache
  452 +//
  453 +//
  454 +//calcula a extensao geografica com base no x,y,z em requisições TMS
  455 +//quando for do tipo tms $_GET["tms"] contem os parametros do tile
  456 +//essa rotina faz um exit ao final
  457 +//o cache tms so fucniona se houver apenas uma camada no mapa
  458 +//tms e usado basicamente por mashup
  459 +//
  460 +if(isset($_GET["tms"])){
  461 + $temp = explode("/",$_GET["tms"]);
  462 + $z = $temp[2];
  463 + $x = $temp[3];
  464 + $y = str_replace(".png","",$temp[4]);
  465 + $n = pow(2,$z+1);
  466 + $lon1 = $x / $n * 360.0 - 180.0;
  467 + $lon2 = ($x+1) / $n * 360.0 - 180.0;
  468 + $n = pow(2,$z);
  469 + $lat1 = $y / $n * 180.0 - 90.0;
  470 + $lat2 = ($y+1) / $n * 180.0 - 90.0;
  471 + //essa funcao termina o processo se a imagem existir
  472 + //carregaCacheImagem($cachedir,$nomeMapfileTmp,$_GET["tms"]);
  473 + //se nao existir, salva a imagem
  474 + //echo $lon1." ".$lat1." ".$lon2." ".$lat2;exit;
  475 + $oMap->setExtent($lon1,$lat1,$lon2,$lat2);
  476 + $oMap->setsize(256,256);
  477 + $oMap->getlayer(0)->set("status",MS_DEFAULT);
  478 + $img = $oMap->draw();
  479 + if($img->imagepath == ""){
  480 + exit;
  481 + }
  482 + salvaCacheImagem($cachedir,$nomeMapfileTmp,$_GET["tms"]);
  483 +}
  484 +if(strtolower($req->getValueByName("REQUEST")) == "getlegendgraphic"){
  485 + $l = $oMap->getlayer(0);
  486 + if($req->getValueByName("LAYER") == ""){
  487 + $req->setParameter("LAYER",$l->name);
  488 + }
  489 + if($req->getValueByName("FORMAT") == ""){
  490 + $req->setParameter("FORMAT","image/png");
  491 + }
  492 +}
  493 +if(strtolower($req->getValueByName("REQUEST")) == "getfeature"){
  494 + $l = $oMap->getlayer(0);
  495 + if($req->getValueByName("TYPENAME") == "" || $req->getValueByName("TYPENAME") == "undefined"){
  496 + $req->setParameter("TYPENAME",$l->name);
  497 + }
466 498 }
467   -
468 499 //
469 500 //altera os caminhos das imagens
470 501 //
471 502 if((isset($legenda)) && (strtolower($legenda) == "sim")){
472 503 $leg = $oMap->legend;
473 504 $leg->set("status",MS_EMBED);
474   - $cache = false;
475 505 }
476   -
477   -ms_ioinstallstdouttobuffer();
478   -
  506 +ms_ioinstallstdouttobuffer();
479 507 $oMap->owsdispatch($req);
480 508 $contenttype = ms_iostripstdoutbuffercontenttype();
481 509 if(strtolower($request) == "getcapabilities"){
... ... @@ -585,37 +613,46 @@ function ogc_imprimeListaDeTemasWfs(){
585 613 }
586 614 echo $imprimir."</body></html>";
587 615 }
588   -//FIXME cache fora do novo padrao de xyz
589   -function carregaCacheImagem($bbox,$layer,$w,$h,$cachedir=""){
590   - global $dir_tmp;
591   - $nome = $w.$h.$bbox.".png";
592   - if($cachedir == "")
593   - {
594   - $nome = $dir_tmp."/cache/".$layer."/".$nome;
595   - }
596   - else
597   - {$nome = $cachedir."/".$layer."/".$nome;
598   - }
599   - if(file_exists($nome)){
600   - ob_start();
601   - // assuming you have image data in $imagedata
602   - $img = file_get_contents($nome);
603   - $length = strlen($img);
604   - $ft = filemtime($nome);
605   - if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && (strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]) == $ft)) {
606   - // Client's cache IS current, so we just respond '304 Not Modified'.
607   - header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ft).' GMT', true, 304);
608   - } else {
609   - // Image not cached or cache outdated, we respond '200 OK' and output the image.
610   - header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ft).' GMT', true, 200);
611   - }
612   - header('Accept-Ranges: bytes');
613   - header('Content-Length: '.$length);
614   - header('Content-Type: image/png');
615   - print($img);
616   - ob_end_flush();
617   - exit;
  616 +function carregaCacheImagem($cachedir,$map,$tms){
  617 + global $dir_tmp;
  618 + if($cachedir == ""){
  619 + $nome = $dir_tmp."/cache".$tms;
  620 + }
  621 + else{
  622 + $nome = $cachedir.$tms;
  623 + }
  624 + if(file_exists($nome)){
  625 + header('Content-Length: '.filesize($nome));
  626 + header('Content-Type: image/png');
  627 + header('Cache-Control: max-age=3600, must-revalidate');
  628 + header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT');
  629 + header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200);
  630 + $etag = md5_file($nome);
  631 + header('Etag: '.$etag);
  632 + fpassthru(fopen($nome, 'rb'));
  633 + exit;
  634 + }
  635 +}
  636 +function salvaCacheImagem($cachedir,$map,$tms){
  637 + global $img,$dir_tmp;
  638 + if($cachedir == ""){
  639 + $nome = $dir_tmp."/cache".$tms;
618 640 }
  641 + else{
  642 + $nome = $cachedir.$tms;
  643 + }
  644 + @mkdir(dirname($nome),0777,true);
  645 + chmod(dirname($nome),0777);
  646 + $img->saveImage($nome);
  647 + chmod($nome,0777);
  648 +
  649 + header('Content-Length: '.filesize($nome));
  650 + header('Content-Type: image/png');
  651 + header('Cache-Control: max-age=3600, must-revalidate');
  652 + header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT');
  653 + header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nome)).' GMT', true, 200);
  654 + fpassthru(fopen($nome, 'rb'));
  655 + exit;
619 656 }
620 657 function texto2iso($texto){
621 658 if (function_exists("mb_convert_encoding")){
... ...