Commit e31a03a6635baeebea38fb480fa8d1435c401983
1 parent
9d255116
Exists in
master
and in
7 other branches
V 6 - inclusão da rotina de corte de imagens no gerador de serviços OGC
Showing
5 changed files
with
123 additions
and
43 deletions
Show diff stats
admin/admin.db
No preview for this file type
classesphp/mapa_openlayers.php
... | ... | @@ -203,11 +203,11 @@ if(isset($_GET["map_size"])){ |
203 | 203 | $map_size = explode(" ",$_GET["map_size"]); |
204 | 204 | $mapa->setsize($map_size[0],$map_size[1]); |
205 | 205 | } |
206 | + | |
206 | 207 | if(isset($_GET["mapext"])){ |
207 | 208 | $mapext = explode(" ",$_GET["mapext"]); |
208 | 209 | $mapa->setExtent($mapext[0],$mapext[1],$mapext[2],$mapext[3]); |
209 | 210 | } |
210 | - | |
211 | 211 | // |
212 | 212 | //qd a cahamda e para um WMS, redireciona para ogc.php |
213 | 213 | // |
... | ... | @@ -251,7 +251,8 @@ if($_GET["tipolayer"] != "fundo") |
251 | 251 | //antes de gerar a imagem |
252 | 252 | // |
253 | 253 | if($cortePixels > 0){ |
254 | - //$imagemBranco = $mapa->prepareImage(); | |
254 | + $mapa->prepareImage(); | |
255 | + echo $mapa->scaledenom;exit; | |
255 | 256 | $escalaInicial = $mapa->scaledenom; |
256 | 257 | $extensaoInicial = $mapa->extent; |
257 | 258 | $wh = 256+($cortePixels*2); |
... | ... | @@ -261,7 +262,6 @@ if($cortePixels > 0){ |
261 | 262 | $mapa->zoomScale($escalaInicial, $ponto, $wh, $wh, $extensaoInicial); |
262 | 263 | } |
263 | 264 | |
264 | - | |
265 | 265 | //se nao houver selecao |
266 | 266 | if($qy != true){ |
267 | 267 | $img = $mapa->draw(); |
... | ... | @@ -389,7 +389,7 @@ else{ |
389 | 389 | } |
390 | 390 | } |
391 | 391 | function salvaCacheImagem($cachedir,$map,$tms){ |
392 | - global $img,$cortePixels,$cortePixels; | |
392 | + global $img,$cortePixels; | |
393 | 393 | if($cachedir == ""){ |
394 | 394 | $nome = dirname(dirname($map))."/cache".$tms; |
395 | 395 | } |
... | ... | @@ -406,6 +406,11 @@ function salvaCacheImagem($cachedir,$map,$tms){ |
406 | 406 | if($cortePixels > 0){ |
407 | 407 | $img = imagecreatefrompng($nome); |
408 | 408 | $imgc = imagecreate(256,256); |
409 | + //@FIXME necessario, sem isso algumas imagens sao geradas de forma errada | |
410 | + imagesavealpha($imgc, true); | |
411 | + $color = imagecolorallocatealpha($imgc,0x00,0x00,0x00,127); | |
412 | + imagefill($imgc, 0, 0, $color); | |
413 | + | |
409 | 414 | imagecopy( $imgc, $img, 0 , 0 , $cortePixels , $cortePixels , 256, 256 ); |
410 | 415 | imagepng($imgc,$nome); |
411 | 416 | } | ... | ... |
mashups/openlayers.php
... | ... | @@ -461,7 +461,7 @@ i3GEO.editorOL.mapa = new OpenLayers.Map( |
461 | 461 | { |
462 | 462 | autoUpdateSize: false, |
463 | 463 | controls:[], |
464 | - 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] | |
464 | + 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] | |
465 | 465 | } |
466 | 466 | ); |
467 | 467 | i3GEO.editorOL.inicia(); | ... | ... |
ogc.php
... | ... | @@ -22,7 +22,7 @@ Este programa é distribuído na expectativa de que seja útil |
22 | 22 | porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita |
23 | 23 | de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. |
24 | 24 | Consulte a Licença Pública Geral do GNU para mais detalhes. |
25 | -Você deve ter recebido uma cópia da Licença Pública Geral do | |
25 | +Você deve ter recebido uma copia da Licença Pública Geral do | |
26 | 26 | GNU junto com este programa; se não, escreva para a |
27 | 27 | Free Software Foundation, Inc., no endereço |
28 | 28 | 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. |
... | ... | @@ -230,6 +230,8 @@ if(isset($_GET["DESLIGACACHE"]) && $_GET["DESLIGACACHE"] == "sim"){ |
230 | 230 | $nomeMapfileTmp = $dir_tmp."/ogc_".md5($tema)."_".$agora.".map"; |
231 | 231 | $nomeMapfileTmp = str_replace(",","",$nomeMapfileTmp); |
232 | 232 | $nomeMapfileTmp = str_replace(" ","",$nomeMapfileTmp); |
233 | +//essa variavel e usada para definir se a imagem final gerada devera ser cortada ou nao | |
234 | +$cortePixels = 0; | |
233 | 235 | if(file_exists($nomeMapfileTmp) && $tipo == ""){ |
234 | 236 | $oMap = ms_newMapobj($nomeMapfileTmp); |
235 | 237 | } |
... | ... | @@ -269,7 +271,7 @@ else{ |
269 | 271 | //para o caso do tema ser um arquivo mapfile existente em uma pasta qualquer |
270 | 272 | //$temai3geo = true indica que o layer será buscado na pasta i3geo/temas |
271 | 273 | $temai3geo = true; |
272 | - //FIXME não aceita gvp quando o caminho é completo | |
274 | + //FIXME nao aceita gvp quando o caminho e completo | |
273 | 275 | if(file_exists($_GET["tema"]) && !isset($id_medida_variavel)){ |
274 | 276 | $nmap = ms_newMapobj($_GET["tema"]); |
275 | 277 | $temai3geo = false; |
... | ... | @@ -293,7 +295,6 @@ else{ |
293 | 295 | if($teste != "" && $l->data == ""){ |
294 | 296 | $id_medida_variavel = $teste; |
295 | 297 | } |
296 | - | |
297 | 298 | } |
298 | 299 | if(isset($id_medida_variavel)){ |
299 | 300 | $temai3geo = false; |
... | ... | @@ -351,8 +352,7 @@ else{ |
351 | 352 | } |
352 | 353 | if($l->type == MS_LAYER_RASTER && $l->numclasses > 0){ |
353 | 354 | $c = $l->getclass(0); |
354 | - if($c->name == "") | |
355 | - { | |
355 | + if($c->name == ""){ | |
356 | 356 | $c->name = " "; |
357 | 357 | } |
358 | 358 | } |
... | ... | @@ -424,8 +424,7 @@ else{ |
424 | 424 | } |
425 | 425 | if($l->type == MS_LAYER_RASTER && $l->numclasses > 0){ |
426 | 426 | $c = $l->getclass(0); |
427 | - if($c->name == "") | |
428 | - { | |
427 | + if($c->name == ""){ | |
429 | 428 | $c->name = " "; |
430 | 429 | } |
431 | 430 | } |
... | ... | @@ -434,7 +433,13 @@ else{ |
434 | 433 | if($extensao == ""){ |
435 | 434 | $extensao = $extensaoMap; |
436 | 435 | } |
437 | - $l->setmetadata("wms_extent",$extensao); | |
436 | + $l->setmetadata("wms_extent",$extensao); | |
437 | + // | |
438 | + //numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos | |
439 | + // | |
440 | + if ($l->getmetadata("cortepixels") != ""){ | |
441 | + $cortePixels = $l->getmetadata("cortepixels"); | |
442 | + } | |
438 | 443 | } |
439 | 444 | $req->setParameter("LAYERS", implode(",",$layers)); |
440 | 445 | $req->setParameter("STYLES", ""); |
... | ... | @@ -486,8 +491,7 @@ else{ |
486 | 491 | if (($conta >= $int[0]) && ($conta <= $int[1])){ |
487 | 492 | $l = $nmap->getlayerbyname($t); |
488 | 493 | $extensao = $l->getmetadata("EXTENSAO"); |
489 | - if($extensao == "") | |
490 | - { | |
494 | + if($extensao == ""){ | |
491 | 495 | $extensao = $extensaoMap; |
492 | 496 | } |
493 | 497 | $l->setmetadata("wms_extent",$extensao); |
... | ... | @@ -512,8 +516,15 @@ else{ |
512 | 516 | $l->setmetadata("wms_attribution_logourl_width","50"); |
513 | 517 | $l->setmetadata("wms_attribution_logourl_href",$mini); |
514 | 518 | } |
519 | + // | |
520 | + //numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos | |
521 | + // | |
522 | + if ($l->getmetadata("cortepixels") != ""){ | |
523 | + $cortePixels = $l->getmetadata("cortepixels"); | |
524 | + } | |
515 | 525 | cloneInlineSymbol($l,$nmap,$oMap); |
516 | - ms_newLayerObj($oMap, $l); | |
526 | + ms_newLayerObj($oMap, $l); | |
527 | + | |
517 | 528 | } |
518 | 529 | } |
519 | 530 | } |
... | ... | @@ -537,12 +548,12 @@ else{ |
537 | 548 | } |
538 | 549 | if(ob_get_contents ()){ |
539 | 550 | ob_end_clean(); |
540 | -} | |
551 | +} | |
541 | 552 | // |
542 | 553 | //verifica se a requisicao e do tipo TMS. |
543 | 554 | // |
544 | 555 | // |
545 | -//calcula a extensao geografica com base no x,y,z em requisições TMS | |
556 | +//calcula a extensao geografica com base no x,y,z em requisisoes TMS | |
546 | 557 | //quando for do tipo tms $_GET["tms"] contem os parametros do tile |
547 | 558 | //essa rotina faz um exit ao final |
548 | 559 | //o cache tms so fucniona se houver apenas uma camada no mapa |
... | ... | @@ -563,11 +574,33 @@ if(isset($_GET["tms"])){ |
563 | 574 | if($cache == true){ |
564 | 575 | carregaCacheImagem($cachedir,$nomeMapfileTmp,$_GET["tms"]); |
565 | 576 | } |
577 | + $layer0 = $oMap->getlayer(0); | |
578 | + // | |
579 | + //numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos | |
580 | + // | |
581 | + if ($layer0->getmetadata("cortepixels") != ""){ | |
582 | + $cortePixels = $layer0->getmetadata("cortepixels"); | |
583 | + } | |
566 | 584 | //se nao existir, salva a imagem |
567 | 585 | //echo $lon1." ".$lat1." ".$lon2." ".$lat2;exit; |
568 | - $oMap->setExtent($lon1,$lat1,$lon2,$lat2); | |
569 | 586 | $oMap->setsize(256,256); |
570 | - $oMap->getlayer(0)->set("status",MS_DEFAULT); | |
587 | + $oMap->setExtent($lon1,$lat1,$lon2,$lat2); | |
588 | + | |
589 | + $layer0->set("status",MS_DEFAULT); | |
590 | + // | |
591 | + //se o layer foi marcado para corte altera os parametros para ampliar o mapa | |
592 | + //antes de gerar a imagem | |
593 | + // | |
594 | + if($cortePixels > 0){ | |
595 | + //$oMap->prepareImage(); | |
596 | + $escalaInicial = $oMap->scaledenom; | |
597 | + $extensaoInicial = $oMap->extent; | |
598 | + $wh = 256+($cortePixels*2); | |
599 | + $oMap->setsize($wh,$wh); | |
600 | + $ponto = new pointObj(); | |
601 | + $ponto->setxy(($wh/2),($wh/2)); | |
602 | + $oMap->zoomScale($escalaInicial, $ponto, $wh, $wh, $extensaoInicial); | |
603 | + } | |
571 | 604 | $img = $oMap->draw(); |
572 | 605 | if($img->imagepath == ""){ |
573 | 606 | exit; |
... | ... | @@ -585,6 +618,12 @@ if(isset($_GET["Z"]) && isset($_GET["X"])){ |
585 | 618 | $y = $_GET["Y"]; |
586 | 619 | $z = $_GET["Z"]; |
587 | 620 | $layer0 = $oMap->getlayer(0); |
621 | + // | |
622 | + //numero de pixels que serao considerados para corte da imagem no caso de cache ativo e tema de pontos | |
623 | + // | |
624 | + if ($layer0->getmetadata("cortepixels") != ""){ | |
625 | + $cortePixels = $layer0->getmetadata("cortepixels"); | |
626 | + } | |
588 | 627 | if($cache == true){ |
589 | 628 | carregaCacheImagem($cachedir,$nomeMapfileTmp,"/googlemaps/$layer0->name/$z/$x/$y"); |
590 | 629 | } |
... | ... | @@ -607,20 +646,30 @@ if(isset($_GET["Z"]) && isset($_GET["X"])){ |
607 | 646 | $poPoint2 = ms_newpointobj(); |
608 | 647 | $poPoint2->setXY($lon2, $lat2); |
609 | 648 | $poPoint2->project($projInObj, $projOutObj); |
649 | + $oMap->setsize(256,256); | |
610 | 650 | $oMap->setExtent($poPoint1->x,$poPoint1->y,$poPoint2->x,$poPoint2->y); |
611 | - $oMap->setsize(256,256); | |
651 | + | |
612 | 652 | $oMap->getlayer(0)->set("status",MS_DEFAULT); |
613 | 653 | $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"); |
614 | 654 | $layer0->setProjection("proj=latlong,a=6378137,b=6378137"); |
615 | - //$oMap->save(); | |
655 | + // | |
656 | + //se o layer foi marcado para corte altera os parametros para ampliar o mapa | |
657 | + //antes de gerar a imagem | |
658 | + // | |
659 | + if($cortePixels > 0){ | |
660 | + //$oMap->prepareImage(); | |
661 | + $escalaInicial = $oMap->scaledenom; | |
662 | + $extensaoInicial = $oMap->extent; | |
663 | + $wh = 256+($cortePixels*2); | |
664 | + $oMap->setsize($wh,$wh); | |
665 | + $ponto = new pointObj(); | |
666 | + $ponto->setxy(($wh/2),($wh/2)); | |
667 | + $oMap->zoomScale($escalaInicial, $ponto, $wh, $wh, $extensaoInicial); | |
668 | + } | |
616 | 669 | $img = $oMap->draw(); |
617 | 670 | if($img->imagepath == ""){ |
618 | 671 | exit; |
619 | 672 | } |
620 | - /** | |
621 | - * @TODO ativar cache | |
622 | - */ | |
623 | - | |
624 | 673 | if($cache == true){ |
625 | 674 | salvaCacheImagem($cachedir,$nomeMapfileTmp,"/googlemaps/$layer0->name/$z/$x/$y"); |
626 | 675 | } |
... | ... | @@ -701,8 +750,8 @@ function ogc_imprimeAjuda(){ |
701 | 750 | echo "Para escolher um tema, utilize:<br>"; |
702 | 751 | echo "ogc.php?lista=temas - para listar os temas disponíveis<br>"; |
703 | 752 | echo "Para usar esse web service, além dos parâmetros normais, vc deverá incluir o parâmetro &tema=,<br>"; |
704 | - echo "ou seja,http://[host]/i3geo/ogc.php?tema=[código do tema]<br>"; | |
705 | - 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<br><br>"; | |
753 | + echo "ou seja,http://[host]/i3geo/ogc.php?tema=[código do tema]<br>"; | |
754 | + 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<br><br>"; | |
706 | 755 | echo "Utilize o sistema de administração do i3Geo para configurar quais os temas da pasta i3geo/temas podem ser utilizados."; |
707 | 756 | echo "Utilize o parametro &intervalo=0,20 para definir o número de temas desejado na função getcapabilities."; |
708 | 757 | 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"; |
... | ... | @@ -800,7 +849,7 @@ function carregaCacheImagem($cachedir,$map,$tms){ |
800 | 849 | } |
801 | 850 | } |
802 | 851 | function salvaCacheImagem($cachedir,$map,$tms){ |
803 | - global $img,$dir_tmp; | |
852 | + global $img,$dir_tmp,$cortePixels; | |
804 | 853 | if($cachedir == ""){ |
805 | 854 | $nome = $dir_tmp."/cache".$tms; |
806 | 855 | } |
... | ... | @@ -810,8 +859,22 @@ function salvaCacheImagem($cachedir,$map,$tms){ |
810 | 859 | @mkdir(dirname($nome),0777,true); |
811 | 860 | chmod(dirname($nome),0777); |
812 | 861 | $img->saveImage($nome); |
813 | - chmod($nome,0777); | |
814 | - | |
862 | + // | |
863 | + //corta a imagem gerada para voltar ao tamanho normal | |
864 | + // | |
865 | + if($cortePixels > 0){ | |
866 | + $img = imagecreatefrompng($nome); | |
867 | + $imgc = imagecreate(256,256); | |
868 | + | |
869 | + imagesavealpha($imgc, true); | |
870 | + // Fill the image with transparent color | |
871 | + $color = imagecolorallocatealpha($imgc,0x00,0x00,0x00,127); | |
872 | + imagefill($imgc, 0, 0, $color); | |
873 | + | |
874 | + imagecopy($imgc, $img, 0 , 0 , $cortePixels , $cortePixels , 256, 256); | |
875 | + imagepng($imgc,$nome); | |
876 | + } | |
877 | + chmod($nome,0777); | |
815 | 878 | header('Content-Length: '.filesize($nome)); |
816 | 879 | header('Content-Type: image/png'); |
817 | 880 | header('Cache-Control: max-age=3600, must-revalidate'); |
... | ... | @@ -838,10 +901,29 @@ function nomeRand($n=10) |
838 | 901 | return $nomes; |
839 | 902 | } |
840 | 903 | function renderNocacheTms(){ |
841 | - global $img,$i3georendermode,$dir_tmp; | |
842 | - if($i3georendermode == 0 || !isset($i3georendermode)){ | |
843 | - $nomer = $dir_tmp."/temp".nomeRand().".png"; | |
844 | - $img->saveImage($nomer); | |
904 | + global $img,$i3georendermode,$dir_tmp,$cortePixels; | |
905 | + if($i3georendermode == 1 && $cortePixels == 0){ | |
906 | + ob_clean(); | |
907 | + header('Content-Type: image/png'); | |
908 | + $img->saveImage(); | |
909 | + exit; | |
910 | + } | |
911 | + if($i3georendermode == 1 && $cortePixels > 0){ | |
912 | + $i3georendermode = 0; | |
913 | + } | |
914 | + $nomer = $dir_tmp."/temp".nomeRand().".png"; | |
915 | + $img->saveImage($nomer); | |
916 | + // | |
917 | + //corta a imagem gerada para voltar ao tamanho normal | |
918 | + // | |
919 | + if($cortePixels > 0){ | |
920 | + $img = imagecreatefrompng($nomer); | |
921 | + $imgc = imagecreate(256,256); | |
922 | + imagecopy( $imgc, $img, 0 , 0 , $cortePixels , $cortePixels , 256, 256 ); | |
923 | + imagepng($imgc,$nomer); | |
924 | + } | |
925 | + if($i3georendermode == 0 || !isset($i3georendermode)){ | |
926 | + | |
845 | 927 | header('Content-Length: '.filesize($nomer)); |
846 | 928 | header('Content-Type: image/png'); |
847 | 929 | header('Cache-Control: max-age=3600, must-revalidate'); |
... | ... | @@ -849,14 +931,7 @@ function renderNocacheTms(){ |
849 | 931 | header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($nomer)).' GMT', true, 200); |
850 | 932 | fpassthru(fopen($nomer, 'rb')); |
851 | 933 | } |
852 | - if($i3georendermode == 1){ | |
853 | - ob_clean(); | |
854 | - header('Content-Type: image/png'); | |
855 | - $img->saveImage(); | |
856 | - } | |
857 | 934 | if($i3georendermode == 2){ |
858 | - $nomer = $dir_tmp."/temp".nomeRand().".png"; | |
859 | - $img->saveImage($nomer); | |
860 | 935 | ob_clean(); |
861 | 936 | header('Cache-Control: public, max-age=22222222'); |
862 | 937 | header('Expires: ' . gmdate('D, d M Y H:i:s', time()+48*60*60) . ' GMT'); | ... | ... |
temas/_lbiomashp.map