<?php
header('Content-Type: application/json;charset= utf-8');
ini_set('memory_limit','10G');
set_time_limit(0);
require("dbinfo.php");
require("dl.php");
$con = mysqli_connect($sqlname, $username, $password, $db);
if(!$con){exit;}

$habilitados = 'false';
$publicados = 'false';
$fecha = '2024-12-02';
$filtro = 'true';
$sql_filtro = " AND (etapa = 'Construido Habilitado' OR etapa = 'Construido en Desuso') ";




$fecha_nombre_archivo = dl_fecha::dl_ahora_texto_nombre_archivo();
$nombre_archivo = "referencias/Shapefile/tramos" . $fecha_nombre_archivo;
$nombre_achivo_con_extension = $nombre_archivo . ".shp";

$nombre_prj = $nombre_archivo . ".prj";
$archivo_prj = fopen($nombre_prj,"w"); 
$renglon = 'PROJCS["WGS_1984_UTM_Zone_21S",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0.0],PARAMETER["central_meridian",-57.0],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000.0],PARAMETER["false_northing",10000000.0],UNIT["Meter",1.0]]';
fwrite($archivo_prj,$renglon);
fclose($archivo_prj);

require_once('referencias/Shapefile/ShapefileAutoloader.php');
Shapefile\ShapefileAutoloader::register();
use Shapefile\Shapefile;
use Shapefile\ShapefileException;
use Shapefile\ShapefileWriter;
use Shapefile\Geometry\Point;
use Shapefile\Geometry\Linestring;
$Shapefile = new ShapefileWriter($nombre_archivo);
$Shapefile->setShapeType(Shapefile::SHAPE_TYPE_POLYLINE);

$Shapefile->addNumericField('id');
$Shapefile->addCharField('etapa', 254);
$Shapefile->addCharField('tiposec', 5);
$Shapefile->addCharField('tipotra', 4);
$Shapefile->addCharField('datodeobra', 34);
$Shapefile->addFloatField('dim1',20,2);
$Shapefile->addFloatField('dim2',20,2);
$Shapefile->addFloatField('zarriba',20,2);
$Shapefile->addFloatField('zabajo',20,2);
$Shapefile->addFloatField('longitud',20,2);
$Shapefile->addNumericField('elem_red');
$Shapefile->addNumericField('anio');


if ($filtro !== 'true')
{
$Shapefile->addNumericField('id_psig_aa');
$Shapefile->addNumericField('id_psig_ab');
$Shapefile->addFloatField('dim3',20,2);
$Shapefile->addFloatField('dim4',20,2);
$Shapefile->addNumericField('contrato');
$Shapefile->addCharField('desccon', 254);
$Shapefile->addNumericField('proyecto');
$Shapefile->addCharField('descpro', 254);
$Shapefile->addFloatField('z_tapa_aa',20,2);
$Shapefile->addFloatField('z_tapa_ab',20,2);
$Shapefile->addFloatField('prof_aa',20,2);
$Shapefile->addFloatField('prof_ab',20,2);
$Shapefile->addCharField('alta_fue', 100);
$Shapefile->addCharField('alta_fe', 50);
$Shapefile->addCharField('calle', 254);
$Shapefile->addCharField('material', 254);
$Shapefile->addCharField('estado', 254);
$Shapefile->addCharField('accion', 254);
$Shapefile->addCharField('ccz', 254);
$Shapefile->addCharField('cuenca', 254);
$Shapefile->addFloatField('pendiente',20,2);
$Shapefile->addFloatField('salto',20,2);
$Shapefile->addCharField('fotos', 254);
$Shapefile->addCharField('empresa', 50);//dato1
$Shapefile->addNumericField('validar');//dato3
$Shapefile->addCharField('habilitado', 50);
$Shapefile->addCharField('publicado', 50);
$Shapefile->addCharField('fueraser', 50);
$Shapefile->addCharField('sur', 100);
$Shapefile->addCharField('criti', 20);
$Shapefile->addCharField('coment', 254);
}




