TU ANUNCIO / YOUR PUBLICITY

AQUÍ PODRÍA ESTAR TU ANUNCIO: / HERE COULD BE YOUR AD E-mail

domingo, 22 de febrero de 2015

Optimized GIS for linear projects XVIII (Consultas de inspecciones) / SIG optimizado para obras lineales XVIII (Inspection queries)

Previamente: / Previously:

Optimized GIS for linear projects XVII (Consultas 2)
SIG optimizado para obras lineales XVII (Queries 2)

Índice Index

1.- Introducción
   1.1.- Situación actual
   1.2.- Problemática detectada y justificación del trabajo
   1.3.- Objetivos
   1.4.- Estructura del estudio
2.- Estado del conocimiento
   2.1.- La topografía en la obra lineal
      2.1.1.- Elementos básicos de documentación topográfica
      2.1.2.- Composición de los elementos básicos del trazado
      2.1.3.- Software habitual para definición de trazados en obras lineales
   2.2.- Formatos de dibujo
      2.2.1.- El formato dxf
      2.2.2.- El formato vml
      2.2.3.- El formato svg
      2.2.4.- El formato dwg
   2.3.- La información documentada de obra
   2.4.- Sistemas de información geográfica
      2.4.1.- Revisión de programas de gis estándar
      2.4.2.- Revisión de programas de gis que no siguen los estándares
   2.5.- Tipos de lenguajes de programación
      2.5.1.- Lenguajes de bajo nivel
      2.5.2.- Lenguajes de nivel medio
      2.5.3.- Lenguajes de alto nivel
   2.6.- Tipos de bases de datos
      2.6.1.- Sql, la comunicación entre bases de datos relacionales
   2.7.- Los sistemas de representación gráfica tradicionales
   2.8.- Normativa aplicable
3.- Solución
   3.1.- Lectura de elementos topográficos: trazado y estructuras
      3.1.1.- Elementos topográficos del trazado: eje
      3.1.2.- Elementos topográficos del trazado: terreno
      3.1.3.- Elementos topográficos del trazado: plataforma
      3.1.4.- Elementos topográficos anejos al trazado: las estructuras
   3.2.- Lectura de bases de datos
      3.2.1.- Bases de datos de ensayos e inspección
         3.2.1.1.- Bases de datos de ensayos, suelos
         3.2.1.2.- Bases de datos de ensayos, densidades
         3.2.1.3.- Bases de datos de ensayos, mezclas bituminosas
         3.2.1.4.- Bases de datos de ensayos, hormigones
         3.2.1.5.- Bases de datos de inspección, control
         3.2.1.6.- Bases de datos de inspección, diario
         3.2.2.- Bases de datos extras
         3.2.2.1.- Bases de datos extras, fotos
         3.2.2.2.- Bases de datos extras, definición de estructuras
         3.2.2.3.- Bases de datos extras, definición de la capa de firme
         3.2.2.4.- Bases de datos extras, localización extra
    3.3.- El dibujo del trazado
        3.3.1.- El dibujo en planta
        3.3.2.- El dibujo en perspectiva
            3.3.2.1.- El dibujo con superficies planas
            3.3.2.2.- El dibujo en el navegador
    3.4.- La unión del trazado con las bases de datos
        3.4.1.- La unión de las estructuras al trazado
        3.4.2.- La unión de los ensayos de suelos al trazado
        3.4.3.- La unión de los ensayos de densidades al trazado
        3.4.4.- La unión de los ensayos de hormigones al trazado
        3.4.5.- La unión de los ensayos de firmes al trazado
        3.4.6.- La unión de los inspecciones de control al trazado
        3.4.7.- La unión del diario al trazado
        3.4.8.- La unión de la documentación fotográfica al trazado
    3.5.- La unión de la documentación y otras inspecciones
        3.5.1.- La unión pasiva
        3.5.2.- La unión activa
    3.6.- Base matemática novedosa utilizada
        3.6.1.- Pseudo-bases de datos
        3.6.2.- Redes de taylor multidimensionales
        3.6.3.- Sintegrales
    3.7.- Consultas a la información a través de formularios
        3.7.1.- Formularios de ensayos de suelos
        3.7.2.- Formularios de ensayos de densidades
        3.7.3.- Formularios de ensayos de hormigones
        3.7.4.- Formularios de ensayos de firmes
        3.7.5.- Formulario de inspecciones, control
        3.7.6.- Formulario de inspecciones, diario
        3.7.7.- Formulario de inspecciones, fotos
        3.7.8.- Formulario de seguimiento en dxf y kml
    3.8.- Resultados finales
