Beispiel #1
0
 function capturaGeometrias($dir_tmp, $imgdir, $nome = "")
 {
     if (!$this->layer) {
         return "erro";
     }
     $this->mapa->setsize(30, 30);
     $ext = $this->mapa->extent;
     $sb = $this->mapa->scalebar;
     $sb->set("status", MS_OFF);
     $items = pegaItens($this->layer);
     $final["layer"] = pegaNome($this->layer, "UTF-8");
     $shapes = retornaShapesSelecionados($this->layer, $this->arquivo, $this->mapa);
     $registros = array();
     $i = 0;
     foreach ($shapes as $shape) {
         $valitem = array();
         foreach ($items as $item) {
             $v = trim($shape->values[$item]);
             if (function_exists("mb_convert_encoding")) {
                 $v = mb_convert_encoding($v, "UTF-8", "ISO-8859-1");
             }
             $valitem[] = array("item" => $item, "valor" => $v);
         }
         $wktgeo = $shape->toWkt();
         if ($wktgeo != "") {
             $fechou = $this->layer->close();
             $bounds = $shape->bounds;
             //gera imagem
             $d = 0.01;
             //se for do tipo ponto, faz um deslocamento do extent
             if ($shape->type == 2) {
                 $d = 0;
             }
             $ext->setextent($bounds->minx - $d, $bounds->miny - $d, $bounds->maxx + $d, $bounds->maxy + $d);
             $im = gravaImagemMapa($this->mapa);
             $registros[] = array("id" => $i, "wkt" => $wktgeo, "valores" => $valitem, "imagem" => $im["url"]);
             $abriu = $this->layer->open();
         } else {
             return "erro";
         }
         $i++;
     }
     $fechou = $this->layer->close();
     if (count($registros) > 0) {
         $final["dados"] = $registros;
         //salva arquivo
         $nome == "" ? $nome = nomerandomico(15) : ($nome = str_replace(" ", "_", $nome));
         $arq = $dir_tmp . "/" . $imgdir . "/" . $nome . "keo";
         if (file_exists($arq)) {
             unlink($arq);
         }
         $fp = fopen($arq, "w");
         $r = serialize($final);
         fwrite($fp, $r);
         fclose($fp);
     }
     return "ok";
 }
