Commit 5a681e41224ea73dc784364f49966bb15fa9c9b2
1 parent
012feafb
Exists in
master
and in
7 other branches
Inclusão de rotina para geração e recuperação de imagens em cache em ogc.php e mashup openlayers
Showing
7 changed files
with
208 additions
and
101 deletions
Show diff stats
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ã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â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: "á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í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) && $fundo != ""){ |
| 140 | 140 | $fundo = str_replace(","," ",$fundo); |
| 141 | 141 | $fundo = explode(" ",$fundo); |
| 142 | 142 | } |
| 143 | - | |
| 144 | 143 | // |
| 145 | 144 | //define quais os layers que comporão o mapa |
| 146 | 145 | // |
| ... | ... | @@ -189,7 +188,8 @@ if($temas != ""){ |
| 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 != ""){ |
| 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&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ã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â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: "á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í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ã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â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: "á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í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__)."/classesphp/funcoes_gerais.php"); |
| 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=>$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) && !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")){ | ... | ... |