4.- Conclusiones, futuras lineas de trabajo
5.- Bibliografía


3.7.5.- FORMULARIO DE INSPECCIONES, CONTROL / FORM OF INSPECTION, CONTROL


La selección y/o búsqueda de inspecciones son de forma intersectante. Es decir, que confluyan varias condiciones de búsqueda. Son una excelente ayuda a la hora de realizar informes parciales del estado de la obra, ya que no sólo se encuentra la información sino que al mismo tiempo se realiza la consulta y el informe, ahorrando gran cantidad de tiempo

The selection and / or search form inspections are intersecting. That is, they converge multiple search conditions. They are a great help when performing partial reports the status of the work, since not only information but is simultaneously the query and the report is made, saving considerable time
Figura 3.7.5 Diversas preselecciones de inspecciones en VB (derecha)  y PHP (izquierda)
Figure 3.7.5 Different presets inspections VB (right) and PHP (left)
El código para la versión de VB es el siguiente:

The code for the version of VB is:

Private Sub Inspecciones(Button As Integer, Shift As Integer, X As Single, Y As Single)
PT = DataControl.Recordset(5)
Printer.CurrentX = 7350 * Esc: Printer.CurrentY = 5820 * Esc: Printer.Print "Tipo"
Printer.CurrentX = 7050 * Esc: Printer.CurrentY = 6120 * Esc: Printer.Print "Inspección"
Printer.CurrentX = 8420 * Esc: Printer.CurrentY = 6000 * Esc: Printer.Print "Conforme"
Printer.CurrentX = 10100 * Esc: Printer.CurrentY = 5820 * Esc: Printer.Print "No"
Printer.CurrentX = 9700 * Esc: Printer.CurrentY = 6120 * Esc: Printer.Print "Conforme"
If MBus = "Todos" Or MBus = "" Then fechorr = "" Else fechorr = "/" + Format(MBus.ListIndex, "00") + "/"
If ABus <> "Todos" And MBus <> "" Then fechorr = fechorr + Right(CStr(ABus), 2)
feching = 0: Printer.CurrentY = 6400 * Esc: dossier = ""
Do
IJO = IJO + 1
Printer.CurrentX = 8420 * Esc: Pp = DataControl.Recordset(7)
If Pp Like "*" + fechorr + "*" Or fechorr = "" Then feching = 1
If Not IsNull(Pp) And Pp <> "-" Then Printer.Print Pp;
Printer.CurrentX = 9700 * Esc: Pp = DataControl.Recordset(8)
If Pp Like "*" + fechorr + "*" Or fechorr = "" Then feching = 1
If Not IsNull(Pp) And Pp <> "-" Then Printer.Print Pp;
Pp = DataControl.Recordset(9):
If Not IsNull(Pp) And Pp <> "-" Then dossier = dossier + Pp
DataControl.Recordset.MoveNext
Loop Until DataControl.Recordset.EOF

Printer.CurrentX = 1200 * Esc: Printer.CurrentY = 12900 * Esc: Printer.Print "Observaciones:"
Printer.CurrentY = 12900 * Esc: Tt = PrinterPinta(dossier, 1200 * Esc, 10800 * Esc)
If feching = 0 Then CBus.RemoveItem CBus.ListIndex
CabeceraPrincipal
End Sub


3.7.6.- FORMULARIO DE INSPECCIONES, DIARIO FORM OF INSPECTION DAILY

