lunes, 14 de diciembre de 2015

Interpolación de datos para GIS 2: Interpolación Bicubica

En el mes anterior se habló dos tipos de interpolaciones: la del tipo TIN y Bilineal, ahora hablaremos de la Interpolación Bicubica, que vendría ser una extensión de la Bilineal. Si la Interpolación Bilineal trabaja con cuatro valores próximos de un punto, la Interpolación Bicubica trabaja con los 16 valores más próximos de dicho punto (estamos hablando de un sistema de puntos regular).

























La mayor característica de la Interpolación Bicubica es la continuidad de los datos que ofrece, en el caso de la Interpolación Bilineal como trabaja solo con los cuatro valores más próximos, la interpolación solo se enmarca en esta área (formando por los cuatro puntos), en cambio, la Interpolación Bicubica al ser los 16 valores más próximos, el área es más grande y esta continuidad de que se habla se hace notar.
Para hacer esta interpolación, usamos una ecuación polinómica de orden tres (cubica) que tiene la siguiente formula:






Se requiere de una ecuación como [1] para poder interpolar datos. El detalle seria el cálculo de los coeficientes a,b,c,d, y solo siendo conocido X. Luego se escoge una metodología que nos permita una resolución no tanto complicada para poder interpolar datos. Esta metodología es la del Método de Lagrange para lo cual, planteamos la siguiente metodología de uso:






















Esta metodología primero usa los valores del eje X, luego los interpola con los valores en Z para obtener una columna resultante (Interpol1) para luego con esta columna interpolarlos con los valores del eje Y para tener una última columna (Interpol2) y la suma de sus valores es la solución final. Queda para el lector hacer ahora primero usar los valores del eje Y con los valores en Z y hallar la columna Interpola1 y luego con los valores en el eje X calcular la columna Interpola2. Ambos sentidos deben dar el mismo resultado.
Como ya se dijo, es una ecuación cubica, así que si dibujamos la ecuación, nos dará una línea curva, y no es de extrañarnos que, en nuestro ejemplo:






















Siendo una curva, aparecerán valores que quizá aparezcan extraños como para (1,2.5,-9), por eso se recomienda al lector hacer el ejercicio propuesto para comprobar los resultados. Esperando que sea de utilidad este post, será hasta el otro mes. Saludos

lunes, 30 de noviembre de 2015

Interpolación de datos para GIS 1: TIN e Interpolación Bilineal

En esta oportunidad se hablara sobre la interpolación de datos sobre una grilla de datos topográficos que como mínimo deben contener datos sobre su localización (este y norte o longitud y latitud) y su altura (sumando en total tres datos) para el remuestreo de datos en su interior (interpolación).
En esta oportunidad, se hablara primeramente de la interpolación de tipo TIN usando tres puntos topográficos (formando una triangulación de puntos) y luego la interpolación Bilineal cuando se trate de una grilla regular de puntos topográficos (usando cuatro puntos que forman geométricamente un rectángulo). El objetivo es obtener el cálculo o estimación de la altura de un punto que se indique y que este dentro de estas formaciones geométricas (triangulo en el TIN y rectángulo en el Bilineal).


TIN (Triangulated Irregular Network): como indica su nombre es una red irregular de triángulos que trata de representar una superficie con la unión de tres puntos cercanos entre sí, formando caras y la unión de dichas caras forman una superficie. Para formar un triangulo se utiliza la Triangulación o Condición de Delaunay, que explica que para que tres puntos pertenecientes de una grilla formen un triangulo,  se circunscribe un circulo, y dicho circulo solo debe contener estos tres únicos puntos, si de este círculo hubiera un cuarto punto que circunscribe a este círculo, dicho triangulo dejaría de tener sentido. Para este último caso se observa en el caso de grillas regulares. Se llama Triangulación o Condición de Delaunay por el matemático ruso Boris Nikolaevich Delone (que en francés su apellido paso a Delaunay) quien lo ideo en 1934.