Beispiel #2
0
    }
}
if (!isset($_GET["map_imagecolor"])) {
    $map_imagecolor = "-1 -1 -1";
} else {
    $map_imagecolor = $_GET["map_imagecolor"];
}
if (!isset($map_transparent)) {
    $map_transparent = "ON";
} else {
    $map_transparent = $_GET["map_transparent"];
}
//
//faz uma c�pia do mapfile para poder manipular sem afetar omapfile atual usado pelo i3geo
//
$nomerando = nomerandomico();
//echo $map_file."<br>";
$map_filen = str_replace(basename($map_file), $nomerando . ".map", $map_file);
$map_filen = str_replace(".map", "", $map_filen) . ".map";
copy($map_file, $map_filen);
substituiCon($map_filen, $postgis_mapa);
$map = ms_newMapObj($map_filen);
restauraCon($map_filen, $postgis_mapa);
$layersNames = $map->getalllayernames();
foreach ($layersNames as $layerName) {
    $layer = $map->getLayerByname($layerName);
    if ($layer->getmetadata("classesnome") != "") {
        autoClasses($layer, $map);
    }
    if ($layer->type == MS_LAYER_POLYGON) {
        $nclasses = $layer->numclasses;
Beispiel #3
0
 function funcoesGeometrias($dir_tmp, $imgdir, $lista, $operacao)
 {
     $lista = explode(",", $lista);
     $dir = $dir_tmp . "/" . $imgdir . "/";
     $geometrias = array();
     $valoresoriginais = array();
     $calculo = array();
     foreach ($lista as $l) {
         $geos = $this->unserializeGeo($dir . $l);
         foreach ($geos["dados"] as $geo) {
             $geometrias[] = $geo["wkt"];
             $valoresoriginais = array_merge($valoresoriginais, $geo["valores"]);
         }
     }
     $calculo[]["gwkt"] = $this->aplicaFuncaoListaWKT($geometrias, $operacao);
     $nomegeo = "";
     if (count($calculo) > 0) {
         $final["layer"] = $operacao . " " . implode(" ", $lista);
         $final["dados"][] = array("id" => "0", "wkt" => $calculo[0]["gwkt"], "valores" => $valoresoriginais, "imagem" => "");
         $nomegeo = $dir . nomerandomico(10) . "keo";
         $this->serializeGeo($nomegeo, $final);
         $ext = $this->mapa->extent;
         $minx = $ext->minx;
         $miny = $ext->miny;
         $maxx = $ext->maxx;
         $maxy = $ext->maxy;
         $h = $this->mapa->height;
         $w = $this->mapa->width;
         $nomelayer = $this->incmapageometrias($dir_tmp, $imgdir, basename($nomegeo));
         if ($nomelayer != "erro") {
             $nlayer = $this->mapa->getlayerbyname($nomelayer);
             $bounds = $nlayer->getExtent();
             $this->mapa->setsize(30, 30);
             $sb = $this->mapa->scalebar;
             $statusoriginal = $sb->status;
             $sb->set("status", MS_OFF);
             $ext->setextent($bounds->minx, $bounds->miny, $bounds->maxx, $bounds->maxy);
             $imagem = gravaImagemMapa($this->mapa);
             $this->mapa->setsize($w, $h);
             $ext->setextent($minx, $miny, $maxx, $maxy);
             $nlayer->set("status", MS_DELETE);
             $sb->set("status", $statusoriginal);
             $this->salva();
             $final = array();
             $final["layer"] = $operacao . " " . implode(" ", $lista);
             $final["dados"][] = array("id" => "0", "wkt" => $calculo[0]["gwkt"], "valores" => $valoresoriginais, "imagem" => $imagem["url"]);
             $this->serializeGeo($nomegeo, $final);
         }
     }
     return $nomegeo;
 }
Beispiel #4
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&atilde;o exista, que servir&aacute; de base para obten&ccedil;&atilde;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&atilde;o existir, tenta inserir com base no mapfile existente no diret&oacute;rio temas
    //o tema pode existir se a fun&ccedil;&atilde;o estiver sendo chamada da &aacute;rvore de temas de um mapa j&aacute; 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&atilde;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");
}
Beispiel #5
0
function autoClassesLayer()
{
    global $codigoMap, $codigoLayer, $locaplic, $dir_tmp, $postgis_mapa;
    $mapfile = $locaplic . "/temas/" . $codigoMap . ".map";
    include_once "{$locaplic}/classesphp/classe_alteraclasse.php";
    error_reporting(0);
    $nometemp = $dir_tmp . "/" . nomerandomico() . ".map";
    $versao = versao();
    $versao = $versao["principal"];
    if ($base == "" || !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;
        }
    }
    $mapageral = ms_newMapObj($base);
    $numlayers = $mapageral->numlayers;
    for ($i = 0; $i < $numlayers; $i++) {
        $layertemp = $mapageral->getlayer($i);
        $layertemp->set("status", MS_DELETE);
    }
    $mapatemp = ms_newMapObj($mapfile);
    $numlayers = $mapatemp->numlayers;
    for ($i = 0; $i < $numlayers; $i++) {
        $layertemp = $mapatemp->getlayer($i);
        //troca string de conexao com alias
        $lcon = $layertemp->connection;
        if ($layertemp->connectiontype == MS_POSTGIS) {
            if (in_array($lcon, array_keys($postgis_mapa))) {
                $layertemp->set("connection", $postgis_mapa[$lcon]);
            }
        }
        ms_newLayerObj($mapageral, $layertemp);
    }
    $mapageral->save($nometemp);
    $m = new Alteraclasse($nometemp, $codigoLayer);
    $m->valorunico($_GET["itemExpressao"], "", $_GET["itemNome"]);
    $m->salva();
    $mapatemp = ms_newMapObj($nometemp);
    $numlayers = $mapatemp->numlayers;
    for ($i = 0; $i < $numlayers; $i++) {
        $layertemp = $mapatemp->getlayer($i);
        //troca string de conexao com alias
        if ($layertemp->connectiontype == MS_POSTGIS) {
            $layertemp->set("connection", $lcon);
        }
    }
    $mapatemp->save($mapfile);
    removeCabecalho($mapfile);
}