Con la misma finalidad que en el caso anterior se tramita el parte diario, sólo que el caso del parte diario se añade un resumen en forma de tabla como fase previa al acceso de datos. Figura 3.7.6.


With the same purpose as in the previous case the daily report is processed, only the case of daily portion is added a summary in tabular form as a preliminary to data access. Figure 3.7.6.


Figura 3.7.6: Previo a la selección del parte diario
Figure 3.7.6: Previous image to the selection of the daypart
Las subrutinas necesarias serían en PHP

The subroutines would be necessary in PHP:


<?php
import_request_variables("pg","f_");
$data->read($fichero);
function puntos_cm ($medida, $resolucion=72){return ($medida/(2.54))*$resolucion;}


//Aplicación de filtros
for ($i = 2; $i <= $data->hoja[0]['numRows']; $i++) {
$intermedio = $data->hoja[0]['cells'][$i][2];
if (($intermedio <> "") and ($pijo=="")){break;}
if (($intermedio == $Depas4) or ($intermedio==$pijo)){
if ($intermedio==$Depas4){
$FECHAX = date('d-m-y',($data->hoja[0]['cells'][$i][1]-25569)*24*3600);
$COf = $data->hoja[0]['cells'][$i][2];
$loni=strlen(trim($COf));
if ($loni<=1) {$COD = "05-01-000".$COf;}
if ($loni==2) {$COD = "05-01-00".$COf;}
if ($loni==3) {$COD = "05-01-0".$COf;}
if ($loni==4) {$COD = "05-01-".$COf;}
if ($loni>=5) {$COD = $Cof;}
$CLIMAX = $data->hoja[0]['cells'][$i][3];
$CLAVEX = $data->hoja[0]['cells'][$i][4];
}
$TPARTIDA[] = $data->hoja[0]['cells'][$i][5];
$UNIDAD[] = $data->hoja[0]['cells'][$i][6];
$MO[] = $data->hoja[0]['cells'][$i][7];
$ENCAR[] = $data->hoja[0]['cells'][$i][8];
$MQ[] = $data->hoja[0]['cells'][$i][9];
$MAT[] = $data->hoja[0]['cells'][$i][10];
$TRAMO[] = $data->hoja[0]['cells'][$i][11];
$OBS[] = $data->hoja[0]['cells'][$i][12];
}
}

//Fin de la aplicación de filtros

$pdf = new Cezpdf('a4','landscape');
$ej=0.3;$ha=-0.7;

========================================================================================// ENCABEZADO
========================================================================================$pdf->addJpegFromFile('/media/datos/datos/www/extra/logo2.jpg', puntos_cm(27), puntos_cm(0.7),puntos_cm
(2),puntos_cm(18.5));
$pdf->selectFont('/media/datos/datos/www/extra/fonts/Times-Roman');
$pdf->line(puntos_cm(0.9),puntos_cm(19.9),puntos_cm(25.5),puntos_cm(19.9));

… continúa con la definición de las líneas del encabezado

$pdf->addText(puntos_cm(16.6),puntos_cm(14.3),10,'MATERIALES EMPLEADOS');
$pdf->addText(puntos_cm(21.4),puntos_cm(14.3),10,'TRAMO Y/O SITUACIÓN');
$pdf->addText(puntos_cm(1.4),puntos_cm(4.0),10,'OBSERVACIONES:');