$sql = "SELECT astext(SHAPE) AS geom, elemred,tiposec, (SELECT codigo FROM adm_clases WHERE id = cat_tramos.tiposec LIMIT 1) as descsec,";
$sql .= " tipotra, (SELECT codigo FROM adm_tipos WHERE id = cat_tramos.tipotra LIMIT 1) as desctra,";
$sql .= " id_psig_aa, id_psig_ab, dim1, dim2, dim3, dim4, material,zarriba, zabajo, z_tapa_aa, z_tapa_ab, prof_aa, prof_ab, fotos, ";
$sql .= " longitud, pendiente, salto, estado, accion, ccz, cuenca,alta_fuente,alta_fecha, calle, comentarios, etapa, plano, dato1, dato3, dato4,fueraservicio,";
$sql .= " contrato, (SELECT nombre FROM adm_contratos WHERE id = cat_tramos.contrato LIMIT 1) as desccon,";
$sql .= " proyecto, (SELECT nombre FROM adm_proyectos WHERE id = cat_tramos.proyecto LIMIT 1) as descpro, ";
$sql .= " habilitado, publicado, fueraservicio, sur, criticidad";
$sql .= " FROM cat_tramos WHERE activo = 1 ";
$sql .= $sql_filtro;

$resultado = mysqli_query($con,$sql);
if ($resultado != FALSE){
	if (mysqli_num_rows($resultado) > 0){
		while($row = mysqli_fetch_assoc($resultado))
		{
				$geom = $row["geom"];
                $elemred = $row["elemred"];
                $tiposec = $row["tiposec"];
				$descsec = $row["descsec"];
				if($tiposec == 0){$descsec = 'NULL';}
				$tipotra = $row["tipotra"];
				$desctra = $row["desctra"];
				$id_psig_aa = $row["id_psig_aa"];
				$id_psig_ab = $row["id_psig_ab"];
				$dim1 = $row["dim1"];
				$dim2 = $row["dim2"];
				$dim3 = $row["dim3"];
				$dim4 = $row["dim4"];
				$material = $row["material"];
				$zarriba = $row["zarriba"];
				$zabajo = $row["zabajo"];
				$z_tapa_aa = $row["z_tapa_aa"];
				$z_tapa_ab = $row["z_tapa_ab"];
				$prof_aa = $row["prof_aa"];
				$prof_ab = $row["prof_ab"];
				$longitud = $row["longitud"];
				$pendiente = $row["pendiente"];
				$salto = $row["salto"];
				$estado = $row["estado"];
				$accion = $row["accion"];
				$ccz = $row["ccz"];
				$cuenca = $row["cuenca"];
				$alta_fuente = $row["alta_fuente"];
				$alta_fecha = $row["alta_fecha"];
				$calle = $row["calle"];
				$comentarios = $row["comentarios"];
				$etapa = $row["etapa"];
				$plano = $row["plano"];
				$empresa = $row["dato1"];
				$validar = intval($row["dato3"]);
				$plano = $row["plano"];
				$dato4 = intval($row["dato4"]);
				$contrato = $row["contrato"];
				$fotos = $row["fotos"];
				$desccon = $row["desccon"];
				$proyecto = $row["proyecto"];
				$descpro = $row["descpro"];
				$fueraservicio = $row["fueraservicio"];
				$habilitado = $row["habilitado"];
				$publicado = $row["publicado"];
				$sur = $row["sur"];
				$criti = $row["criticidad"];
				
if($fueraservicio != '')
{
	$destra = 'FS';
}

	$linea = new Linestring(); 
	$geom = substr($geom, 11);
	$geom = substr($geom, 0, -1);
	$puntos = explode(",",$geom);
    foreach ($puntos as $punto) {
		$coords = explode(" ",$punto);
		$utm = dl_coordenadas::dl_ll_a_sirgas($coords[1],$coords[0]);			
		$Point = new Point($utm['x'],$utm['y']); 
		$linea->addPoint($Point);
    }


		$linea->setData('id',$elemred);
	    $linea->setData('elem_red',$elemred);
		$linea->setData('etapa',$etapa);
		$linea->setData('tiposec',$descsec);
    	$linea->setData('tipotra', $desctra);
		$linea->setData('dim1', $dim1);
		$linea->setData('dim2', $dim2);
		$linea->setData('zarriba',$zarriba);	
		$linea->setData('zabajo',$zabajo);
		$linea->setData('longitud', $longitud);
		$linea->setData('datodeobra', $plano);
		$linea->setData('anio', $dato4);

		if ($filtro !== 'true')
		{
				$linea->setData('id_psig_aa', $id_psig_aa);
				$linea->setData('id_psig_ab', $id_psig_ab);
				$linea->setData('dim3', $dim3);
				$linea->setData('dim4', $dim4);
				$linea->setData('contrato', $contrato);
				$linea->setData('desccon', $desccon);
				$linea->setData('proyecto', $proyecto);
				$linea->setData('descpro', $descpro);
				$linea->setData('z_tapa_aa', $z_tapa_aa);
				$linea->setData('z_tapa_ab', $z_tapa_ab);
				$linea->setData('prof_aa', $prof_aa);	
				$linea->setData('prof_ab', $prof_ab);
				$linea->setData('alta_fue', $alta_fuente);
				$linea->setData('alta_fe', $alta_fecha);
				$linea->setData('calle', $calle);
				$linea->setData('material', $material);
				$linea->setData('estado', $estado);
				$linea->setData('accion', $accion);
				$linea->setData('ccz', $ccz);
				$linea->setData('cuenca', $cuenca);
				$linea->setData('pendiente', $cuenca);
				$linea->setData('salto', $salto);
				$linea->setData('fotos', $fotos);
				$linea->setData('empresa', $empresa);
				$linea->setData('validar', $validar);
				$linea->setData('habilitado', $habilitado);
				$linea->setData('publicado', $publicado);
				$linea->setData('fueraser', $fueraservicio);
				$linea->setData('sur', $sur);
				$linea->setData('criti', $criti);
				if ($comentarios == ''){$comentarios = 'Sin comentarios';}
				$linea->setData('coment', $comentarios);
		}


	$Shapefile->writeRecord($linea);
}



}}




