web; $url = dirname($webo->imageurl)."/"; $cp->set_data($url.$gfile_name.".png,".$url.(basename($nome)).",".$nome); } /** * Gera gráfico de barras. */ function graficoBarras() { global $map_file,$itemvalores,$itemclasses,$tema,$exclui,$tipo,$R_path,$R_libpath; global $setasdv,$percentual,$nome,$margem,$margemexterna,$margeminterna,$grid,$border,$cexaxis,$las,$space,$lwd,$fontlab,$collab,$cexlab,$xlab,$ylab,$fontsub,$fontmain,$locaplic,$dir_tmp,$gw,$gh,$res,$bg,$fg,$colmain,$font,$main,$cexmain,$sub,$cexsub; //pega os valores $dir = dirname(dirname($map_file)); if($nome == "") { $temp = iniciaDadosGrafico($map_file,$tema,$exclui,$itemclasses,$itemvalores,$tipo,$percentual,"",false); $nnval = $temp["dados"]; $nome = $dir."/".nomeRandomico(20); gravaDados($nnval,$nome); } $gfile_name = nomeRandomico(20); $rcode = iniciaParGrafico($gw,$gh,$res,$dir_tmp,$gfile_name,$margem,$margemexterna,$margeminterna,$locaplic,$R_libpath); $rcode[] = 'valores=read.table("'.$nome.'",header=TRUE,sep=";")'; $rcode[] = 'attach(valores)'; $rcode[] = 'names(x)= n'; $parametros = 'border='.$border.',cex.names='.$cexaxis.',las='.$las.',space='.$space.',font.lab='.$fontlab.',col.lab='.$collab.',cex.lab='.$cexlab.',font.sub='.$fontsub.',font.main='.$fontmain.',pty="m",font='.$font.',col.main='.$colmain.',col=terrain.colors(NROW(x)),cex.main='.$cexmain.',cex.sub='.$cexsub; if ($ylab != "") {$parametros .= ',ylab="'.$ylab.'"';} if ($xlab != "") {$parametros .= ',xlab="'.$xlab.'"';} if ($main != "") {$parametros .= ',main="'.$main.'"';} if ($sub != "") {$parametros .= ',sub="'.$sub.'"';} //$rcode[] = 'par(bg='.$bg.')'; $rcode[] = 'bar <- barplot(x,'.$parametros.',axes=FALSE)'; if ($setasdv == "TRUE") { $rcode[] = "stdev <- x/5; arrows(bar, x, bar, x + stdev, length=0.15, angle = 90)"; $rcode[] = "arrows(bar, x, bar, x + -(stdev), length=0.15, angle = 90)"; } if ($grid == "TRUE") $rcode[] = "grid()"; $rcode[] = 'abline(h = 0, lty = 1, col = "black", lwd = 1)'; $rcode[] = 'abline(h = (max(x)/2), lty = 2, col = "gray", lwd = 1)'; $rcode[] = "axis(2, at=seq(0,max(x),max(x)/10),cex.axis=".$cexaxis.")"; $rcode[]='close.screen(all = TRUE)'; $rcode[] = 'dev.off()'; $r = executaR($rcode,$dir_tmp,$R_path); $map = ms_newMapObj($map_file); $webo = $map->web; $url = dirname($webo->imageurl)."/"; return($url.$gfile_name.".png,".$url.(basename($nome)).",".$nome); } /** * Gera gráfico de histograma. */ function graficoHist() { global $map_file,$itemvalores,$itemclasses,$tema,$exclui,$tipo,$R_path,$R_libpath; global $densidade,$percentual,$nome,$margem,$margemexterna,$margeminterna,$corbarras,$grid,$breaks,$border,$cexaxis,$las,$lwd,$fontlab,$collab,$cexlab,$xlab,$ylab,$fontsub,$fontmain,$locaplic,$dir_tmp,$gw,$gh,$res,$bg,$fg,$colmain,$font,$main,$cexmain,$sub,$cexsub; $dir = dirname(dirname($map_file)); if($nome == "") { $itemvalores = $itemclasses; $temp = iniciaDadosGrafico($map_file,$tema,$exclui,$itemclasses,$itemvalores,$tipo,$percentual,"",false); $nnval = $temp["dados"]; $nome = $dir."/".nomeRandomico(20); gravaDados($nnval,$nome); } $gfile_name = nomeRandomico(20); $rcode = iniciaParGrafico($gw,$gh,$res,$dir_tmp,$gfile_name,$margem,$margemexterna,$margeminterna,$locaplic,$R_libpath); $rcode[] = 'valores=read.table("'.$nome.'",header=TRUE,sep=";")'; $rcode[] = 'attach(valores)'; $parametros = 'cex.axis='.$cexaxis.',breaks='.$breaks.',border='.$border.',las='.$las.',lwd='.$lwd.',font.lab='.$fontlab.',col.lab='.$collab.',cex.lab='.$cexlab.',font.sub='.$fontsub.',font.main='.$fontmain.',pty="m",font='.$font.',col.main='.$colmain.',cex.main='.$cexmain.',cex.sub='.$cexsub; if ($ylab != "") {$parametros .= ',ylab="'.$ylab.'"';} if ($xlab != "") {$parametros .= ',xlab="'.$xlab.'"';} if ($main != "") {$parametros .= ',main="'.$main.'"';} if ($sub != "") {$parametros .= ',sub="'.$sub.'"';} if ($densidade == "TRUE") {$rcode[] = 'hist(x,'.$parametros.',freq=F,col="'.$corbarras.'")';} else {$rcode[] = 'hist(x,'.$parametros.',freq=T,col="'.$corbarras.'")';} $rcode[] = 'abline(h = 0, lty = 1, col = "black", lwd = 1)'; $rcode[] = "axis(2,cex.axis=".$cexaxis.")"; if ($grid == "TRUE") $rcode[] = "grid()"; $rcode[] = "rug(x,col='gray')"; if ($densidade == "TRUE") {$rcode[] = "curve(dnorm(x, mean = mean(x), sd = sd(x)),add=TRUE,col='red')";} $rcode[]='close.screen(all = TRUE)'; $rcode[] = 'dev.off()'; //echo implode("\n",$rcode); $r = executaR($rcode,$dir_tmp,$R_path); $map = ms_newMapObj($map_file); $webo = $map->web; $url = dirname($webo->imageurl)."/"; return($url.$gfile_name.".png,".$url.(basename($nome)).",".$nome); } /** * Gera gráfico de linhas. */ function graficoLinhas() { global $map_file,$itemvalores,$itemclasses,$tema,$exclui,$tipo,$R_path,$R_libpath; global $percentual,$nome,$margem,$margemexterna,$margeminterna,$xlab,$ylab,$grid,$ppontos,$spline,$locaplic,$dir_tmp,$gw,$gh,$res,$bg,$collab,$colaxis,$cexlab,$cexaxis,$fontlab,$las,$tck,$cexmain,$border,$lty,$lwd,$lty,$lwd,$pch,$tpt,$main,$colmain,$fontmain,$nome; //pega os valores $dir = dirname(dirname($map_file)); if($nome == "") { $temp = iniciaDadosGrafico($map_file,$tema,$exclui,$itemclasses,$itemvalores,$tipo,$percentual,"",false); $nnval = $temp["dados"]; $nome = $dir."/".nomeRandomico(20); gravaDados($nnval,$nome); } $gfile_name = nomeRandomico(20); $rcode = iniciaParGrafico($gw,$gh,$res,$dir_tmp,$gfile_name,$margem,$margemexterna,$margeminterna,$locaplic,$R_libpath); $rcode[] = 'valores=read.table("'.$nome.'",header=TRUE,sep=";")'; $rcode[] = 'attach(valores)'; $rcode[] = 'names(x)= n'; $parametros = 'col.lab='.$collab.',col.axis='.$colaxis.',cex.lab='.$cexlab.',cex.axis='.$cexaxis.',font.lab='.$fontlab.',las='.$las.',tck='.$tck.',cex.main='.$cexmain; $rcode[] = 'par(pty="s")'; $rcode[] = 'plot(x,'.$parametros.', type = "n", axes = FALSE, ann = FALSE)'; if ($grid == "TRUE") $rcode[] = "grid()"; if ($spline=="FALSE") {$rcode[] = 'lines(x,col='.$border.',lty='.$lty.',lwd='.$lwd.')';} else {$rcode[] = 'lines(spline(x),col='.$border.',lty='.$lty.',lwd='.$lwd.')';} if ($ppontos=="TRUE") {$rcode[] = 'points(x, pch ="'.$pch.'", bg = "light grey", cex ='.$tpt.')';} $rcode[] = "axis(2,lines=NA)"; $rcode[] = 'axis(1, lines=NA)'; $rcode[] = 'box()'; $rcode[] = 'title(xlab = "'.$xlab.'")'; $rcode[] = 'title(ylab = "'.$ylab.'")'; $rcode[] = 'title(main = "'.$main.'",col.main='.$colmain.',font.main='.$fontmain.')'; $rcode[]='close.screen(all = TRUE)'; $rcode[] = 'dev.off()'; $r = executaR($rcode,$dir_tmp,$R_path); $map = ms_newMapObj($map_file); $webo = $map->web; $url = dirname($webo->imageurl)."/"; return($url.$gfile_name.".png,".$url.(basename($nome)).",".$nome); } /** * Gera gráfico de distribuição de pontos (scatter). */ function graficoScatter() { global $map_file,$itemvalores,$itemclasses,$tema,$exclui,$tipo,$R_path,$R_libpath; global $percentual,$nome,$margem,$margemexterna,$margeminterna,$corlinha,$grid,$ppontos,$locaplic,$dir_tmp,$gw,$gh,$res,$bg,$collab,$colaxis,$cexlab,$cexaxis,$fontlab,$las,$tck,$cexmain,$border,$lty,$lwd,$lty,$lwd,$pch,$tpt,$main,$colmain,$fontmain,$ylab,$xlab; //pega os valores $dir = dirname(dirname($map_file)); if($nome == "") { $temp = iniciaDadosGrafico($map_file,$tema,$exclui,$itemclasses,$itemvalores,"xy",$percentual,"",false); $nnval = $temp["dados"]; $nome = $dir."/".nomeRandomico(20); gravaDados($nnval,$nome); } $gfile_name = nomeRandomico(20); $rcode = iniciaParGrafico($gw,$gh,$res,$dir_tmp,$gfile_name,$margem,$margemexterna,$margeminterna,$locaplic,$R_libpath); $rcode[] = 'valores=read.table("'.$nome.'",header=TRUE,sep=";")'; $rcode[] = 'attach(valores)'; $parametros = 'pty="m",main = "'.$main.'",col.main='.$colmain.',font.main='.$fontmain.',ylab = "'.$ylab.'",xlab = "'.$xlab.'",cex ='.$tpt.',pch ="'.$pch.'",lty='.$lty.',lwd='.$lwd.',col.lab='.$collab.',col.axis='.$colaxis.',cex.lab='.$cexlab.',cex.axis='.$cexaxis.',font.lab='.$fontlab.',las='.$las.',tck='.$tck.',cex.main='.$cexmain; $rcode[] = 'par(pty="s",'.$parametros.')'; $rcode[] = 'plot(x,y,'.$parametros.')'; $rcode[] = 'abline(lm(y ~ x),col='.$corlinha.',lwd='.$lwd.')'; $rcode[]='close.screen(all = TRUE)'; $rcode[] = 'dev.off()'; $r = executaR($rcode,$dir_tmp,$R_path); $map = ms_newMapObj($map_file); $webo = $map->web; $url = dirname($webo->imageurl)."/"; return ($url.$gfile_name.".png,".$url.(basename($nome)).",".$nome); } /** * Gera gráfico de distribuição de pontos (scatter) com agrupamento em pixels. */ function graficoScatterBins() { global $map_file,$itemvalores,$itemclasses,$tema,$exclui,$tipo,$R_path,$R_libpath; global $plota3d,$nbins,$percentual,$nome,$margem,$margemexterna,$margeminterna,$corlinha,$grid,$ppontos,$locaplic,$dir_tmp,$gw,$gh,$res,$bg,$collab,$colaxis,$cexlab,$cexaxis,$fontlab,$las,$tck,$cexmain,$border,$lty,$lwd,$lty,$lwd,$pch,$tpt,$main,$colmain,$fontmain,$ylab,$xlab; //pega os valores $dir = dirname(dirname($map_file)); if($nome == "") { $temp = iniciaDadosGrafico($map_file,$tema,$exclui,$itemclasses,$itemvalores,"xy",$percentual,"",false); $nnval = $temp["dados"]; $nome = $dir."/".nomeRandomico(20); gravaDados($nnval,$nome); } $gfile_name = nomeRandomico(20); $rcode = iniciaParGrafico($gw,$gh,$res,$dir_tmp,$gfile_name,$margem,$margemexterna,$margeminterna,$locaplic,$R_libpath); $rcode[] = 'valores=read.table("'.$nome.'",header=TRUE,sep=";")'; $rcode[] = 'attach(valores)'; $rcode[] = 'library(gplots)'; $parametros = 'pty="m",main = "'.$main.'",col.main='.$colmain.',font.main='.$fontmain.',ylab = "'.$ylab.'",xlab = "'.$xlab.'",cex ='.$tpt.',pch ="'.$pch.'",lty='.$lty.',lwd='.$lwd.',col.lab='.$collab.',col.axis='.$colaxis.',cex.lab='.$cexlab.',cex.axis='.$cexaxis.',font.lab='.$fontlab.',las='.$las.',tck='.$tck.',cex.main='.$cexmain; if($plota3d == "FALSE") { $rcode[] = "hist2d(x,y, nbins=".$nbins.", col = c('white',heat.colors(16)),".$parametros.")"; $rcode[] = "rug(x,side=1)"; $rcode[] = "rug(y,side=2)"; $rcode[] = "grid()"; $rcode[] = "box()"; } else { $rcode[] = "h2d <- hist2d(x,y,show=FALSE, same.scale=TRUE, nbins=".$nbins.")"; $rcode[] = 'persp( h2d$x, h2d$y, h2d$counts,ticktype="detailed", theta=30, phi=30,expand=0.5, shade=0.5, col="cyan", ltheta=-30,'.$parametros.')'; } $rcode[]='close.screen(all = TRUE)'; $rcode[] = 'dev.off()'; $r = executaR($rcode,$dir_tmp,$R_path); $map = ms_newMapObj($map_file); $webo = $map->web; $url = dirname($webo->imageurl)."/"; return($url.$gfile_name.".png,".$url.(basename($nome)).",".$nome); } /** * Gera gráfico de estrelas. */ function graficoEstrela() { global $map_file,$itemvalores,$itemclasses,$tema,$exclui,$tipo,$R_path,$R_libpath; global $font,$cex,$grid,$ppontos,$locaplic,$dir_tmp,$w,$h,$res,$bg,$collab,$colaxis,$cexlab,$cexaxis,$fontlab,$las,$tck,$cexmain,$border,$lty,$lwd,$lty,$lwd,$pch,$tpt,$main,$colmain,$fontmain,$ylab,$xlab; //pega os valores $map = ms_newMapObj($map_file); $layer = $map->getLayerByName($tema); if ($exclui == ""){$exclui = "nulo";} $dados[] = "x"; foreach (explode(",",$itemclasses) as $i) {$dados = array_merge($dados,pegaValoresM($map,$layer,array($i),$exclui));} $nval = count($dados); if ($nval == 0){$cp->set_data("erro");return;} $dir = dirname(dirname($map_file)); $nomeV = $dir."/".nomeRandomico(20); gravaDados($dados,$nomeV); $numcol = count(explode(",",$itemclasses)); $numrow = $nval / $numcol; $graf = "png"; if (strtoupper(substr(PHP_OS, 0, 3) != 'WIN')) { $graf = "bitmap"; $h = $h / $res; $w = $w / $res; } $gfile_name = nomeRandomico(20); $rcode[] = $graf.'(file="'.$dir_tmp."/".$gfile_name.'.png",height = '.$h.', width = '.$w.', res = '.$res.', type = "png16m"))'; $rcode[] = 'valores=read.table("'.$nomeV.'",sep=",",header=TRUE)'; $rcode[] = 'attach(valores)'; $rcode[] = 'mx = matrix(x, ncol = '.$numrow.', nrow = '.$numcol.', byrow = TRUE, dimnames = NULL)'; //$parametros = 'pty="m",scale=FALSE,full=FALSE,key.loc = c ('.$w.',0),key.labels='.$itemvalores.',lty='.$lty.',font='.$font.',col.main='.$colmain.',cex='.$cex.',main="'.$main.'",cex.main='.$cexmain; $parametros = 'pty="m",scale=FALSE,full=FALSE,key.loc = c ('.$w.',0),lty='.$lty.',font='.$font.',col.main='.$colmain.',cex='.$cex.',main="'.$main.'",cex.main='.$cexmain; $rcode[] = 'par(bg='.$bg.')'; $rcode[] = 'palette(rainbow(12, s = 0.6, v = 0.75))'; //$rcode[] = 'stars(radius=FALSE,len=0.8,mx,draw.segments = TRUE,labels = '.$itemvalores.','.$parametros.')'; // full = TRUE, scale = TRUE, radius = TRUE,labels = NULL)'; $rcode[] = 'stars(radius=FALSE,len=0.8,mx,draw.segments = TRUE,'.$parametros.')'; // full = TRUE, scale = TRUE, radius = TRUE,labels = NULL)'; $rcode[] = 'dev.off()'; $r = executaR($rcode,$dir_tmp,$R_path); $map = ms_newMapObj($map_file); $webo = $map->web; $url = dirname($webo->imageurl)."/"; return($url.$gfile_name.".png,".$url.(basename($nomeV))); } function iniciaParGrafico($gw,$gh,$res,$dir_tmp,$gfile_name,$margem,$margemexterna,$margeminterna,$locaplic,$R_libpath) { $lib = '.libPaths("'.$R_libpath.'")'; /* if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) {$lib = '.libPaths("'.$locaplic.'/pacotes/rlib/win")';} else { if(file_exists($locaplic."/pacotes/rlib/linux")) $lib = '.libPaths("'.$locaplic.'/pacotes/rlib/linux")'; } */ $rcode[] = $lib; $graf = "png"; if (strtoupper(substr(PHP_OS, 0, 3) != 'WIN')) { $graf = "bitmap"; $gh = ($gh / $res); $gw = ($gw / $res); } if (strtoupper(substr(PHP_OS, 0, 3) != 'WIN')) {$rcode[] = $graf.'(file="'.$dir_tmp."/".$gfile_name.'.png",height = '.$gh.', width = '.$gw.', res = '.$res.', type = "png16m")';} else {$rcode[] = $graf.'(file="'.$dir_tmp."/".$gfile_name.'.png",height = '.$gh.', width = '.$gw.', res = '.$res.')';} $rcode[] = 'split.screen(c(1,1))'; if ($margem == "TRUE") { if (strtoupper(substr(PHP_OS, 0, 3) != 'WIN')) {$rcode[] = 'par(fin=c('.($gw-(0.1)).','.($gh-(0.1)).'),xpd=TRUE)';} else {$rcode[] = 'par(xpd=TRUE)';} $rcode[] = 'rect(-1, -1, 2, 2, col='.$margemexterna.')'; $rcode[] = 'box("figure")'; $rcode[] = 'par(xpd=FALSE)'; $rcode[] = 'rect(-1, -1, 2, 2, col='.$margeminterna.')'; $rcode[] = 'box("plot", lty="dashed")'; } $rcode[] = 'screen(1, new=FALSE)'; return $rcode; } function iniciaDadosGrafico($map_file,$tema,$exclui,$itemclasses,$itemvalores,$tipo,$percentual,$ext="",$incluicores=true,$ordenax="nao") { global $interface; //prepara o mapfile // $map = ms_newMapObj($map_file); if($interface == "googlemaps"){ $projMapa = $map->getProjection(); $map->setProjection("init=epsg:4618,a=6378137,b=6378137"); } if($ext && $ext != ""){ $e = explode(" ",$ext); $extatual = $map->extent; $extatual->setextent((min($e[0],$e[2])),(min($e[1],$e[3])),(max($e[0],$e[2])),(max($e[1],$e[3]))); } $layer = $map->getLayerByName($tema); //verifica se tem selecao $selecionados = carregaquery2($map_file,$layer,$map); if ($exclui == ""){$exclui = "nulo";} //pega os valores //$itemvalores pode ser um array de intens $nnval = array(); if(!is_array($itemvalores)){ $valores = pegaValoresM($map,$layer,array($itemclasses,$itemvalores),$exclui,$selecionados); //agrupa se for o caso $dados = agrupaValores($valores,0,1,$tipo); foreach($valores as $valor){ if(!empty($valor[0])){ $cores[$valor[0]] = $valor["cores"]; } } //calcula os parametros para o grafico $nval = count($dados); $max = max($dados); $soma = array_sum($dados); $tempm = array_keys($dados); $tempval = array(); $nnval[] = "n;x"; if ($tipo != "xy"){ for ($i=0;$i < $nval; ++$i){ if ($tempm[$i] != "" && $dados[$tempm[$i]] > 0){ $pp = ($dados[$tempm[$i]] * 100) / $soma; if ($percentual == "TRUE"){ $temp = "'".$tempm[$i]." (".round($pp,0)."%)';".$dados[$tempm[$i]]; if($incluicores == true){ $temp = $temp.";".$cores[$tempm[$i]]; } } else{ $temp = "'".$tempm[$i]."';".$dados[$tempm[$i]]; if($incluicores == true){ $temp = $temp.";".$cores[$tempm[$i]]; } } $tempval[] = $temp; } } $nval = count($tempval); } else{ foreach ($valores as $v){ $temp = $v[0].";".$v[1]; if($incluicores == true){ $temp = $temp.";".$cores[$v[0]]; } $tempval[] = $temp; } } if($ordenax == "sim"){ sort($tempval); } $nnval = array_merge($nnval,$tempval); } else{ $colunas = array_merge(array($itemclasses),$itemvalores); $valores = pegaValoresM($map,$layer,$colunas,$exclui,$selecionados); $nval = count($dados); $nnval[] = implode(";",$colunas); foreach($valores as $valor){ $nnval[] = implode(";",$valor); } $max = ""; } return array("dados"=>$nnval,"ndados"=>$nval,"max"=>$max); } function dadosLinhaDoTempo($map_file,$tema,$ext="") { $map = ms_newMapObj($map_file); if($ext && $ext != ""){ $e = explode(" ",$ext); $extatual = $map->extent; $extatual->setextent((min($e[0],$e[2])),(min($e[1],$e[3])),(max($e[0],$e[2])),(max($e[1],$e[3]))); } $layer = $map->getLayerByName($tema); $selecionados = carregaquery2($map_file,$layer,$map); if ($exclui == ""){$exclui = "nulo";} //define os itens para pegar os dados $itens = array(); if($layer->getmetadata("ltempoformatodata") == "") {return "Nao esta definido o metadata com o formato do campo";} if($layer->getmetadata("ltempoiteminicio") != ""){ $iteminicio = $layer->getmetadata("ltempoiteminicio"); $itens[] = $iteminicio; } else {return "Nao esta definido o metadata com o item inicial";} $itemi = ""; if($layer->getmetadata("ltempoitemimagem") != ""){ $itemi = $layer->getmetadata("ltempoitemimagem"); $itens[] = $itemi; } $itemicone = ""; if($layer->getmetadata("ltempoitemicone") != ""){ $itemicone = $layer->getmetadata("ltempoitemicone"); $itens[] = $itemicone; } $itemfim = ""; if($layer->getmetadata("ltempoitemfim") != ""){ $itemfim = $layer->getmetadata("ltempoitemfim"); $itens[] = $itemfim; } $itemtitulo = $iteminicio; if($layer->getmetadata("ltempoitemtitulo") != ""){ $itemtitulo = $layer->getmetadata("ltempoitemtitulo"); $itens[] = $itemtitulo; } $itemdescricao = $itemtitulo; if($layer->getmetadata("ltempoitemdescricao") != ""){ $itemdescricao = $layer->getmetadata("ltempoitemdescricao"); $itens[] = $itemdescricao; } $itemtip = $itemdescricao; if($layer->getmetadata("ltempoitemtip") != ""){ $itemtip = $layer->getmetadata("ltempoitemtip"); $itens[] = $itemtip; } $itemlink = ""; if($layer->getmetadata("ltempoitemlink") != ""){ $itemlink = $layer->getmetadata("ltempoitemlink"); $itens[] = $itemlink; } $converteE = "sim"; if($layer->getmetadata("ltempoconvencode") != ""){ $converteE = $layer->getmetadata("ltempoconvencode"); } $dados = pegaValoresM($map,$layer,$itens,$exclui,$selecionados,true,true); $eventos = array(); $anos = array(); foreach($dados as $dado){ if($itemi == "") {$image = '';} else {$image = $dado[$itemi];} if($itemicone == "") {$icone = 'dark-red-circle.png';} else {$icone = $dado[$itemicone];} if($itemfim == "") {$fim = '';} else {$fim = $dado[$itemfim];} if($itemlink == "") {$link = '';} else {$link = $dado[$link];} $titulo = $dado[$itemtitulo]; $desc = $dado[$itemdescricao]; if(function_exists("mb_convert_encoding") && strtolower($converteE) == "sim"){ $titulo = mb_convert_encoding($titulo,"UTF-8","ISO-8859-1"); $desc = mb_convert_encoding($desc,"UTF-8","ISO-8859-1"); } if($dado[$iteminicio] != 0 && $dado[$iteminicio] != '-'){ $eventos[] = array( 'start'=>$dado[$iteminicio], 'end'=>$fim, 'title'=>"".$titulo."", 'description'=>$dado[$iteminicio]." ".$fim."
".$desc, 'icon'=>$icone, 'image'=>$image, 'link'=>$link ); $anos[] = $fim; $anos[] = $dado[$iteminicio]; } } //echo "
";
	return array(
		"dateTimeFormat"=>$layer->getmetadata("ltempoformatodata"),
		"wikiURL"=>"",
		"wikiSection"=>"",
		"events"=>$eventos,
		"menorano"=>min($anos),
		"maiorano"=>max($anos)
	);
}
//
//opcao pode ser "google" ou o código de um tema. Nesse último caso, deve-se definir $item
//
function dadosPerfilRelevo($pontos,$opcao,$amostragem,$item="",$map_file=""){
	$urlGoogle = "http://maps.google.com/maps/api/elevation/json?sensor=false&path=";
	$pontos = str_replace(",","|",$pontos);
	$pontos = str_replace(" ",",",$pontos);
	$urlGoogle .= $pontos."&samples=".$amostragem;
	$curl = curl_init();
	if(!isset($i3geo_proxy_server)){
		include(dirname(__FILE__)."/../ms_configura.php");
	}
	curl_setopt ($curl, CURLOPT_URL, $urlGoogle);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	if(isset($i3geo_proxy_server) && $i3geo_proxy_server != ""){
		curl_setopt($curl, CURLOPT_PROXY, $i3geo_proxy_server);
	}
	$result = curl_exec($curl);
	curl_close ($curl);
	$result = json_decode( $result, true );

	if($opcao != "google"){
		include_once("classe_atributos.php");
		$m = New Atributos($map_file,$opcao);
		$rs = array();
		foreach($result["results"] as $r){
			$l = $r["location"];
			$rs[] = $m->identificaQBP2("",$l["lng"],$l["lat"],"",5,$item,"googlerelevo",$etip=false,$ext="");
		}
		$result = array("results"=>$rs,"status"=>"OK");
	}
	return $result;
}
/*
Function: executaR

Executa comandos do R.

Parametros:

$rcode {array} - Código que será executado.

$dir_tmp {string} - Diretório temporário onde ficarão os arquivos para processamento.

$R_path {string} - Executável do R.

$gfile_name {string} - nome da imagem que será criada

Retorno:

{string} - nome do arquivo com o código R que foi executado
*/

