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"; }
} } 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;
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; }
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 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); }