O arquivo gif é gerado na pasta temporária e reaproveitado como cache
Parâmetros:
&tema = código do tema (mapfile) existente em i3geo/temas
&colunat = coluna da tabela de atributos do tema que contém o período.
Essa coluna será utilizada para gerar o filtro para o desenho de cada frame que comporá o gif
&tempo = tempo em milisegundos entre cada frame
&w = largura da imagem em pixels
&h = altura da imagem em pixels
&cache = sim|nao utiliza cache do arquivo gif?
&mapext = extensão geográfica xmin,ymin,xmax,ymax que será usada nas imagens
&legenda = sim|nao
&transparente = sim|nao
&operador = operador que será utilizado no filtro. Por default utilza-se 'igual a'. Pode ser ainda lt (menor que) ou gt (maior que)
&nulos = lista de valores, separados por ',' que não serão considerados ao aplicar o filtro, por exemplo &nulos=-, ,0
&tipocolunat = string|numero tipo de dados existentes na coluna que contém os valores para o filtro
O tema pode ter parâmetros já armazenados no METADATA animagif, criado pelo formulário do i3Geo.
Para forçar o uso desses parâmetros, basta passar &colunat como vazio.
";
exit;
}
//http://localhost/i3geo/ferramentas/animagif/exec.php?operador=lt&nulos=-&transparente=nao&legenda=sim&tema=_llocalianimagif&colunat=ANOCRIA&w=500&h=500&mapext=-74%20-32%20-34%204
//http://localhost:8014/i3geo/ferramentas/animagif/exec.php?transparente=nao&legenda=sim&tema=dengue_casos_provaveis&colunat=semana_ano_epidemiologico&w=500&h=500&mapext=-74%20-32%20-34%204
//http://localhost/i3geo/ferramentas/animagif/exec.php?nulos=-,0&transparente=sim&legenda=nao&tema=_llocalianimagif&colunat=ANOCRIA&w=500&h=500&mapext=-74%20-32%20-34%204&tipocolunat=string
include("../../ms_configura.php");
include("../blacklist.php");
verificaBlFerramentas(basename(dirname(__FILE__)),$i3geoBlFerramentas,false);
include("../../classesphp/funcoes_gerais.php");
include("../../classesphp/carrega_ext.php");
include_once (dirname(__FILE__)."/../../classesphp/sani_request.php");
$_GET = array_merge($_GET,$_POST);
//
//verifica se existem parametros definidos no proprio mapfile
//
if(empty($_GET["colunat"])){
$nmapa = ms_newMapObj($locaplic."/temas/".$_GET["tema"].".map");
$layer = $nmapa->getlayerbyname($_GET["tema"]);
$animagif = $layer->getmetadata("animagif");
$animagif = json_decode(str_replace("'",'"',$animagif),true);
$_GET["colunat"] = $animagif["colunat"];
$_GET["tempo"] = $animagif["tempo"];
$_GET["w"] = $animagif["w"];
$_GET["h"] = $animagif["h"];
$_GET["cache"] = $animagif["cache"];
$_GET["mapext"] = $animagif["mapext"];
$_GET["legenda"] = $animagif["legenda"];
$_GET["transparente"] = $animagif["transparente"];
$_GET["operador"] = $animagif["operador"];
$_GET["nulos"] = $animagif["nulos"];
$_GET["tipocolunat"] = $animagif["tipocolunat"];
}
//podem vir da url tbm
$tema = $_GET["tema"];
$colunat = $_GET["colunat"];
$tempo = $_GET["tempo"];
$w = $_GET["w"];
$h = $_GET["h"];
$cache = $_GET["cache"];
$mapext = $_GET["mapext"];
$legenda = $_GET["legenda"];
$transparente = $_GET["transparente"];
$operador = $_GET["operador"];
$nulos = $_GET["nulos"];
$tipocolunat = $_GET["tipocolunat"];
$v = versao();
$vi = $v["inteiro"];
$v = $v["principal"];
if($cache == "nao"){
$nometemp = nomeRandomico();
} else {
$nometemp = md5(implode("",$_GET));
}
$nometemp = "animagif".$nometemp;
if(empty($tempo)){
$tempo = 40;
}
if(empty($w)){
$w = 500;
}
if(empty($h)){
$h = 500;
}
if(empty($nulos)){
$nulos = "";
}
if(empty($tipocolunat)){
$tipocolunat = "string";
}
if(empty($operador)){
$operador = "=";
}
else{
if($operador == "lt"){
$operador = "<";
} elseif ($operador == "gt"){
$operador = ">";
}
}
if(!in_array($operador,array("=","<",">"))){
exit;
}
$nulos = explode(",",$nulos);
$arqtemp = $dir_tmp."/".$nometemp;
if(file_exists($arqtemp.".gif")){
if(getimagesize($arqtemp.".gif") == false){
echo "";
exit;
}
$gifBinary = file_get_contents($arqtemp.".gif");
//retorna o gif para o navegador
header('Content-type: image/gif');
header('Content-Disposition: filename="'.$tema.'.gif"');
echo $gifBinary;
exit;
}
//
//carrega o phpmapscript
//
if (!function_exists('ms_GetVersion')){
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')){
if(!@dl('php_mapscript_48.dll'))
dl('php_mapscript.dll');
}
else{
dl('php_mapscript.so');
}
}
$versao = versao();
$versao = $versao["principal"];
//cria um mapa temporario
//base vem de ms_configura
if($base == "" or !isset($base)){
$base = "";
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')){
$base = $locaplic."/aplicmap/geral1windowsv".$versao.".map";
}
else{
if($base == "" && file_exists('/var/www/i3geo/aplicmap/geral1debianv'.$versao.'.map')){
$base = "/var/www/i3geo/aplicmap/geral1debianv".$versao.".map";
}
if($base == "" && file_exists('/var/www/html/i3geo/aplicmap/geral1fedorav'.$versao.'.map')){
$base = "/var/www/html/i3geo/aplicmap/geral1fedorav".$versao.".map";
}
if($base == "" && file_exists('/opt/www/html/i3geo/aplicmap/geral1fedorav'.$versao.'.map')){
$base = "/opt/www/html/i3geo/aplicmap/geral1v".$versao.".map";
}
if($base == ""){
$base = $locaplic."/aplicmap/geral1v".$versao.".map";
}
}
}
else{
if(!file_exists($base)){
$base = $locaplic."/aplicmap/".$base;
}
}
//desenv /var/www/html/i3geo/i3geo/sage/camadas/base_linux.map
$mapa = ms_newMapObj($base);
//remove as camadas do mapa base
$numlayers = $mapa->numlayers;
for ($i=0;$i < $numlayers;$i++){
$layern = $mapa->getlayer($i);
if($layern->name != "copyright"){
$layern->set("status",MS_DELETE);
}
else{
$layern->set("status",MS_DEFAULT);
}
}
//ajusta o label
$copyright = $mapa->getlayerbyname("copyright");
if($copyright != ""){
$classe = $copyright->getclass(0);
if($vi >= 60200){
$label = $classe->getLabel(0);
}
else{
$label = $classe->label;
}
$label->updatefromstring("LABEL TYPE TRUETYPE END");
$label->set("font","arial");
$label->set("size",15);
$label->updatefromstring("LABEL POSITION lr END");
$label->updatefromstring('LABEL STYLE GEOMTRANSFORM "labelpoly" COLOR 255 255 255 END END');
}
//adiciona ao mapa base as camadas do mapfile indicado em $tema
$nmapa = ms_newMapObj($locaplic."/temas/".$tema.".map");
$numlayers = $nmapa->numlayers;
for ($i=0;$i < $numlayers;$i++){
$layern = $nmapa->getlayer($i);
$layern->set("status",MS_DEFAULT);
if (!empty($postgis_mapa)){
if ($layern->connectiontype == MS_POSTGIS){
$lcon = $layern->connection;
//error_reporting(0);
if (($lcon == " ") || ($lcon == "") || (in_array($lcon,array_keys($postgis_mapa)))){
if(($lcon == " ") || ($lcon == "")){
$layern->set("connection",$postgis_mapa);
}
else{
$layern->set("connection",$postgis_mapa[$lcon]);
}
}
}
}
autoClasses($layern,$nmapa);
cloneInlineSymbol($layern,$nmapa,$mapa);
ms_newLayerObj($mapa, $layern);
}
//aplica a extensao geografica
$layer = $mapa->getlayerbyname($tema);
$extatual = $mapa->extent;
$ret = "";
if(isset($mapext)){
$ret = str_replace(","," ",$mapext);
}
else{
$ret = $layer->getmetadata("extensao");
}
if ($ret != ""){
$ret = explode(" ",$ret);
$extatual->setextent($ret[0],$ret[1],$ret[2],$ret[3]);
}
$mapa->setsize($w,$h);
$sca = $mapa->scalebar;
$sca->set("status",MS_OFF);
if($legenda == "sim"){
$leg = $mapa->legend;
$leg->set("status",MS_EMBED);
$cor = $leg->imagecolor;
$cor->setrgb(250,250,250);
$labelleg = $leg->label;
$labelleg->updatefromstring("LABEL TYPE TRUETYPE END");
$labelleg->set("font","arial");
$labelleg->set("size",12);
$leg->set("keyspacingy",0);
$leg->set("keysizey",20);
$layer = $mapa->getlayerbyname($tema);
$nclass = $layer->numclasses;
for($i=0;$i<$nclass;$i++){
$classe = $layer->getclass($i);
if($classe->title === ""){
$classe->title = $classe->name;
}
}
}
$c = $mapa->imagecolor;
$c->setrgb(-1,-1,-1);
$o = $mapa->outputformat;
$o->set("imagemode",MS_IMAGEMODE_RGBA);
if($transparente == "sim"){
$o->set("transparent",MS_TRUE);
}
restauraConObj($mapa,$postgis_mapa);
$mapa->save($arqtemp.".map");
/*
if(validaAcessoTemas($arqtemp.".map",false) == true){
echo "Existem temas restritos";exit;
}
*/
//pega a lista de valores unicos da $colunat
include_once("../../classesphp/classe_atributos.php");
$m = new Atributos($arqtemp.".map",$tema);
$lista = $m->listaUnicoRapida($colunat);
$listaunica = array();
foreach($lista as $l){
$l = str_replace($nulos,"",$l);
if($l != ""){
$listaunica[] = $l;
}
}
$mapa = ms_newMapObj($arqtemp.".map");
//cria as imagens para cada periodo
$layer = $mapa->getlayerbyname($tema);
$copyright = $mapa->getlayerbyname("copyright");
if($copyright != ""){
$classe = ms_newClassObj($copyright);
$classet = ms_newClassObj($copyright);
$classet->title = " ";
}
$mapa->moveLayerdown(0);
$mapa->save($arqtemp.".map");
substituiCon($mapa,$postgis_mapa);
$mapa = ms_newMapObj($arqtemp.".map");
$copyright = $mapa->getlayerbyname("copyright");
if($copyright != ""){
$c = $copyright->getclass(0);
if($vi >= 60200){
$label = $c->getLabel(0);
}
else{
$label = $c->label;
}
}
//$classe = ms_newClassObj($copyright);
$imagens = array();
$duracao = array();
$objImagem = "";
foreach($listaunica as $d){
$layer = $mapa->getlayerbyname($tema);
if(strtoupper($colunat) == $colunat){
$filtro = "(('[$colunat]' $operador '$d'))";
if($tipocolunat == "numerico" || $tipocolunat == "numero"){
$filtro = "(([$colunat] $operador $d))";
}
}
else{
$filtro = "$colunat $operador '$d'";
if($tipocolunat == "numerico" || $tipocolunat == "numero"){
$filtro = "$colunat $operador $d";
}
}
$layer->setfilter($filtro);
$nomec = $arqtemp.$d.".png";
if($copyright != "" && $vi >= 60300){
$s = "LABEL TEXT '".$d."' END";
$label->updateFromString($s);
}
else{
$classe->title = $d;
}
//$mapa->save($arqtemp."teste.map");
$mapa->save($arqtemp.".map");
if(!file_exists($nomec)){
if($objImagem == ""){
$objImagem = $mapa->draw();
$objImagem->saveImage($nomec);
}
else{
$i = $mapa->draw();
$objImagem->pasteImage($i,-1);
$objImagem->saveImage($nomec);
}
}
$imagens[] = $nomec;
$duracao[] = $tempo;
//$mapa->save($arqtemp.".map");exit;
}
restauraConObj($mapa,$postgis_mapa);
$mapa->save($arqtemp.".map");
unlink($arqtemp.".map");
$mapa = null;
//junta as imagens no gif
include("../../pacotes/gifcreator/GifCreator.php");
$gc = new GifCreator();
$gc->create($imagens, $duracao, 0);
$gifBinary = $gc->getGif();
file_put_contents($arqtemp.".gif", $gifBinary);
//retorna o gif para o navegador
ob_clean();
header('Content-type: image/gif');
header('Content-Disposition: filename="'.$tema.'.gif"');
echo $gifBinary;
exit;
?>