Esempio n. 1
0
function downloadTema2($map_file, $tema, $locaplic, $dir_tmp, $postgis_mapa)
{
    ini_set("max_execution_time", "1800");
    ini_set('memory_limit', '5000M');
    $temas = array();
    if (file_exists($locaplic . "/ms_configura.php")) {
        include $locaplic . "/ms_configura.php";
    } else {
        include dirname(__FILE__) . "/../ms_configura.php";
    }
    //para zipar o shapefile
    include dirname(__FILE__) . "/../pacotes/kmlmapserver/classes/zip.class.php";
    $versao = versao();
    $versao = $versao["principal"];
    $dataArquivos = array();
    //
    //cria o arquivo mapfile, caso ele não exista, que servirá de base para obtenção dos dados
    //
    $nomeRand = true;
    $projecao = pegaProjecaoDefault();
    if ($map_file == "" || !@ms_newMapObj($map_file)) {
        //a funcao foi chamada do aplicativo datadownload
        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;
            }
        }
        $map_tmp = ms_newMapObj($base);
        $map_file = $dir_tmp . "/downloadTema2" . nomerandomico(20) . ".map";
        $map_tmp->setProjection($projecao["proj4"]);
        $map_tmp->save($map_file);
        $nomeRand = false;
    }
    //
    //verifica se o tema existe no mapfile
    //se não existir, tenta inserir com base no mapfile existente no diretório temas
    //o tema pode existir se a função estiver sendo chamada da árvore de temas de um mapa já aberto
    //
    $temasdir = $locaplic . "/temas";
    $map = ms_newMapObj($map_file);
    $rectextent = $map->extent;
    $extensao = ".map";
    if (file_exists($locaplic . "/temas/" . $tema . ".gvp")) {
        $extensao = ".gvp";
    }
    if ($extensao == ".map") {
        //
        //problema aqui
        //$tema pode ser diferente do nome do mapfile
        //
        $teste = @$map->getlayerbyname($tema);
        //caso o usuario tenha usado caixa alta no nome do layer
        if ($teste == "") {
            $teste = @$map->getlayerbyname(strtoupper($tema));
        }
        //se o layer não existir no mapfile, pega da pasta i3geo/temas e adiciona em $map
        if ($teste == "") {
            //tema pode ser o nome de um arquivo mapfile
            if (file_exists($tema . ".map")) {
                $maptemp = ms_newMapObj($tema . ".map");
                $tema = basename($tema);
            } else {
                $maptemp = ms_newMapObj($temasdir . "/" . $tema . ".map");
            }
            $numlayers = $maptemp->numlayers;
            for ($i = 0; $i < $numlayers; ++$i) {
                $ll = $maptemp->getlayer($i);
                $permite = $ll->getmetadata("permitedownload");
                if ($permite != "nao") {
                    ms_newLayerObj($map, $ll);
                }
            }
            $teste = @$map->getlayerbyname($tema);
            if ($teste == "") {
                $ll = $maptemp->getlayer(0);
                $permite = $ll->getmetadata("permitedownload");
                if ($permite != "nao") {
                    ms_newLayerObj($map, $ll);
                    $tema = $ll->name;
                }
            }
        } else {
            //remove o metadata com um nome de arquivo opcional, pois a fun&ccedil;&atilde;o de download pode estar sendo executada da &aacute;rvore de camadas
            $teste = $map->getlayerbyname($tema);
            $teste->setmetadata("arquivodownload", "");
        }
    } else {
        include_once $locaplic . "/pacotes/gvsig/gvsig2mapfile/class.gvsig2mapfile.php";
        $gm = new gvsig2mapfile($locaplic . "/temas/" . $tema . ".gvp");
        $gvsigview = $gm->getViewsNames();
        foreach ($gvsigview as $gv) {
            $dataView = $gm->getViewData($gvsigview);
            $map = $gm->addLayers($map, $gvsigview, $dataView["layerNames"]);
            $temas = array_merge($temas, $gm->nomesLayersAdicionados);
        }
    }
    //
    //salva o mapfile com um outro nome para evitar que o mapa atual, se estiver aberto, seja modificado
    //
    //verifica se tem query e copia o arquivo
    $qyfile = str_replace(".map", "_qy.map", $map_file);
    $nr = nomerandomico(5);
    $map_file = str_replace(".map", $nr . "tmp.map", $map_file);
    if (file_exists($qyfile)) {
        $nqyfile = str_replace(".map", "_qy.map", $map_file);
        $nqyfile = str_replace("_qy.map", "", $nqyfile) . "_qy.map";
        copy($qyfile, $nqyfile);
    }
    $map->save($map_file);
    //$map_file agora contem os LAYERS necess&aacute;rios
    $map = ms_newMapObj($map_file);
    substituiConObj($map, $postgis_mapa);
    $nameMapfile = $map->name;
    //
    //verifica se existe mais de um tema (grupo) montando o array com os temas
    //os grupos podem ter o nome do layer em GROUP ao inv&eacute;s de NAME
    //
    if ($extensao == ".map") {
        $multilayer = 0;
        $grupos = $map->getAllGroupNames();
        foreach ($grupos as $grupo) {
            if ($grupo == $tema) {
                $multilayer = 1;
            }
        }
        if ($multilayer == 1) {
            $temasnx = $map->getAllLayerNames();
            foreach ($temasnx as $l) {
                $gl = $map->getlayerbyname($l);
                $g = $gl->group;
                if ($g == $tema || $l == $tema) {
                    $temas[] = $l;
                }
            }
        }
        if ($multilayer == 0) {
            $temas[] = $tema;
        }
    }
    //$temas agora &eacute; um array com os NAMEs dos LAYERS que ser&atilde;o baixados
    $radtmp = dirname($dir_tmp);
    $ziper = new zipfile();
    foreach ($temas as $tema) {
        $l = $map->getlayerbyname($tema);
        $novonomelayer = $tema;
        //usa o NAME do mapfile para nao gerar arquivos com o mesmo nome em instalacoes multiplas do i3geo
        $nomeshp = $dir_tmp . "/" . $nameMapfile . "_" . $novonomelayer;
        if (file_exists($nomeshp . ".dbf")) {
            //
            //verifica se o arquivo est&aacute; vazio ou n&atilde;o
            //se estiver, apaga o arquivo
            //
            $verificaDBF = verificaDBF($nomeshp . ".dbf");
            if ($verificaDBF == false) {
                unlink($nomeshp . ".dbf");
                unlink($nomeshp . ".shp");
                unlink($nomeshp . ".shx");
                unlink($nomeshp . ".prj");
                unlink($nomeshp . ".zip");
            }
        }
        //
        //se existir um arquivo j&aacute; pronto, definido no metadata arquivodownload, ir&aacute; ser utilizado
        //
        $meta = $l->getmetadata("arquivodownload");
        if ($meta != "") {
            //
            //se o arquivo n&atilde;o tiver sido copiado
            //
            //evita que se tente copiar qualquer arquivo
            $meta = str_replace(".zip", "", $meta) . ".zip";
            $nomecopia = $dir_tmp . "/" . $nameMapfile . "_" . basename($meta);
            //para evitar que tente copiar um arquivo mapfile
            $nomecopia = str_replace(".map", "", $nomecopia);
            $nomecopia = str_replace(".zip", "zip", $nomecopia) . ".zip";
            if (file_exists($meta)) {
                if (!file_exists($nomecopia)) {
                    copy($meta, $nomecopia);
                }
            }
            $resultado[] = basename($dir_tmp) . "/" . basename($nomecopia);
        } else {
            //se n&atilde;o existir arquivo definido
            $dados = $l->data;
            //
            //se for imagem, copia o arquivo
            //
            if ($l->type == MS_LAYER_RASTER) {
                if (file_exists($dados)) {
                    $dir = dirname($dados);
                    $arq = explode(".", basename($dados));
                    $nomecopia = $dir_tmp . "/" . $nameMapfile . "_" . $arq[0];
                    $exts = array("jpg", "jpw", "tif", "tifw", "tfw", "png", "pngw", "jpgw", "wld", "img");
                    foreach ($exts as $ext) {
                        $copia = $nomecopia . "." . $ext;
                        if (!file_exists($copia) && file_exists($dir . "/" . $arq[0] . "." . $ext)) {
                            copy($dir . "/" . $arq[0] . "." . $ext, $copia);
                        }
                        if (file_exists($copia)) {
                            $resultado[] = basename($dir_tmp) . "/" . basename($copia);
                        }
                    }
                } else {
                    return "erro";
                }
            } else {
                //se for vetorial, extrai o arquivo
                //
                //verifica se existe selecao, caso contrario, faz a selecao baseada na extensao
                //do mapfile
                //
                include dirname(__FILE__) . "/../classesphp/classe_selecao.php";
                $sel = new Selecao($map_file, $tema);
                //carrega a query para ver se o layer possui selecao ou nao
                $numSel = 0;
                $nomeRand = true;
                if (file_exists($sel->qyfile)) {
                    $map->loadquery($sel->qyfile);
                    $numSel = $l->getNumresults();
                    $nomeshp = criaSHP($tema, $map_file, $locaplic, $dir_tmp, $nomeRand, $projecao["prj"]);
                }
                //
                //se nao existir selecao seleciona por box
                //o box vem do mapfile original
                //
                if (!file_exists($sel->qyfile)) {
                    $box = $rectextent->minx . " " . $rectextent->miny . " " . $rectextent->maxx . " " . $rectextent->maxy;
                    $shapesSel = $sel->selecaoBOX("novo", $box, true);
                    //reaproveita arquivo anterior
                    $nomeRand = false;
                    $nomeshp = criaSHP($tema, $map_file, $locaplic, $dir_tmp, $nomeRand, $projecao["prj"], true, $shapesSel);
                }
                //remove o arquivo de selecao se ele foi criado apenas para pegar todos os elementos
                if ($nomeRand == false) {
                    $sel->selecaoLimpa();
                }
                if ($nomeshp == false) {
                    return array("arquivos" => "<span style=color:red >Ocorreu um erro, tente novamente", "nreg" => 0);
                }
                $pre = str_replace($radtmp . "/", "", $nomeshp);
                $resultado[] = $pre . ".shp";
                $dataArquivos[] = date("F d Y H:i:s.", filemtime($nomeshp . ".shp"));
                $resultado[] = $pre . ".shx";
                $dataArquivos[] = date("F d Y H:i:s.", filemtime($nomeshp . ".shx"));
                $resultado[] = $pre . ".dbf";
                $dataArquivos[] = date("F d Y H:i:s.", filemtime($nomeshp . ".dbf"));
                $resultado[] = $pre . ".prj";
                $dataArquivos[] = date("F d Y H:i:s.", filemtime($nomeshp . ".prj"));
                //zipa o arquivo
                $zip = basename($pre);
                if (!file_exists($pre . ".zip")) {
                    $ziper->addFile(file_get_contents($nomeshp . ".shp"), $zip . ".shp");
                    $ziper->addFile(file_get_contents($nomeshp . ".shx"), $zip . ".shx");
                    $ziper->addFile(file_get_contents($nomeshp . ".dbf"), $zip . ".dbf");
                    $ziper->addFile(file_get_contents($nomeshp . ".prj"), $zip . ".prj");
                    $fp = fopen($nomeshp . ".zip", "wb");
                    fwrite($fp, $ziper->file());
                    fclose($fp);
                }
                $resultado[] = $pre . ".zip";
                $dataArquivos[] = date("F d Y H:i:s.", filemtime($nomeshp . ".zip"));
            }
        }
    }
    $nreg = "";
    if (count($resultado) == 3) {
        $arq = $radtmp . "/" . $resultado[2];
        if (function_exists("dbase_open")) {
            $db = dbase_open($arq, 0);
            if ($db) {
                $nreg = dbase_numrecords($db);
            }
        } else {
            $db = xbase_open($arq, 0);
            if ($db) {
                $nreg = xbase_numrecords($db);
            }
        }
    }
    //
    //gera um mapfile para download
    //
    $nomemapfileurl = "";
    return array("tema" => $tema, "mapfile" => "", "mapfileurl" => "", "arquivos" => implode(",", $resultado), "nreg" => $nreg, "datas" => $dataArquivos, "shape-zip" => $nomeshp . ".zip");
}
Esempio n. 2
0
function selecaoPoli($xs, $ys, $tema, $tipo, $buffer = 0)
{
    global $map_file;
    include_once dirname(__FILE__) . "/../../classesphp/classe_selecao.php";
    $temas = explode(",", $tema);
    foreach ($temas as $tema) {
        $m = new Selecao($map_file, $tema);
        $ok[] = $m->selecaoPorPoligono($tipo, $xs, $ys, "", $buffer);
        $m->salva();
        $_SESSION["contadorsalva"]++;
    }
    return implode(",", $ok);
}
Esempio n. 3
0
 
 Seleciona elementos do mapa ou processa a sele&ccedil;&atilde;o existente.
 
 <classe_selecao.php>
 */
 /*
  Valor: SELECAOATRIB
 
 Seleciona elementos com base nos atributos.
 
 <Selecao->selecaoAtributos>
 */
 case "SELECAOATRIB":
     include_once "classe_selecao.php";
     copiaSeguranca($map_file);
     $m = new Selecao($map_file, $_pg["tema"], $_pg["ext"]);
     $retorno = $m->selecaoAtributos($_pg["tipo"], $_pg["item"], $_pg["operador"], $_pg["valor"]);
     $_SESSION["contadorsalva"]++;
     redesenhaMapa();
     break;
     /*
      Section: Outros
     
     Op&ccedil;&otilde;es de uso geral.
     */
     /*
      Valor: LISTATRUETYPE
     
     Lista as fontes truetype dispon&iacute;veis.
     */
 /*
Esempio n. 4
0
//
//faz a busca da fun&ccedil;&atilde;o que deve ser executada
//
$retorno = "";
//string que ser&aacute; retornada ao browser via JSON
switch (strtoupper($funcao)) {
    /*
    Valor: INCLUISEL
    
    Inclu&iacute; elementos em uma sele&ccedil;&atilde;o.
    
    <Selecao->incluiSel>
    */
    case "INCLUISEL":
        include_once dirname(__FILE__) . "/../../classesphp/classe_selecao.php";
        $m = new Selecao($map_file, $tema);
        $retorno = $m->incluiSel($_GET["ids"]);
        //
        //&eacute; necess&aacute;rio obter os par&acirc;metros do mapa para remontar a &aacute;rvore de camadas
        //
        $_SESSION["contadorsalva"]++;
        redesenhaMapa();
        break;
        /*
        Valor: ESTATISTICA
        
        Calcula estat&iacute;sticas b&aacute;sicas de uma tabela de um tema.
        
        <Atributos->estatDescritivas>
        */
    /*