Tema3 Lidar

Download Tema3 Lidar

Post on 24-Oct-2015

19 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

<ul><li><p>Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos Lser y Rdar Geotecnologas Cartogrficas en Ingeniera y Arquitectura </p><p>Escuela Politcnica Superior de vila 1 Universidad de Salamanca </p><p>1 Cargar archivo de datos terrestres </p><p>Vamos a comenzar leyendo un archivo de puntos de datos Terrestre con las coordenadas </p><p>xyz de los mismos. Utilizaremos algo de lo usado en el ejercicio 9 de la parte de </p><p>introduccin para permitir leer un archivo de puntos y mostrar las coordenadas en una </p><p>tabla, en este caso los archivos que vamos a leer utilizan como separador el tabulador. </p><p>Despus probaremos a representar los puntos ledos ayudndonos de un componente de </p><p>evaluacin. </p><p>Comenzamos un proyecto nuevo que se llamar LeerFicherosTerrestre. Vamos a </p><p>intentar leer ficheros de puntos en coordenadas X Y Z, separados por tabulador. Y </p><p>vamos a representar esos puntos. </p><p>Creamos el men con el control MenuStrip en el grupo Mens y Barras de </p><p>Herramientas. </p><p>El formulario presentar el aspecto: </p><p>Las etiquetas que vemos, un cuadro de texto con nombre txt_ruta para ver la ruta del </p><p>archivo ledo, un cuadro de texto txt_leidos en el que mostraremos el nmero de </p><p>puntos que se lean, un cuadro de texto txt_visor en el que pondremos la propiedad </p><p>Multiline a True, para mostrar las lneas que vamos leyendo del fichero y un </p><p>DataGridView que encontramos en la categora de Datos y llamamos dgv_tabla. Al </p><p>insertar la tabla le agregamos tres columnas con los nombres de las coordenadas de los </p><p>puntos X, Y, Z. </p></li><li><p>Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos Lser y Rdar Geotecnologas Cartogrficas en Ingeniera y Arquitectura </p><p>Escuela Politcnica Superior de vila 2 Universidad de Salamanca </p><p>Para el acceso al sistema de archivos utilizaremos el dilogo OpenFileDialog del grupo </p><p>de controles Dilogos. </p><p>Comenzamos con la opcin la operacin de leer que asociaremos al men </p><p>Archivo/Abrir. </p><p>Para el utilizar las clases relacionadas con la entrada y salida, importamos el espacio de </p><p>nombres Imports System.IO al comienzo del cdigo. </p><p>Escribimos el cdigo siguiente: </p><p> Private Sub AbrirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AbrirToolStripMenuItem.Click OpenFileDialog1.Filter = "Archivos Ascii(*.asc)|*.asc|Archivos de Texto(*.txt)|*.txt|Todos los Archivos|*.*" 'Le indicamos los filtros que aparecern al seleccionar los archivos. asc, txt, o todos. OpenFileDialog1.ShowDialog() 'Mostramos dilogo de Abrir txt_ruta.Text = OpenFileDialog1.FileName 'Colocamos en el cuadro de texto la ruta y nombre del fichero seleccionado Dim leer As New StreamReader(New FileStream(OpenFileDialog1.FileName, FileMode.Open)) 'Creamos la variable de tipo StreamReader que nos permitir manejar el fichero 'la variable se crea a partir otra de tipo FileStream asociada al archivo seleccionado y 'Abiendo el archivo Dim linea As String txt_visor.Clear() 'Borramos el cuadro que visionar las lineas ledas dgv_tabla.Rows.Clear() 'Borramos la tabla que muestra las coordenadas de los puntos Dim punto(2) As String 'Vector de tres cadenas para guardar la X,Y,Z de cada punto Do linea = leer.ReadLine 'Leemos una linea del fichero If Not linea Is Nothing Then 'Si la linea no est vacia punto = Split(linea, vbTab, 3) 'Separamos con la funcin Split la linea por la posicin del separador "tabulador" 'Limitamos el nmero de trozos a 3 para no desbordar el vector If punto.Length = 3 Then 'Si no hay tres coordenadas descartamos el dato dgv_tabla.Rows.Add(punto(0), punto(1), punto(2)) 'Aado las coordenadas del punto a la tabla End If txt_visor.AppendText(linea &amp; vbCrLf) 'Aado la linea leda al visor. vbCrLf es un salto de linea End If </p><p> Loop Until linea Is Nothing 'Repetimos hasta que linea sea vacia que se habr terminado el fichero leer.Close() 'Cerramos el fichero leer = Nothing txt_leidos.Text = dgv_tabla.Rows.Count - 1 'Pongo en txt_leidos el numero de puntos aadidos a la tabla. End Sub </p></li><li><p>Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos Lser y Rdar Geotecnologas Cartogrficas en Ingeniera y Arquitectura </p><p>Escuela Politcnica Superior de vila 3 Universidad de Salamanca </p><p>Se puede entender el cdigo a partir de los comentarios. Se podra realizar un control </p><p>ms preciso de errores para contemplar casos en que los archivos proporcionados no se </p><p>ajusten al formato previsto. Pero como comienzo lo dejamos as. </p><p>Intentamos probar el cdigo que hemos escrito hasta el momento. Abrimos el fichero </p><p>CuatroPostesmini.asc que se proporciona como ejemplo, tiene 16650 puntos. Luego </p><p>probamos con el completo. </p><p>Guardamos el proyecto y lo cerramos. </p></li><li><p>Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos Lser y Rdar Geotecnologas Cartogrficas en Ingeniera y Arquitectura </p><p>Escuela Politcnica Superior de vila 4 Universidad de Salamanca </p><p>2 Convertir los puntos a DXF. </p><p>Cuando realicemos algunas operaciones sobre los puntos y queramos utilizarlos en </p><p>alguno de los programas habituales de diseo grfico, necesitaremos tenerlos en algn </p><p>formato estndar. El formato DXF nos lo reconocer la mayora de los programas. </p><p>Podramos utilizar algn componente existente para la conversin a DXF, pero algunos </p><p>no son gratuitos. Otros no estn disponibles para Visual .Net. Adems as lo conocemos </p><p>y podemos aadir esa funcionalidad a nuestras aplicaciones. Vamos a intentar entender </p><p>la estructura de un archivo DXF, y vamos a programar una aplicacin sencilla para </p><p>realizar la conversin slo de puntos. Despus en otro ejercicio posterior, crearemos una </p><p>biblioteca de clases para dejar preparada la conversin a DXF para otras aplicaciones </p><p>futuras. </p><p>2.1 ESTRUCTURA DE UN ARCHIVO DXF. </p><p>DXF viene de Drawing eXchange Format, es un archivo de intercambio de dibujos de </p><p>CAD. Los archivos DXF son archivos ASCII. Tambin hay DXF binarios pero con el </p><p>tiempo los ASCII han ganado protagonismo y si no se indica lo contrario cuando nos </p><p>hablan de DXF se refieren a estos. Los archivos DXF se componen de pares de cdigos </p><p>y valores asociados. Los cdigos, se llaman cdigos de grupo e indican el tipo de valor </p><p>que les sigue. Los archivos DXF se organizan en secciones, que constan de registros a </p><p>su vez compuestos o por un cdigo de grupo o un elemento de datos: cada cdigo de </p><p>grupo y su valor cuentan con su propia lnea en el archivo DXF. Cada seccin comienza </p><p>con un cdigo de grupo 0 seguido por la cadena SECTION. A continuacin aparece un </p><p>cdigo de grupo 2 y una cadena que indica el nombre de la seccin (por ejemplo, </p><p>HEADER). Las secciones terminan con un 0 seguido de la cadena ENDSEC. </p><p>Las principales secciones de un archivo DXF y su orden son: </p><p>SECCIN DESCRIPCIN Seccin HEADER Informacin de carcter general sobre el dibujo. Se compone de </p><p>un nmero de versin de base de datos de AutoCAD y de una </p><p>serie de variables de sistema. Cada uno de los parmetros </p><p>contiene un nombre de variable y su valor asociado. </p><p>Seccin CLASSES Informacin de las clases definidas por la aplicacin, cuyas apariciones se contienen en las secciones BLOCKS, ENTITIES </p><p>y OBJECTS de la base de datos </p><p>Seccin TABLES Definiciones de las siguientes tablas: APPID (tabla de identificacin de las aplicaciones) BLOCK_RECORD (tabla de </p><p>referencia de bloques) DIMSTYLE (tabla de estilos de </p><p>acotacin) LAYER (tabla de capas) LTYPE (tabla de tipos de </p><p>lnea) STYLE (tabla de estilos de texto) UCS (tabla del Sistema </p><p>de coordenadas personales) VIEW (tabla de visualizacin) </p><p>VPORT (tabla de configuracin de la ventana grf.) </p><p>Seccin BLOCKS Definiciones de bloques Seccin ENTITIES Contiene los objetos grficos (entidades) del dibujo, incluidas </p><p>las referencias a bloques (entidades insertadas). </p><p>Seccin OBJECTS Los objetos no grficos del dibujo. En esta seccin es donde se almacenan todos los objetos que no sean entidades ni registros </p><p>de la tabla de smbolos. </p></li><li><p>Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos Lser y Rdar Geotecnologas Cartogrficas en Ingeniera y Arquitectura </p><p>Escuela Politcnica Superior de vila 5 Universidad de Salamanca </p><p>Los cdigos de grupo definen el tipo de valor asociado como un nmero entero, un </p><p>nmero de coma flotante o una cadena, segn la siguiente tabla de rangos de cdigo de </p><p>grupo. </p><p>RANGO DE CDIGO </p><p>TIPO DE VALOR DE GRUPO </p><p>0 - 9 Cadena </p><p>10 - 59 Punto 3D de doble precisin </p><p>60 - 79 Valor entero de 16 bits </p><p>90-99 Valor entero de 32 bits </p><p>100 y 102 Cadena </p><p>105 Cadena con un valor de identificador hexadecimal </p><p>140 - 147 Valor de coma flotante escalar de doble precisin </p><p>170 - 175 Valor entero de 16 bits </p><p>280 - 289 Valor entero de 8 bits. </p><p>300 - 309 Cadena de texto arbitraria </p><p>310-319 Cadena que representa el valor hexadecimal de un bloque </p><p>binario </p><p>320-329 Cadena que representa un valor de identificador Hexadecimal </p><p>330-369 Cadena que representa identificador de objeto hexadecimal </p><p>999 Comentario </p><p>1000 - 1009 Cadena </p><p>1010-1059 Valor de coma flotante </p><p>1060 - 1069 Valor entero de 16 bits </p><p>1071 Valor entero de 32 bits </p><p>Hay algunos valores que por lo que se usan conviene tratar con ms detalle: </p><p>CDIGO DESCRIPCIN 0 Cadena de texto que indica el tipo de entidad (fijo) </p><p>1 Valor de texto principal de una entidad </p><p>2 identificador de atributos, nombre de bloque, etc. </p><p>5 Identificador de entidad. Cadena de texto de hasta 16 dgitos </p><p>hexadecimales (fijo) </p><p>6 Nombre de tipo de lnea (fijo) </p><p>7 Nombre de estilo de texto (fijo) </p><p>8 Nombre de capa (fijo) </p><p>9 DXF: identificador de nombre de variable (slo se utiliza en la seccin </p><p>HEADER (encabezamiento) del archivo DXF) </p><p>40-48 Valores de coma flotante (altura de texto, factores de escala,etc.) </p><p>62 Nmero de color (fijo) </p><p>66 Indica que siguen entidades. Caso de entidades complejas </p><p>67 Espacio (modelo o papel). </p><p>70-78 Valores enteros, como nmero de repeticiones, bits indicadores o modos. </p></li><li><p>Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos Lser y Rdar Geotecnologas Cartogrficas en Ingeniera y Arquitectura </p><p>Escuela Politcnica Superior de vila 6 Universidad de Salamanca </p><p>Algunas entidades del formato DXF: </p><p>ALGUNAS ENTIDADES POINT LINE POLYLINE 3DFACE </p><p>3DSOLID ARC CIRCLE DIMENSION </p><p>ELLIPSE SOMBREADO TEXT SPLINE </p><p>IMAGE SHAPE SOLID VERTEX </p><p>En el archivo siguiente se aprecia un documento bsico en DXF con dos entidades </p><p>punto y una Lnea. Usamos alguna capa sin definirla antes, de esta forma se le asigna el </p><p>tipo de lnea continuo y el color 7 (Blanco). Lo hacemos as por ahorrar todo el cdigo </p><p>posible. Tampoco indicamos las variables de la cabecera. Si cogemos un DXF de alguna </p><p>aplicacin CAD nos daramos cuenta de la gran cantidad de variables que aparecen. </p><p>Para un ejemplo sencillo prescindimos de ellas. </p><p>0 COMIENZO DE SECCIN SECTION INDICADOR DE SECCIN 2 CDIGO DE GRUPO ENTITIES INDICADOR DE QUE ES LA SECCIN ENTIDADES 0 CODIGO DE COMIENZO DE ENTIDAD POINT TIPO DE ENTIDAD PUNTO 8 CDIGO QUE INDICA QUE SIGUE UNA CAPA 8 Puntos NOMBRE DE LA CAPA EN ESTE CASO PUNTOS 10 CDIGO DE LA COORDENADA X 150.000 VALOR DE LA X DEL PUNTO 20 CDIGO DE LA Y 125.000 VALOR DE LA Y DEL PUNTO 30 CDIGO DE LA Z 75.000 VALOR DE LA Z 0 COMIENZO DE OTRA ENTIDAD POINT INDICA QUE ES UN PUNTO 8 COMO ANTES LA CAPA Y LA X, Y, Z DEL PUNTO Puntos 10 250.000 20 225.000 30 75.000 0 COMIENZO DE OTRA ENTIDAD LINE ES UNA LINEA 8 INDICADOR DE QUE SIGUE UNA CAPA Lineas NOMBRE DE LA CAPA 62 CODIGO PARA INDICAR UN COLOR DE ENTIDAD 5 COLOR 5 AZUL 10 CODIGO DE LA X DEL PUNTO INICIAL DE LA LINEA 100.000 VALOR DE LA X DEL INICIO DE LINEA 20 CDIGO DE LA Y 100.000 VALOR DE LA Y DEL INICIO DE LINEA 30 CDIGO DE LA Z 100.000 VALOR DE LA z DEL INICIO 11 CDIGO DE LA X DEL FIN DE LINEA 200.000 VALOR DE LA X DEL FINAL 21 CDIGO DE LA Y 200.000 VALOR DE LA Y DEL FINAL 31 CDIGO DE LA Z 200.000 VALOR DE LA Z DEL FINAL DE LA LINEA 0 PARA INDICAR QUE SIGUE UNA PALABRA A ANALIZAR ENDSEC FINAL DE LA SECCIN DE ENTIDADES 0 QUE SIGUE UNA PALABRA EOF FINAL DEL FICHERO </p></li><li><p>Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos Lser y Rdar Geotecnologas Cartogrficas en Ingeniera y Arquitectura </p><p>Escuela Politcnica Superior de vila 7 Universidad de Salamanca </p><p>2.2 CREACIN DE LA APLICACIN. Creamos ahora el programa que leer puntos en formato XYZ, con o sin informacin de </p><p>color RGB. Creamos la aplicacin de tipo Aplicacin para Windows como en otras </p><p>ocasiones y asignamos el nombre convertir_a_DXF a la misma. Slo tendremos un </p><p>formulario principal en el programa, le ponemos como nombre frm_convertir.vb. </p><p>Presentar el aspecto: </p><p>Como vemos hemos colocado un GroupBox con el ttulo Convertir a DXF a modo de </p><p>contenedor. Sobre l, dos cuadros de texto a los que llamaremos txt_Original y </p><p>txt_Destino y los cuatro botones que vemos. El mensaje de aviso sobre los puntos que </p><p>podemos utilizar lo hemos puesto con una etiqueta (Label). Tambin necesitamos los </p><p>cuadros de dilogo para abrir el archivo de puntos y para seleccionar el nombre y la </p><p>ubicacin en la que se guardar el archivo DXF generado. Agregaremos un </p><p>OpenFileDialog del grupo Cuadros de dilogo, y un SaveFileDialog del mismo grupo. </p><p>Al botn Archivo Original le asignamos el cdigo: </p><p>Al botn Archivo Destino le asignamos el cdigo: </p><p>Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click OpenFileDialog1.Filter = "Archivos Ascii(*.asc)|*.asc|Archivos de Texto(*.txt)|*.txt|Archivos XYZ(*.xyz)|*.xyz|Todos los Archivos|*.*" 'Le indicamos los filtros que aparecern al seleccionar los archivos. asc, txt, xyz o todos. OpenFileDialog1.ShowDialog() 'Mostramos dilogo de Abrir txt_Original.Text = OpenFileDialog1.FileName 'Colocamos en el cuadro de texto la ruta y nombre del fichero seleccionado End Sub </p><p>Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click SaveFileDialog1.Filter = "Archivo DXF(*.dxf)|*.dxf" 'Establecemos el formato de archivo de salida a *.dxf SaveFileDialog1.ShowDialog() 'Abrimos el dilogo de guardar txt_Destino.Text = SaveFileDialog1.FileName 'Ponemos en el cuadro la ruta de guardar el nombre y ruta del archivo. End Sub </p></li><li><p>Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos Lser y Rdar Geotecnologas Cartogrficas en Ingeniera y Arquitectura </p><p>Escuela Politcnica Superior de vila 8 Universidad de Salamanca </p><p>Dejamos la parte de convertir el cdigo para el final y colocamos el fragmento de salir: </p><p>Los archivos colores en DXF siguen una distribucin diferente a los RGB que nosotros </p><p>leemos. Crearemos un mdulo para definir en el una funcin que nos convierta los </p><p>colores de RGB al formato compatible con DXF. Para Agregar el mdulo pulsamos en </p><p>el men Proye...</p></li></ul>