$tmp_file = '';
    $Shapefile = null;
	$files = glob($nombre_archivo . "*");
	if (count($files) > 0)
	{
	   $zip = new ZipArchive();
	   $ruta_completa = $_SERVER['DOCUMENT_ROOT'] . '/COLECTORES/php/referencias/Shapefile';
	   $tmp_file = $ruta_completa . '/tramos' . $fecha_nombre_archivo . '.zip';
	   $zip->open($tmp_file, ZipArchive::CREATE);
	   foreach($files as $file){
		   $file2 = $_SERVER['DOCUMENT_ROOT'] . '/COLECTORES/php/' . $file;
		   $ruta_archivo = pathinfo($file); 
		   $nombre_archivo2 = $ruta_archivo["basename"]; 


		   $extension = strtolower(substr($nombre_archivo2, -3));
		   if ($extension == 'dbf')
		   {
							// Modificar los nombres de campo en el archivo DBF
							$rutaadbf = $ruta_completa . "/" . $nombre_archivo2;
							$dbfFile = fopen($rutaadbf, 'r+');
							// Leer la cabecera del archivo DBF
							$header = fread($dbfFile, 32);
							// Calcular el número de campos
							$numFields = (ord($header[10]) + (ord($header[11]) << 8) - 1) / 32;
							// Leer y modificar cada entrada de campo
							for ($i = 0; $i < $numFields; $i++) {
								fseek($dbfFile, 32 + $i * 32);
								$fieldName = fread($dbfFile, 11);
								// Convertir el nombre del campo a minúsculas y rellenar con espacios en blanco si es necesario
								$fieldName = str_pad(strtolower($fieldName), 11);
								fseek($dbfFile, 32 + $i * 32);
								fwrite($dbfFile, $fieldName);
							}
							// Cerrar el archivo DBF
							fclose($dbfFile);
		   }



		   $zip->addFile($file2,$nombre_archivo2);
	   }
	   $zip->close();

	   unlink($nombre_archivo . ".dbf");
	   unlink($nombre_archivo . ".shp");
	   unlink($nombre_archivo . ".shx");
	   unlink($nombre_archivo . ".prj");
	}

	$nombre_archivo = "referencias/Shapefile/tramos*.zip";
	$files = glob($nombre_archivo);
	foreach($files as $file){
		$ruta_archivo = pathinfo($file); 
		$nombre_archivo2 = $ruta_archivo["dirname"] . "/". $ruta_archivo["basename"];
		$fecha_fichero= dl_fecha::dl_fecha_texto_a_date(date('Y-m-d H:i:s',filemtime($nombre_archivo2)));
		$fecha_ahora = dl_fecha::dl_ahora_date();
		$interval = $fecha_ahora->diff($fecha_fichero);
		$horas =  ($interval->format('%y') * 635) + ($interval->format('%m') * 30) + ($interval->format('%d') * 24) + $interval->format('%h');
		if ($horas > 4){
			unlink($nombre_archivo2);
		}
	}

	if ($publicados === 'true')
	{
		$sql = "UPDATE cat_tramos SET publicado = '". $fecha ."' WHERE habilitado <> ''";
		$resultado = mysqli_query($con,$sql);
	}

mysqli_close($con);
$url_completo = $_SERVER['SERVER_NAME'] . '/COLECTORES/php/referencias/Shapefile/tramos' . $fecha_nombre_archivo . '.zip';;	
echo $url_completo;

    ?>


