Carregando o arquivo...
"; ob_flush(); flush(); sleep(1); $arqshp = $_FILES['i3GEOuploadshp']['tmp_name']; //verifica nomes e sobe arquivo verificaNome($_FILES['i3GEOuploadshp']['name'],"shp"); $nomePrefixo = str_replace(" ","_",removeAcentos(str_replace(".shp","",$_FILES['i3GEOuploadshp']['name']))); $nomePrefixo = $nomePrefixo."_".(nomeRandomico(4)); $Arquivo = $_FILES['i3GEOuploadshp']['tmp_name']; $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".shp"); if($status != 1) {echo "Ocorreu um erro no envio do arquivo SHP";exit;} $Arquivo = $_FILES['i3GEOuploadshx']['tmp_name']; $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".shx"); if($status != 1) {echo "
Ocorreu um erro no envio do arquivo SHX";exit;} $Arquivo = $_FILES['i3GEOuploaddbf']['tmp_name']; $status = move_uploaded_file($Arquivo,$dir_tmp."/".$nomePrefixo.".dbf"); if($status != 1) {echo "
Ocorreu um erro no envio do arquivo DBF";exit;} if(!file_exists($dir_tmp."/".$nomePrefixo.".shp")) {echo "
Ocorreu algum problema no envio do arquivo ".$dir_tmp."/".$nomePrefixo;paraAguarde();exit;}
$arqshp = $dir_tmp."/".$nomePrefixo.".shp";
//pega os parametros de conexao
include("classe_metaestat.php");
$m = new Metaestat();
$conexao = $m->listaConexao($_POST["i3GEOuploadcodigoconexao"],true);
//array(5) { ["codigo_estat_conexao"]=> string(1) "1" ["bancodedados"]=> string(8) "geosaude" ["host"]=> string(9) "localhost" ["porta"]=> string(4) "5432" ["usuario"]=> string(8) "postgres" }
//pega as colunas do shapefile
$shapefileObj = ms_newShapefileObj($arqshp,-1);
$numshapes = $shapefileObj->numshapes;
$mapObj = ms_newMapObjFromString("MAP END");
$layer = ms_newLayerObj($mapObj);
$layer->set("data",$arqshp);
$layer->open();
$colunasTemp = $layer->getItems();
$colunas = array();
foreach($colunasTemp as $c){
//abaixo gid e forçado a entrar
if(!is_numeric($c) && strtolower($c) != "gid"){
$colunas[] = $c;
}
}
echo "
Numshapes existentes no SHP: ". $numshapes;
$tipo = $shapefileObj->type;
echo "
Tipo: ". $tipo;
echo "
Colunas: ";
var_dump($colunas);
ob_flush();
flush();
sleep(1);
$sqinsert = array();
//verifica o tipo de coluna
$tipoColuna = array();
if($numshapes < 10){
$testar = $numshapes;
}
else{
$testar = 10;
}
foreach($colunas as $coluna){
$tipo = "numeric";
for ($i=0; $i<$testar;$i++){
$s = $layer->getShape(new resultObj($i));
$v = $s->getValue($layer,$coluna);
if(!is_numeric($v)){
$tipo = "varchar";
}
}
$tipoColuna[$coluna] = $tipo;
}
echo "
Tipos das colunas:
"; var_dump($tipoColuna); echo ""; ob_flush(); flush(); sleep(1); try { $dbh = new PDO('pgsql:dbname='.$conexao["bancodedados"].';user='.$conexao["usuario"].';password='.$conexao["senha"].';host='.$conexao["host"].';port='.$conexao["porta"]); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); exit; } //gera o script para criar a tabela //verifica se a tabela ja existe $sql = "SELECT table_name FROM information_schema.tables where table_schema = '".$_POST["i3GEOuploadesquema"]."' AND table_name = '".$_POST["tabelaDestino"]."'"; $res = $dbh->query($sql,PDO::FETCH_ASSOC); if(count($res->fetchAll())>0){ $tabelaExiste = true; } else{ $tabelaExiste = false; } //encoding do banco de dados $sql = "SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname = '".$conexao["bancodedados"]."'"; $res = $dbh->query($sql,PDO::FETCH_ASSOC); $encodingdb = $res->fetchAll(); $encodingdb = $encodingdb[0]; $encodingdb = $encodingdb["pg_encoding_to_char"]; if($encodingdb == "UTF8"){ $encodingdb = "UTF-8"; } if($encodingdb == "LATIN1"){ $encodingdb = "ISO-8859-1"; } //a tabela nao existe e e do tipo create $sqltabela = array(); if($tabelaExiste == false && $_POST["tipoOperacao"] == "criar"){ $sql = "CREATE TABLE ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]."(the_geom geometry"; foreach($colunas as $coluna){ $sql .= ",".strtolower($coluna)." ".$tipoColuna[$coluna]; } $sql .= ")WITH(OIDS=FALSE)"; $sqltabela[] = $sql; $sqltabela[] = "ALTER TABLE ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]." OWNER TO ".$conexao["usuario"]; $sqltabela[] = "CREATE INDEX ".$_POST["tabelaDestino"]."_indx_thegeom ON ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]." USING gist (the_geom )"; echo "
"; var_dump($sqltabela); echo ""; ob_flush(); flush(); sleep(1); } if($tabelaExiste == true && $_POST["tipoOperacao"] == "criar"){ echo "A tabela existe. Não pode ser criada."; exit; } //se a tabela existe e e para remover os registros if($tabelaExiste == true && $_POST["tipoOperacao"] == "apagar"){ $sqltabela[] = "delete from ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]; } if($tabelaExiste == true && $_POST["tipoOperacao"] == "apagar" && $_POST["i3GEOuploadesquema"] != "i3geo_metaestat"){ echo "Não é possível executar essa operação nesse esquema."; exit; } //gera o script para inserir os dados $linhas = array(); $insert = "INSERT INTO ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]." (".strtolower(implode(",",$colunas)).",the_geom)"; echo "
".var_dump($linhas);exit; $layer->close(); echo "
Incluindo dados"; echo ""; ob_flush(); flush(); sleep(1); if($_POST["incluiserialshp"] == "on"){ $linhas[] = "alter table ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]." add gid serial CONSTRAINT ".$_POST["tabelaDestino"]."_gid_pkey PRIMARY KEY"; echo "
alter table ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]." add gid serial CONSTRAINT ".$_POST["tabelaDestino"]."_gid_pkey PRIMARY KEY"; } foreach($sqltabela as $linha){ try { $dbh->query($linha); } catch (PDOException $e) { echo 'Erro: ' . $e->getMessage(); } } foreach($linhas as $linha){ try { $res = $dbh->query($linha); if($res == false){ echo "
Erro em: ".$linha; } } catch (PDOException $e) { echo 'Erro: ' . $e->getMessage(); } } echo "
Registros existentes no SHP: ". $numshapes; $sql = "select * from ".$_POST["i3GEOuploadesquema"].".".$_POST["tabelaDestino"]; $q = $dbh->query($sql,PDO::FETCH_ASSOC); $r = $q->fetchAll(); echo "
Registros na tabela final: ". count($r); echo "
Diferenças podem ocorrer em função de caracteres acentuados não suportados pelo banco de dados"; echo "
Feito!!!
Faça o reload da página"; } else{ echo "Erro ao enviar o arquivo. Talvez o tamanho do arquivo seja maior do que o permitido.
"; } function verificaNome($nome,$ext){ $nome = strtolower($nome); $lista = explode(".",$nome); $extensao = $lista[count($lista) - 1]; if($extensao != $ext){ echo "Nome de arquivo inválido."; exit; } } ?>