getlayerbyname($tema); $l->set("template","none.htm"); if (!empty($postgis_mapa)){ if ($l->connectiontype == MS_POSTGIS){ $lcon = $l->connection; if (($lcon == " ") || ($lcon == "") || (in_array($lcon,array_keys($postgis_mapa)))){ // //o metadata CONEXAOORIGINAL guarda o valor original para posterior substituição // if(($lcon == " ") || ($lcon == "")){ $l->set("connection",$postgis_mapa); $l->setmetadata("CONEXAOORIGINAL",$lcon); } else{ $l->set("connection",$postgis_mapa[$lcon]); $l->setmetadata("CONEXAOORIGINAL",$lcon); } } } } autoClasses($l,$oMap); ms_newLayerObj($oMap, $l); $oMap->save($nomeMapfileTmp); validaAcessoTemas($nomeMapfileTmp,true); $oMap = ms_newMapobj($nomeMapfileTmp); $layer = $oMap->getlayerbyname($tema); if($layer == ""){ echo "Layer nao encontrado"; exit; } $data = pegaDadosJ(); if($format == "storymap"){ //parametros via URL $storymap = $layer->getmetadata("storymap"); if($storymap == ""){ echo "Parametros nao definidos no METADATA storymap"; exit; } $storymap = json_decode(converteenc($storymap),true); $cabecalho = ($storymap["cabecalho"]); $texto = ($storymap["texto"]); $coltexto = $storymap["coltexto"]; $colcabecalho = $storymap["colcabecalho"]; $collocal = $storymap["collocal"]; $colicone = $storymap["colicone"]; $collon = $storymap["collon"]; $collat = $storymap["collat"]; $colmedia = $storymap["colmedia"]; $par = array( "cabecalho"=>$cabecalho, "texto"=>$texto, "coltexto"=>$coltexto, "colcabecalho"=>$colcabecalho, "collocal"=>$collocal, "colicone"=>$colicone, "collon"=>$collon, "collat"=>$collat, "colmedia"=>$colmedia ); storymap($par); exit; } if($format == "gdocs"){ gdocs(); } function gdocs(){ global $data, $nomeArq, $jsonp; $items = $data["items"]; $n = count($items); $dados = $data["features"]; $tipos = $data["tipos"]; $records = array(); $id = 0; foreach($dados as $dd){ $d = $dd["valores"]; $r = array(); $r["id"] = $id; $id++; for($i = 0; $i < $n; $i++){ $r[$items[$i]] = $d[$i]; } //var_dump($dd["shape"].getcentroid());exit; $c = $dd["shape"]->getcentroid(); $r["geo"] = array("lat"=>$c->y,"lon"=>$c->x); $records[] = $r; } $fields = array(); for($i = 0; $i < $n; $i++){ $fields[] = array( "id"=>$items[$i], "type"=>$tipos[$i] ); } $fields[] = array( "id"=>"geo", "type"=>"geo" ); $j = array( "records"=>$records, "fields"=>$fields ); $contents = json_encode($j); //envia if(empty($jsonp)){ file_put_contents($nomeArq.".json",$contents); header("Content-type: application/json"); echo $contents; } else{ file_put_contents($nomeArq.".json",$jsonp."(".$contents.");"); echo $jsonp."(".$contents.");"; } } function storymap($par){ global $data, $nomeArq, $jsonp; $items = $data["items"]; $colunaTexto = array_search($par["coltexto"],$items); $colcabecalho = array_search($par["colcabecalho"],$items); $nomeLocal = array_search($par["collocal"],$items); $colunaIcone = ""; $colunaLon = array_search($par["collon"],$items); $colunaLat = array_search($par["collat"],$items); if(empty($par["colmedia"])){ $colmedia = ""; }else{ $colmedia = array_search($par["colmedia"],$items); } $dados = $data["features"]; $slides = array(); if(!empty($par["cabecalho"]) || !empty($par["texto"])){ $slides[] = array( "type"=>"overview", "text"=>array( "text"=>$par["texto"], "headline"=>$par["cabecalho"] ) ); } foreach($dados as $dd){ $d = $dd["valores"]; $icone = "http://maps.gstatic.com/intl/en_us/mapfiles/ms/micons/blue-pushpin.png"; if(!empty($d[$par["colicone"]])){ $icone = $d[$par["colicone"]]; } if($par["coltexto"] == ""){ $texto = ""; } else{ $texto = $d[$colunaTexto]; } if($par["colcabecalho"] == ""){ $cabec = ""; } else{ $cabec = $d[$colcabecalho]; } if($par["collocal"] == ""){ $local = ""; } else{ $local = $d[$nomeLocal]; } if($par["collon"] == "" || $par["collat"] == ""){ $c = $dd["shape"]->getcentroid(); $lon = $c->x; $lat = $c->y; } else{ $lon = $d[$colunaLon]; $lat = $d[$colunaLat]; } $slide = array( "text"=>array( "text"=>$texto, "headline"=>$cabec ), "location"=>array( "name" => $local, "lon" => $lon*1, //"zoom" => 10, "lat" => $lat*1, "line" => false, "icon" => $icone ) ); if(!empty($d[$colmedia])){ $slide["media"] = array( "url"=>$d[$colmedia] ); } //var_dump($slide);exit; $slides[] = $slide; } $storymap = array("slides"=>$slides); $j = array( "storymap"=>$storymap ); //echo "
";var_dump($j);exit;
$contents = json_encode($j);
//var_dump($contents);exit;
file_put_contents($nomeArq.".json",$contents);
//envia
ob_clean();
if(empty($jsonp)){
header("Content-type: application/json");
echo $contents;
}
else{
echo $jsonp."(".$contents.");";
}
}
function nomeRand($n=10)
{
$nomes = "";
$a = 'azertyuiopqsdfghjklmwxcvbnABCDEFGHIJKLMNOPQRSTUVWXYZ';
$max = 51;
for($i=0; $i < $n; ++$i)
{
$nomes .= $a{mt_rand(0, $max)};
}
return $nomes;
}
function carregaCacheArquivo(){
global $nomeArq;
if(file_exists($nomeArq.".json")){
header("Content-type: application/json");
readfile($nomeArq.".json");
return true;
}
return false;
}
function pegaDadosJ(){
global $oMap, $tema, $versao, $locaplic;
set_time_limit(0);
$layer = $oMap->getlayerbyname($tema);
processaPluginI3geo();
$layer->set("status",MS_DEFAULT);
$layer->set("template","none.htm");
$items = pegaItens($layer,$oMap);
$layer->querybyrect($oMap->extent);
$layer->open();
$res_count = $layer->getNumresults();
$linhas = array();
for ($i = 0; $i < $res_count; $i++){
//echo $i." -
";
if($versao >= 6){
$shape = $layer->getShape($layer->getResult($i));
}
else{
$shape = $layer->getFeature($layer->getResult($i)->shapeindex);
}
$valores = array();
foreach ($items as $item){
$v = trim($shape->values[$item]);
if(is_string($v)){
$v = converteenc($v);
}
$valores[] = $v;
}
$linhas[] = array(
"valores"=>$valores,
"shape"=>$shape
);
}
//verifica os tipos dos itens
$n = 10;
$ni = count($items);
$tipos = array();
if(count($linhas) <= 10){
$n = count($linhas);
}
for ($j = 0; $j < $ni; $j++){
$tipos[$j] = "string";
}
for ($i = 0; $i < $n; $i++){
$valores = $linhas[$i]["valores"];
for ($j = 0; $j < $ni; $j++){
if($tipos[$j] == "string" && $valores[$j] != "" && is_numeric($valores[$j])){
$tipos[$j] = "number";
}
}
}
$resultado = array(
"items"=>$items,
"tipos"=>$tipos,
"features"=>$linhas
);
return $resultado;
}
function processaPluginI3geo(){
global $locaplic, $layer;
$c = $layer->getmetadata("PLUGINI3GEO");
if($c != ""){
$cs = json_decode($c,true);
if($cs["plugin"] == "parametrossql"){
$data = $layer->data;
$cs = $cs["parametros"];
$chaves = array();
foreach($cs as $c){
$chaves[] = $c["chave"];
}
$chaves = implode(",",$chaves);
$filtro = $layer->getFilterString();
$chaves = str_ireplace(array(" and ", " or ", "select","from","where","update","delete","insert","--"),"",$chaves);
$chaves = explode(",",$chaves);
$n = count($chaves);
//a variavel $plugin vem da URL e contem os valores
//que devem ser substituidos
//se $plugin for vazio, usa o primeiro valor definido na configuracao do plugin
//A ordem dos valores deve ser exatamente a ordem das chaves
if(empty($plugin)){
$plugin = array();
foreach($cs as $c){
if($c["chave"] != ""){
//valores definidos no plugin como uma string
if($c["valores"] != ""){
$temp = explode(",",$c["valores"]);
$plugin[] = $temp[0];
}
elseif ($c["prog"] != ""){
$plugin[] = execProg($locaplic."/".$c["prog"]);
}
}
}
$plugin = implode(",",$plugin);
}
$layer->setmetadata("TEMA",$layer->getmetadata("TEMA")." - ".$plugin);
$valores = str_ireplace(array(" and ", " or ", "select","from","where","update","delete","insert","--"),"",$plugin);
$valores = explode(",",strip_tags($valores));
for($i = 0; $i < $n; $i++){
if($chaves[$i] != ""){
$v = $valores[$i];
$data = str_replace($chaves[$i],$v,$data);
if($filtro != ""){
$filtro = str_replace($chaves[$i],$v,$filtro);
}
}
}
if($filtro != ""){
$layer->setfilter($filtro);
}
$layer->set("data",$data);
}
}
}
//utilizada para obter os dados default quando se utiliza o plugin parametrossql
function execProg($prog){
include($prog);
//$retorno variavel deve ser retornada pelo programa $prog
//veja como exemplo i3geo/aplicmap/daods/listaano.php
return $retorno[0]["v"];
}
function converteenc($texto){
if (!mb_detect_encoding($texto,"UTF-8",true)){
$texto = mb_convert_encoding($texto,"UTF-8","ISO-8859-1");
}
return $texto;
}
?>