========================================================================================// fin ENCABEZADO y creación del INFORME DIARIO
========================================================================================$j=puntos_cm(13.5);$pdf->setLineStyle(0.5);
for ($i = 0;$i <= count($OBS); $i++) {
if (trim($TPARTIDA[$i].$UNIDAD[$i].$MO[$i].$ENCAR[$i].$MQ[$i].$MAT[$i].$TRAMO[$i])<>""){
$pdf->y=$j;$k=$j;
if ($j<140) {
$pdf->ezNewPage();
$j=puntos_cm(13.5);$pdf->setLineStyle(0.5);$pdf->y=$j;$k=$j;
}
$infus = array('aleft'=>puntos_cm(1),'aright'=>puntos_cm(3),'justification'=>'center');
$pdf->ezText($TPARTIDA[$i],8,$infus);
if ($pdf->y<$k) {$k=$pdf->y;}
$pdf->y=$j;
$infus = array('aleft'=>puntos_cm(3.3),'aright'=>puntos_cm(9.3),'justification'=>'left');
$pdf->ezText($UNIDAD[$i],8,$infus);
if ($pdf->y<$k) {$k=$pdf->y;}
$pdf->y=$j;
$infus = array('aleft'=>puntos_cm(9.6),'aright'=>puntos_cm(10.8),'justification'=>'center');
$pdf->ezText($MO[$i],8,$infus);
if ($pdf->y<$k) {$k=$pdf->y;}
$pdf->y=$j;
$infus = array('aleft'=>puntos_cm(11.1),'aright'=>puntos_cm(12.6),'justification'=>'center');
$pdf->ezText($ENCAR[$i],8,$infus);
if ($pdf->y<$k) {$k=$pdf->y;}
$pdf->y=$j;
$infus = array('aleft'=>puntos_cm(13.1),'aright'=>puntos_cm(16.4),'justification'=>'left');
$pdf->ezText($MQ[$i],8,$infus);
if ($pdf->y<$k) {$k=$pdf->y;}
$pdf->y=$j;
$infus = array('aleft'=>puntos_cm(16.6),'aright'=>puntos_cm(21),'justification'=>'left');
$pdf->ezText($MAT[$i],8,$infus);
if ($pdf->y<$k) {$k=$pdf->y;}
$pdf->y=$j;
$infus = array('aleft'=>puntos_cm(21.2),'aright'=>puntos_cm(25.2),'justification'=>'left');
$pdf->ezText($TRAMO[$i],8,$infus);
if ($pdf->y<$k) {$k=$pdf->y;}
$j=$k-2;
}
$infus = array('aleft'=>puntos_cm(1.4),'aright'=>puntos_cm(25.2),'justification'=>'left');
if (puntos_cm(3.6-($i-$ku)*0.30)>puntos_cm(1)) {
$pdf->y=puntos_cm(3.7-($i-$ku)*0.27);
$pdf->ezText($OBS[$i],8,$infus);
}
}
$documento_pdf = $pdf->ezOutput();
header('Content-type: application/pdf');
echo $documento_pdf;

?>


3.7.7.- FORMULARIO DE INSPECCIONES, FOTOS / FORM OF INSPECTION PHOTOS

La gestión de imágenes tiene una doble faceta. Por una parte la búsqueda rápida por conceptos de imágenes y por otra parte la generación de informes con la selección establecida perfectamente maquetada.

Para la búsqueda rápida se propone un sistema interactivo. Figuras 3.7.7.a.

Image management has a dual role. On the one hand quick search by concepts of images and moreover reporting to the selection set perfectly maquetada.


For quick search an interactive system is proposed. Figures 3.7.7.a.



Figura 3.7.7.a: Secuencias de la selección de imágenes VB (derecha) y PHP (izquierda)
Figure 3.7.7.a: Sequences image selection VB (right) and PHP (left)

Para la realización de informes se realiza el maquetado internamente desde el programa. Esto ayudará al ahorro de tiempo en la realización de estos informes fotográficos. Figura 3.7.7.b.

To perform the formated reports is performed internally by the program. This will help saving time in carrying out these photo reports. Figure 3.7.7.b.



Figura 3.7.7.b: Gestor e Informe de salida con formato de 6 imágenes por hoja
Figure 3.7.7.b: Manager and Report Output Format 6 images per sheet