Usando una interpolación de tres puntos es útil ya que solo se enfoca en el interior de dichos tres puntos (no se toma en consideración la continuidad o relación de los datos fuera de estos tres puntos) y que por medio de triángulos se puede representar mejor una superficie no solo topográfica, ya que por triángulos se puede representar rostros o partes de cuerpos como los usados en diseño gráfico o animado, y como se menciono anteriormente es útil para el remuestreo de datos provenientes de una grilla de puntos irregular (previa formación de triángulos usando la triangulación de Delaunay).
                           

                                                                        













Interpolación Bilineal: como indica su nombre, se interpola dos veces (cada vez por cada eje de coordenadas) un dato linealmente usando cuatro puntos cercanos que lo rodean y que geométricamente formen un rectángulo (se trata entonces de una grilla regular de puntos). Como en el caso anterior (TIN) no se presume alguna continuidad de los datos fuera de los cuatro puntos ya que el cálculo o estimación del punto seleccionado está sujeto a solamente a dichos puntos que lo rodean.

Se muestra una imagen explicativa de cómo se podría interpretar la interpretación Bilineal, separando por cada eje de coordenadas (Eje X, Eje Y) las operaciones de remuestreo de datos y luego la explicación matemática del dicha interpolación.




























Esperando que sea de utilidad este post, será hasta el otro mes. Saludos

lunes, 26 de octubre de 2015

Crear Capas, Texto, Línea y Polilínea en un DXF

En este mes, se pondrá un ejemplo de cómo crear  Capas, texto, línea y un polilínea cerrada (polígono) en un archivo DXF. Como se referencia se usara el post siguiente

 y el siguiente:

¿Que se desea crear?
Usaremos los cuadros siguientes: el primero muestra las capas a crear y sus respectivas características:

Tabla 1: Cuadro de Capas a crear
Nombre Capa
Actual
Mostrar
Congelado
Bloqueado
Color Capa
Capa001
Si
No
Si
Si
Azul
Capa002
No
Si
Si
No
Rojo
Capa003
No
Si
No
Si
Verde
0
No
Si
No
No
Blanco

En el siguiente cuadro observamos los objetos que queremos crear:

Tabla 2: Objetos a crear
Objeto
Capa
Color Objeto
Línea
Capa001
152
Texto
Capa002
74
Polilínea cerrada
Capa003
30

Primero, como manera de ejemplo, se creara cuatro archivos DXF:

1.Un DXF que crea las cuatro capas mostradas en la Tabla 1.
2.Un DXF que crea una Línea.
3.Un DXF que crea un Texto
4.Un DXF que crea una Polilínea cerrada.

Y un quinto archivo DXF que muestre la integración de los cuatro archivos mencionados.

Ejemplo de aplicación:
A manera de tablas de una hoja de Excel, se mostraran y explicara cómo crear estos cuatro primeros archivos. Lo pueden bajar desde este enlace.

Para comparar los resultados, pueden bajar los cinco archivos mencionados anteriormente (DXF2_CAPAS.dxf, DXF2_LINEA.dxf, DXF2_POLIGONO.dxf,DXF2_TEXTO.dxf y DXF2_TOTAL.dxf) desde este enlace. También se agrega un archivo extra (DXF3_POLIGONO.dxf) que muestra otra manera para la creación de una polilínea cerrada (polígono).

Se puede ver los resultados según las imágenes mostradas a continuación (para la visualización de los DXF se utiliza el DraftSight® by Dassault Systemes):



















Saludos y hasta el otro mes.

domingo, 20 de septiembre de 2015

Diferencias entre un archivo DBF (Shapefile) y un archivo DAT (Tab de MapInfo)

Se dice que un archivo DBF de un Shapefile (donde se almacena la descripción de cada geometría de este Shapefile) es muy similar a un archivo DAT de un Tab de Mapinfo. Se verá algunas diferencias entre este tipo de archivos.

Nota 1: esto es producto de propia investigación. Úsese con  sumo cuidado.

Para este ejemplo, se usara un Shapefile y un Tab  (los enlaces de estos dos archivos en las palabras Shapefile y Tab) de los departamentos del Perú como ejemplo. En ambos casos se tiene la siguiente información:

