Pasta não encontrada";
exit ();
}
echo "
Carregando o arquivo...
";
ob_flush ();flush (); sleep ( 2 );
if (! file_exists ( $_SESSION ["dir_tmp"] ) || empty($_SESSION ["dir_tmp"])) {
echo "Pasta temporária não existe no servidor
";
exit ();
}
// verifica nomes
verificaNome ( $_FILES ['i3GEOuploadshp'] ['name'] );
verificaNome ( $_FILES ['i3GEOuploadshx'] ['name'] );
verificaNome ( $_FILES ['i3GEOuploaddbf'] ['name'] );
// remove acentos
$nomePrefixo = "shp2pg".(rand (9000,10000)) * -1;
// sobe arquivo
$Arquivo = $_FILES ['i3GEOuploadshp'] ['tmp_name'];
$status = move_uploaded_file ( $Arquivo, $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".shp" );
if ($status != 1) {
echo "Ocorreu um erro no envio do arquivo SHP. Pode ser uma limitação quanto ao tamanho do arquivo ou permissão de escrita na pasta indicada.
";
exit ();
}
$Arquivo = $_FILES ['i3GEOuploadshx'] ['tmp_name'];
$status = move_uploaded_file ( $Arquivo, $_SESSION ["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, $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".dbf" );
if ($status != 1) {
echo "Ocorreu um erro no envio do arquivo DBF
";
exit ();
}
if (! file_exists ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".shp" )) {
echo "Ocorreu algum problema no envio do arquivo
";
exit ();
}
$checkphp = \admin\php\funcoesAdmin\fileContemString ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".shx", "Arquivo shx invalido";
unlink ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".shp" );
unlink ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".dbf" );
unlink ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".shx" );
exit ();
}
$checkphp = \admin\php\funcoesAdmin\fileContemString ( $dirmap . "/" . $nomePrefixo . ".dbf", "Arquivo dbf invalido";
unlink ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".shp" );
unlink ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".dbf" );
unlink ( $_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".shx" );
exit ();
}
echo "Arquivo enviado.
";
//
//gera o script para inclusao no banco
//
$shapefileObj = ms_newShapefileObj($_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".shp",-1);
$numshapes = $shapefileObj->numshapes;
echo "Numshapes existentes no SHP: " . $numshapes . "
";
ob_flush ();flush (); sleep ( 2 );
$mapObj = ms_newMapObjFromString("MAP END");
$layer = ms_newLayerObj($mapObj);
$layer->set("data",$_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".shp");
if(file_exists($_SESSION ["dir_tmp"] . "/" . $nomePrefixo . ".prj")){
//$layer->setprojection("AUTO");
}
$layer->open();
$colunasTemp = $layer->getItems();
$colunas = array();
foreach($colunasTemp as $c){
if(!is_numeric($c)){
$colunas[] = $c;
}
}
echo "Tipo do SHP: " . $shapefileObj->type . "
";
echo "Colunas:
";
print_r( $colunas );
echo "
";
ob_flush(); flush(); sleep(2);
$sqinsert = array();
//verifica o tipo de coluna
$tipoColuna = array();
$testar = $numshapes;
if($numshapes > 50){
$testar = 50;
}
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:
";
print_r( $tipoColuna );
echo "
";
//verifica autorizacao para o esquema
if(empty($_POST["i3GEOuploadEsquemaDestino"]) || !in_array($_POST["i3GEOuploadEsquemaDestino"],$_SESSION["i3geoUploadDataWL"]["postgis"]["esquemas"])){
echo "Esquema não permitido
";
exit;
}
$conexao = $_SESSION["i3geoUploadDataWL"]["postgis"]["conexao"];
try {
$dbh = new PDO('pgsql:dbname='.$conexao["dbname"].';user='.$conexao["user"].';password='.$conexao["password"].';host='.$conexao["host"].';port='.$conexao["port"]);
} catch (PDOException $e) {
echo "Falha ao conectar com o banco
";
exit;
}
if(empty($_POST["i3GEOuploadNomeTabela"]) || empty($_POST["i3GEOuploadEsquemaDestino"])){
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["i3GEOuploadEsquemaDestino"]."' AND table_name = '".$_POST["i3GEOuploadNomeTabela"]."'";
$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["dbname"]."'";
$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["i3GEOuploadTipoOperacao"] == "criar"){
$sql = "CREATE TABLE ".$_POST["i3GEOuploadEsquemaDestino"].".".$_POST["i3GEOuploadNomeTabela"]."(the_geom geometry";
foreach($colunas as $coluna){
$sql .= ",".\admin\php\funcoesAdmin\removeAcentos(strtolower($coluna))." ".$tipoColuna[$coluna];
}
$sql .= ")WITH(OIDS=FALSE)";
$sqltabela[] = $sql;
$sqltabela[] = "ALTER TABLE ".$_POST["i3GEOuploadEsquemaDestino"].".".$_POST["i3GEOuploadNomeTabela"]." OWNER TO ".$conexao["user"];
$sqltabela[] = "CREATE INDEX ".$_POST["i3GEOuploadNomeTabela"]."_indx_thegeom ON ".$_POST["i3GEOuploadEsquemaDestino"].".".$_POST["i3GEOuploadNomeTabela"]." USING gist (the_geom )";
if(!empty($_POST["i3GEOuploadComentario"])){
$enc = mb_detect_encoding($texto);
$_POST["i3GEOuploadComentario"] = mb_convert_encoding($_POST["i3GEOuploadComentario"],$encodingdb,$enc);
$sqltabela[] = "COMMENT ON TABLE ".$_POST["i3GEOuploadEsquemaDestino"].".".$_POST["i3GEOuploadNomeTabela"]." IS '".$_POST["i3GEOuploadComentario"]."'";
}
echo "Sql tabela:
";
print_r( $sqltabela );
echo "
";
}
if($tabelaExiste == true && $_POST["i3GEOuploadTipoOperacao"] == "criar"){
echo "A tabela existe. Não pode ser criada.
";
exit;
}
//se a tabela existe e e para atualizar os registros
if($tabelaExiste == true && $_POST["i3GEOuploadTipoOperacao"] == "atualizar"){
$sqltabela[] = "delete from ".$_POST["i3GEOuploadEsquemaDestino"].".".$_POST["i3GEOuploadNomeTabela"];
}
//gera o script para inserir os dados
$linhas = array();
$insert = "INSERT INTO ".$_POST["i3GEOuploadEsquemaDestino"].".".$_POST["i3GEOuploadNomeTabela"]." (".strtolower(\admin\php\funcoesAdmin\removeAcentos(implode(",",$colunas))).",the_geom)";
echo "Preparando inclusão de dados...
";
ob_flush();
flush();
sleep(1);
$escapar = "'";
//
//caso o usuario tenha definido a projecao de saida, os dados devem ser projetados
//
$mapObj->setProjection("init=epsg:".$_POST["i3GEOuploadSridDestino"]);
$layer->setProjection("init=epsg:".$_POST["i3GEOuploadSridOrigem"]);
$projInObj = $layer->getProjection();
$projOutObj = $mapObj->getProjection();
for ($i=0; $i<$numshapes;$i++){
$s = $layer->getShape(new resultObj($i));
//projeta o shape
if($_POST["i3GEOuploadSridDestino"] != $_POST["i3GEOuploadSridOrigem"]){
$s->project(ms_newProjectionObj($projInObj), ms_newProjectionObj($projOutObj));
}
$vs = array();
foreach($colunas as $coluna){
$escape = "";
if($tipoColuna[$coluna] == "varchar"){
$texto = $s->getValue($layer,$coluna);
$enc = mb_detect_encoding($texto);
$textosl = addcslashes($texto,$escapar);
if($textosl != $texto){
$escape = "E";
}
if($enc != "" && $enc != $encodingdb){
$textosl = "$escape'".mb_convert_encoding($textosl,$encodingdb,$enc)."'";
}
else{
$textosl = "$escape'".$textosl."'";
}
if($textosl == "''"){
$textosl = 'null';
}
$vs[] = $textosl;
}
else{
$valor = $s->getValue($layer,$coluna);
if($valor == "" || (empty($valor) && $valor != 0)){
$valor = 'nulo';
}
$vs[] = $valor;
}
}
if($_POST["i3GEOuploadSridDestino"] == $_POST["i3GEOuploadSridOrigem"]){
$vs[] = "st_geomfromtext('".$s->toWkt()."','".$_POST["i3GEOuploadSridDestino"]."')";
}
else{
$vs[] = "st_transform(st_geomfromtext('".$s->toWkt()."','".$_POST["i3GEOuploadSridDestino"]."'),'".$_POST["i3GEOuploadSridDestino"]."')";
}
$str = implode(",",$vs);
$str = str_replace("nulo",'null',$str);
$linhas[] = $insert."VALUES(".$escape."".$str.")";
}
$layer->close();
if(!in_array($_POST["i3GEOuploadColunaGid"],$colunas) && $_POST["i3GEOuploadTipoOperacao"] == "criar"){
$linhas[] = "alter table ".$_POST["i3GEOuploadEsquemaDestino"].".".$_POST["i3GEOuploadNomeTabela"]." add " . $_POST["i3GEOuploadColunaGid"] . " serial CONSTRAINT ".$_POST["i3GEOuploadNomeTabela"]."_gid_pkey PRIMARY KEY";
}
if($_POST["i3GEOuploadApenasScript"] == "on"){
echo "Sql de inserção de dados:
";
foreach($linhas as $linha){
echo( $linha )."\n";
}
echo "
";
} else {
//aqui o sql e executado verdadeiramente
//antes e feito um backup da tabela
//$sqltabela sera vazio se a tabela ja existir
foreach($sqltabela as $linha){
try {
$dbh->query($linha);
} catch (PDOException $e) {
echo "Não foi possível criar a tabela
";
exit;
}
}
//para testar com acentuacao diferente
$conexao = $_SESSION["i3geoUploadDataWL"]["postgis"]["conexao"];
$bdcon = pg_connect('dbname='.$conexao["dbname"].' user='.$conexao["user"].' password='.$conexao["password"].' host='.$conexao["host"].' port='.$conexao["port"]."options='-c client_encoding=LATIN1'");
echo "Sql de inserção de dados com erros ou modificados:
";
foreach($linhas as $linha){
try {
$res = $dbh->query($linha);
if($res == false){
$res = pg_query($bdcon,$linha);
if($res == false){
$linha = remove_accents($linha);
$res = $dbh->query($linha);
if($res == false){
$res = pg_query($bdcon,$linha);
if($res == false){
echo "Erro em: $linha
";
}
}
else{
echo "Acentos removidos: $linha
";
}
}
}
} catch (PDOException $e) {
echo "Não foi possível executar os SQLs
";
}
}
echo "
";
$sql = "select * from ".$_POST["i3GEOuploadEsquemaDestino"].".".$_POST["i3GEOuploadNomeTabela"];
$q = $dbh->query($sql,PDO::FETCH_ASSOC);
$r = $q->fetchAll();
echo "";
echo "
Registros existentes no SHP: $numshapes
";
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!!!
";
echo "
";
}
//
ob_flush ();flush (); sleep ( 2 );
$nomeMapfile = $_SESSION ["locaplic"] . "/temas/" . $_POST["i3GEOuploadNomeTabela"] . ".map";
if ($_POST["i3GEOuploadCriaMapfile"] == "on" && file_exists ( $nomeMapfile )) {
echo "Arquivo mapfile com o nome " . $_POST["i3GEOuploadNomeTabela"] . "já existe.
";
$_POST["i3GEOuploadCriaMapfile"] = "";
}
if ($_POST["i3GEOuploadCriaMapfile"] == "on" && $_POST["i3GEOuploadAliasConexao"] != "") {
$_POST["i3GEOuploadAliasConexao"] = str_replace(" ","",$_POST["i3GEOuploadAliasConexao"]);
if(!in_array($_POST["i3GEOuploadAliasConexao"],array_keys($_SESSION ["postgis_mapa"]))){
echo "Alias para a conexão com o banco não definida
";
} else {
echo "Criando mapfile...
";
ob_flush ();flush (); sleep ( 2 );
if ($shapefileObj->type == 1) {
$tipoLayer = MS_LAYER_POINT;
}
if ($shapefileObj->type == 3) {
$tipoLayer = MS_LAYER_LINE;
}
if ($shapefileObj->type == 5) {
$tipoLayer = MS_LAYER_POLYGON;
}
include ($_SESSION ["locaplic"] . "/admin/catalogo/mapfile/funcoes.php");
$cria = \admin\catalogo\mapfile\adicionar ( $_SESSION ["locaplic"], $_POST["i3GEOuploadNomeTabela"], "", $_POST["i3GEOuploadNomeTabela"], "", "", $_POST["i3GEOuploadNomeTabela"], "", $_POST["i3GEOuploadNomeTabela"], $_POST["i3GEOuploadNomeTabela"], true, $dbhw );
if ($cria == true && file_exists ( $_SESSION ["locaplic"] . "/temas/" . $_POST["i3GEOuploadNomeTabela"] . ".map" )) {
$mapa = ms_newMapObj ( $_SESSION ["locaplic"] . "/temas/" . $_POST["i3GEOuploadNomeTabela"] . ".map" );
$layer = $mapa->getLayerByName ( $_POST["i3GEOuploadNomeTabela"] );
$layer->set ( "data", "the_geom from (select * from " . $_POST["i3GEOuploadEsquemaDestino"] . "." . $_POST["i3GEOuploadNomeTabela"] . ") as foo using unique " . $_POST["i3GEOuploadColunaGid"] . " using srid=" . $_POST["i3GEOuploadSridDestino"] );
$layer->set("connection",$_POST["i3GEOuploadAliasConexao"]);
$layer->setconnectiontype(6);
$layer->set ( "type", $tipoLayer );
if($shapefileObj->type == 1){
$classe = $layer->getclass(0);
$estilo = $classe->getstyle(0);
$estilo->set("symbolname","ponto");
}
$mapa->save ( $_SESSION ["locaplic"] . "/temas/" . $_POST["i3GEOuploadNomeTabela"] . ".map" );
\admin\php\funcoesAdmin\removeCabecalhoMapfile ( $_SESSION ["locaplic"] . "/temas/" . $_POST["i3GEOuploadNomeTabela"] . ".map" );
echo "Mapfile " . $_POST["i3GEOuploadNomeTabela"] ." criado!!!
";
} else {
echo "Mapfile não pode ser criado criado!!!
";
}
}
}
echo "Pode fechar essa janela.
";
} else {
echo "Erro ao enviar o arquivo. Talvez o tamanho do arquivo seja maior do que o permitido.
";
}
if (file_exists ( $_SESSION ["locaplic"] . "/temas/" . $_POST["i3GEOuploadNomeTabela"] . ".map" )) {
echo "";
}
function verificaNome($nome) {
if (strlen ( basename ( $nome ) ) > 200) {
exit ();
}
$nome = strtolower ( $nome );
$lista = explode ( ".", $nome );
$extensao = $lista [count ( $lista ) - 1];
if (($extensao != "dbf") && ($extensao != "shx") && ($extensao != "shp") && ($extensao != "prj")) {
echo "Nome de arquivo inválido. $nome";
exit ();
}
}
?>