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ção de download pode estar sendo executada da á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á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é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 é um array com os NAMEs dos LAYERS que serã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á vazio ou nã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á pronto, definido no metadata arquivodownload, irá ser utilizado // $meta = $l->getmetadata("arquivodownload"); if ($meta != "") { // //se o arquivo nã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ã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"); }
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); }
Seleciona elementos do mapa ou processa a seleçã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ções de uso geral. */ /* Valor: LISTATRUETYPE Lista as fontes truetype disponíveis. */ /*
// //faz a busca da função que deve ser executada // $retorno = ""; //string que será retornada ao browser via JSON switch (strtoupper($funcao)) { /* Valor: INCLUISEL Incluí elementos em uma seleção. <Selecao->incluiSel> */ case "INCLUISEL": include_once dirname(__FILE__) . "/../../classesphp/classe_selecao.php"; $m = new Selecao($map_file, $tema); $retorno = $m->incluiSel($_GET["ids"]); // //é necessário obter os parâmetros do mapa para remontar a árvore de camadas // $_SESSION["contadorsalva"]++; redesenhaMapa(); break; /* Valor: ESTATISTICA Calcula estatísticas básicas de uma tabela de um tema. <Atributos->estatDescritivas> */ /*