function executaR($rcode,$dir_tmp,$R_path,$gfile_name="")
{
	$R_options = "--slave --no-save";
	$r_name = nomeRandomico(20);
	$r_input = $dir_tmp."/".$r_name.".R";
	$r_output = $dir_tmp."/".$r_name.".Rout";
	gravaDados($rcode,$r_input);
	$command = $R_path." $R_options < $r_input > $r_output";
	$result = "";
	$error = "";
	$exec_result = exec($command,$result,$error);
	//corta a imagem final
	//include_once("classe_imagem.php");
	//$m = new Imagem($dir_tmp."/".$gfile_name.".png");
	//$i = $m->cortaBorda();
	//imagepng($i,$dir_tmp."/".$gfile_name.".png");
	return($r_input);
}
/*
Function: pegaValoresM

Pega os valores de múltiplos itens de um tema.

Se for passado apenas um item, o array de retorno será unidimensional.

Parametros:

$layer {objeto} - Layer que será processado.

$itens {array} - Itens que serão processados.

$exclui {string} - O registro não será considerado se um dos valores for igual a esse valor.

$selecionados {string} - sim|nao Utiliza apenas os selecionados ou todos

$chaves {boolean} - inclui ou não os nomes dos itens como chave no array resultante

$centroide {boolean} - captura ou não o WKT com o centroide do elemento

Retorno:

{array}
*/
function pegaValoresM($mapa,$layer,$itens,$exclui="nulo",$selecionados="nao",$chaves=false,$centroide=false)
{
	$versao = versao();
	$versao = $versao["principal"];
	$prjMapa = $mapa->getProjection();
	$prjTema = $layer->getProjection();
	$layer->set("template","none.htm");
	//$layer->setfilter("");

	$indicesel = array();
	//pega os valores dos indices dos elementos selecionados para comparacao posterior
	if ($selecionados == "sim"){
		$sopen = $layer->open();
		if($sopen == MS_FAILURE){return "erro";}
		$res_count = $layer->getNumresults();
		for ($i = 0; $i < $res_count; ++$i)
		{
			$result = $layer->getResult($i);
			$indicesel[] = $result->shapeindex;
		}
		$layer->close();
	}
	$valores = array();
	$nclasses = $layer->numclasses;
	if (@$layer->queryByrect($mapa->extent) == MS_SUCCESS){
		//$layer->draw();
		$sopen = $layer->open();
		if($sopen == MS_FAILURE){return "erro";}
		$res_count = $layer->getNumresults();
		//echo $res_count;echo "\n";
		for ($i=0;$i<$res_count;++$i){
			if($versao >= 6){
				$shape = $layer->getShape($layer->getResult($i));
				$shp_index = $shape->index;
			}
			else{
				$result = $layer->getResult($i);
				$shp_index  = $result->shapeindex;
				$shape = $layer->getfeature($shp_index,-1);
			}
			if (($selecionados == "sim") && (array_search($shp_index,$indicesel) === FALSE))
			{continue;}
			$considera = "sim";
			//verifica se no registro deve ser considerado
			if ($exclui != "nulo"){
				foreach ($itens as $item)
				{if($shape->values[$item] == $exclui){$considera = "nao";}}
			}
			//pega os valores
			$v = array();
			if ($considera == "sim"){
				//pega os valores dos itens do registro
				foreach ($itens as $item){
					$vitem = $shape->values[$item];
					if (!mb_detect_encoding($vitem,"UTF-8",true)){
						$vitem = mb_convert_encoding($vitem,"UTF-8","ISO-8859-1");
					}
					if($chaves == false)
					{$v[] = $vitem;}
					else
					{$v[$item] = $vitem;}
				}
				//pega o centroide
				//echo $i;echo "\n";
				if($centroide == true){
					$c = $shape->getCentroid();
					if (($prjTema != "") && ($prjMapa != $prjTema)){
						$projOutObj = ms_newprojectionobj($prjTema);
						$projInObj = ms_newprojectionobj($prjMapa);
						$c->project($projInObj, $projOutObj);
					}
					$v["centroide"] = "POINT(".$c->x." ".$c->y.")";
				}
				//echo $i;echo "---\n";
				//pega a cor da classe onde cai o registro
				if($nclasses > 0 && $versao >= 6){
					$cx = $layer->getClassIndex($shape);
					if($cx > -1){
						$classe = $layer->getclass($cx);
						$cor = $classe->getstyle(0)->color;
						$v["cores"] = $cor->red." ".$cor->green." ".$cor->blue;
					}
				}
				if (count($v) == 1){
					$valores[] = $v[0];
				}
				else{
					$valores[] = $v;
				}
			}
		}
		$layer->close();
	}
	return ($valores);
}
/*
Function: agrupaValores

Agrupa os valores de um array por um método de cálculo.

No caso de soma e média, será considerado apenas um item e uma chave.

Parametros:

$lista {array} - Lista com os arrays contendo os dados que serão processados.

$indiceChave {string} - Índice do array da lista que será considerado como a chave do array.

$indiceValor {string} - Índice do array da lista que será considerado como o valor.

$tipo {string} - Tipo de processamento soma|media|contagem|nenhum.

Retorno:

{array}
*/
function agrupaValores($lista,$indiceChave,$indiceValor,$tipo)
{
	$valores = null;
	foreach ($lista as $linha){
		$c = $linha[$indiceChave];
		$v = $linha[$indiceValor];
		if ($tipo == "conta"){
			if(@$valores[$c])
			$valores[$c] = $valores[$c] + 1;
			else
			$valores[$c] = 1;
		}
		if (($tipo == "soma"))
		{
			if (($v != "") && (is_numeric($v))){
				if(@$valores[$c])
				$valores[$c] = $valores[$c] + $v;
				else
				$valores[$c] = $v;
			}
		}
		if ($tipo == "media"){
			if (($v != "") && (is_numeric($v))){
				if(@$soma[$c])
				$soma[$c] = $soma[$c] + $v;
				else
				$soma[$c] = $v;

				if(@$conta[$c])
				$conta[$c] = $conta[$c] + 1;
				else
				$conta[$c] = 1;
			}
		}
		if ($tipo == "nenhum"){
			//if (($v != "") && (is_numeric($v)))
			//{
				$valoresn[] = $v;
			//}
			$valores = $valoresn;
		}
	}
	if ($tipo == "media"){
		$chaves = array_keys($conta);
		foreach ($chaves as $c){
			$valores[$c] = $soma[$c] / $conta[$c];
		}
	}
	return ($valores);
}

?>