Tanto la versión web como la de escritorio parte de la preselección de imágenes parten de un filtro. Este filtro (o condición de búsqueda) eliminará inicialmente los siguientes caracteres {. , + '  '} para evitar que fotografías denominadas PI pk 3+800, p.i. P.K 3 800, y otras posibilidades sean equivalentes. Además permitirá localizar por fechas {08/09 → todo septiembre del año 2.008} {08/09/12-08/10/25 → desde el 12 de septiembre del año 2.008 hasta el 25 de octubre de 2.008}.

Este filtro es el siguiente:

Both the web and the desktop version of the preset images are based on a filter. This filter (or search condition) initially removes the following characters {. , + '} To prevent photographs called PI 3 + 800 pk, pi PK 3800, and other possibilities are equivalent. It will also allow locating by date → {08/09 year around September 2008} {08/09 / 12-08 / 10/25 → since September 12 of the year 2008 until 25 October 2008}.


This filter is:


Function QuiraCaracteresSobrantes(ByVal TInicial As String) As String
QuiraCaracteresSobrantes = Replace(TInicial, ‘",", ":", ".", "-", "+", "/", "*", "[", "]", "{", "}", "#", "@", "~", "·", "#", "&", "¬"’,’’)
End Function

Sub CreaInformeFotos()
ListaFotos.Clear
If KeyCode = 13 Then ‘Cuando se de al <ENTER>

'preparación del nombre al filtro
Pp = QuiraCaracteresSobrantes(Texto_x)

'Inicio del filtro
If Pp Like "[0-9][0-9][0-9][0-9]" Then
Mes_x = Left(Texto_x, 2)
Ano_x = Right(Texto_x, 2)
For I = 1 To Ultima_Foto
Tt = Foto_Archivo(I)
Tt1 = Tt
nn = Right(Tt, 2): Tt = Left(Tt, Len(Tt) - 2)
dd = Right(Tt, 2): Tt = Left(Tt, Len(Tt) - 2)
mm = Right(Tt, 2): Tt = Left(Tt, Len(Tt) - 2)
aa = Format(Trim(Tt), "00"): Tt = Tt1
If Mes_x = mm And Ano_x = aa Then
k = k + 1
Escoje_Foto(k) = I
Text3.AddItem "[" & nn & "]" & aa & "/" & mm & "/" & dd & ":" + Foto_Texto(I)
End If
Next I
Else
For I = 1 To Ultima_Foto
ConjuntoFotos = QuiraCaracteresSobrantes(Foto_Texto(I))
If ConjuntoFotos Like "*" & Pp & "*" Or UCase(Foto_Texto(I)) Like "*" & Pp Then
k = k + 1
Escoje_Foto(k) = I
Text3.AddItem Format(Foto_Archivo(I), "00000000") + ":" + Foto_Texto(I)
' Text3.AddItem Format(Foto_Archivo(i), "0000") + ".-" + Foto_Texto(i)
End If
Next I
End If
Corre_fotos.Max = k
UltimaFotoEscogida = k
If k = 0 Then Text2 = "- - -" Else Text3.SetFocus
Exit Sub

3.7.8.- FORMULARIO DE SEGUIMIENTO, EN DXF Y KML / MONITORING FORM IN DXF and KML

En ocasiones las demandas de las direcciones de obra llegan al punto de querer ver en un plano de papel las inspecciones que ya se han visto en la pantalla con lo que no queda más remedio que programar la salida no por la pantalla sino con el formato DXF. Como ya se viera en el apartado 2.1.1. dentro del bloque ENTITIES del fichero.

Para ello crearemos 3 bloques. El inicial hasta el bloque ENTITIES, el propio bloque ENTITIES y desde este al final. El primero y el último se dejan fijos y el intermedio se crea hasta formar el archivo DXF completo:

Sometimes the demands of work management reach the point of wanting to see in a paper plane inspections already seen on screen with no choice but to program the output no screen but with the DXF format . As you saw in section 2.1.1. ENTITIES block within the file.

To do this, create 3 blocks. The initial ENTITIES to block, block ENTITIES own and from this the end. The first and last are left fixed and the intermediate is created to form the complete DXF file:


Continuará ...
To be continued ...

No hay comentarios:

Publicar un comentario