Tabla 1: Descripción de las columnas
Columna
Tipo de Valor - Shapefile
Tipo de Valor - Tab
Descripción
AREA
Double (19,18,15)
Float
Área del Departamento
PERIMETER
Double (19,18,15)
Float
Perímetro del Departamento
PERUDEP_
Double (11,11,0)
Decimal(11,0)
Identificador
PERUDEP_ID
Double (11,11,0)
Decimal(11,0)
Identificador
CODIGO_DEP
Text(2)
Character(2)
Código del Departamento
NAME
Text(35)
Character(35)
Nombre del Departamento
NAMECAPITA
Text(35)
Character(35)
Nombre de la Capital del Departamento
COUNTPROVI
Double (11,11,0)
Decimal(11,0)
Cantidad de Provincias
COUNTDISTR
Double (11,11,0)
Decimal(11,0)
Cantidad de Distritos
DECRETOLEY
Text(4)
Character(4)
Ley que promulga la creación
DATE_
Date(8)
Date
Fecha de creación
COUNTPOBLA
Double (19,18,15)
Float
Cantidad de población
ID
Double (11,11,0)
Decimal(11,0)
Identificador
TRANSP
Long (5,5,0)
Decimal(5,0)
Valor de Transparencia de la geometría
para Tipo de Valor - Shapefile:
Tipo de valor(Longitud, Precisión, Escala)
Longitud: vendría ser la Precisión de un numero sumado el separador decimal *
Precisión:  longitud del campo (cantidad de solo números)
Escala: posiciones de decimales
(*) se infiere que para los números con decimales, la Longitud será siempre una unidad más que la Precisión




para Tipo de Valor - Tab:
Tipo de valor(Longitud del valor, cantidad de numero de la parte entera del valor)

Si abrimos este Shapefile en el ArcGIS, vemos su tabla de atributos (el archivo DBF) y observamos toda la información que se explicó en la Tabla 1, lo mismo ocurre si abrimos la tabla de atributos (el archivo DAT) del Tab en el MapInfo, se observa la misma información. Si abrimos los archivos DBF y DAT en el Microsoft Excel, vemos lo siguiente:

Vista en el Microsoft Excel de un archivo DAT


Vista en el Microsoft Excel de un archivo DBF


Observamos que el DBF muestra los valores tal cual se puede ver en el ArcGIS. Para el caso del DAT, se nota algunos caracteres ininteligibles en las columnas Area, Perimeter, Date_ y Countpobla. Si observamos la tabla mostrada anteriormente, vemos que Area, Perimeter y Countpobla para el DAT son columnas de tipo Float (para lo que el ArcGIS y el DBF es una columna de tipo Numérico con decimales) y que la columna Date_ para el DAT se mantiene como una columna de tipo Date. Entonces se podría decir que la diferencia radicaría en:
1)  La manera como trata el DAT a las columnas de tipo Float.
2)  La manera como trata el DAT a las columnas de tipo Date.

Vistazo a la estructura interna de un archivo DBF:
Nota 2: Es algo requerido el conocimiento de programación y de la interpretación de bytes y offsets de un archivo (interpretación y lectura binaria de un archivo).

De acuerdo al documento: http://www.whitetown.com/es/misc/dbf/   (es algo necesario leer este documento para encontrar la razón de esta diferencia que es motivo de este articulo) que explica la estructura interna de un DBF, que para este ejemplo, solo veremos los tipos de columnas que son usados (esta información se encuentra en lo que se conoce como Cabecera de DBF y DAT):
  • C – Carácter
  • N – Numérico
  • F – Flotante
  • D – Fecha
  • L – Lógico
  • M – Memo
  • G – General
  • C – Carácter (binario)
  • M – Memo (binario)
  • B – Doble
  • I – Entero
  • Y – Monetario
  • T – Fecha-Hora
  • P – Imagen
Si usamos un programa lector hexadecimal (como el Free Hex Editor Neo, si desean descargarlo, solo deben hacer click sobre el nombre del programa) que permite ver el contenido (en un formato binario) de todos los archivos y por supuesto de los DBF y  DAT. Al abrirlos, observamos algo como esto:




