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