Tabla 2: Tipos de Columnas
Columna
DBF*
DAT*
AREA
N (19,15)
C (8)
PERIMETER
N (19,15)
C (8)
PERUDEP_
N (11,0)
N (11,0)
PERUDEP_ID
N (11,0)
N (11,0)
CODIGO_DEP
C (2)
C (2)
NAME
C (35)
C (35)
NAMECAPITA
C (35)
C (35)
COUNTPROVI
N (11,0)
N (11,0)
COUNTDISTR
N (11,0)
N (11,0)
DECRETOLEY
C (4)
C (4)
DATE_
D (8)
C (4)
COUNTPOBLA
N (19,15)
C (8)
ID
N (11,0)
N (11,0)
TRANSP
N (5,0)
N (5,0)
(*) Tamaño: (longitud campo, numero decimales)

Se observa en la Tabla 2, que el DAT trata a las columnas de tipo Float como si fueran de tipo Texto con una longitud de 8 bytes y al de tipo Date como si fueran de tipo Texto con una longitud de 4 bytes. Al haber esta transformación de tipo de columnas, se observan estos caracteres extraños si se abre en el Microsoft Excel.



Vista del archivo DAT usando el Free Hex Editor Neo

















Vista del archivo DBF usando el Free Hex Editor Neo

















¿Dónde están los valores del Float y del Date en un archivo DAT?
Aun estando en el programa Free Hex Editor Neo, viendo la estructura interna de un DAT, si queremos hallar el lugar donde están los valores de estos archivos hacemos esta operación matemática para hallar en que byte esta esta información:
ByteInformacion = 32 + 32 * Numero de columnas + 1 + 1
Dónde:
32, es la longitud desde el inicio del archivo, hasta donde comienza la descripción de las columnas.
32 * Numero de Columnas, el 32 es la longitud de cada descripción de cada columna multiplicada por la cantidad de columnas que existen.
1, que es byte que indica el final de la cabecera del DBF y del DAT.
1, que es byte que indica el inicio de la información.
Para nuestro ejemplo:
ByteInformacion = 32 + 32 * 14 + 1 + 1
ByteInformacion = 482

Si usamos el Free HexEditor Neo, podemos apretar la combinación de teclas control + G y aparecerá una ventana llamada “Go to Offset” y seleccionando la opción “Absolute offset”, ponemos el valor calculado (482) y nos llevara a dicho Offset.



Si vemos en la ventana del lado izquierdo llamada “Data Inspector”, en la parte donde dice double, vemos el valor de 1.3616490000000001, que es el valor del área de este registro (como sabemos, la columna Area es la primera en aparecer en el DAT).























Si queremos hallar el valor de la columna Perimetro (la segunda columna en aparecer) repetimos la combinación de teclas control + G (“Go to Offset”) y seleccionamos la opción “Relative offset” y colocamos el valor de 8 (como se explicó en la Tabla 2), apretamos el botón de “Ok” y vemos en la ventana “Data Inspector” para el valor del double 6.0574199999999995, que es el valor del perímetro del primer registro.

























Para el caso del Date, la longitud de la columna DATE_ es 4 bytes, si nos ubicamos con el “Go To Offset” hacia el offset 618, leemos en el “Data Inspector”, valor de USHORT de 1877 (que es el año), nos desplazamos 2 offset hacia adelante (offset 620), leemos en el “Data Inspector”,  el valor de BYTE de 6 (valor del mes) y nos desplazamos hacia el offset 621 y vemos en el valor BYTE el valor de 25 (valor del día). Como se dijo, esta columna tiene una longitud de 4 Bytes, el USHORT tiene 2 bytes de longitud, y el BYTE tiene un byte de longitud, como el año es USHORT, el mes y el día es BYTE, suman los 4 bytes de longitud de esta columna DATE_.

Esperando que sea útil esta información, sobre todo los que programamos en GIS, será hasta el otro mes. Saludos



ª