XXIII C ON G R E S O N A C I O N A L AMH DE H I D R Á U LI C A PUERTO VALLARTA, JALISCO, MÉXICO, OCTUBRE 2014 AMH USO DE EXCEL EN EL DESARROLLO DE SOFTWARE PARA DELINEAR CUENCAS HIDROLÓGICAS A PARTIR DE MDE Martínez Martínez Sergio Ignacio Universidad Autónoma de Aguascalientes. Av. Universidad No. 940, Ciudad Universitaria, Aguascalientes, Aguascalientes, México. C.P. 20131 [email protected] Introducción Actualmente, la delineación de cuencas hidrológicas se suele realizar a partir de modelos digitales de elevación (MDE). Los MDE más comunes son, básicamente, matrices en las que cada elemento (cuadrado) representa la elevación de una parte de la superficie terrestre. El proceso de delineación se puede automatizar usando herramientas geoinformáticas implementadas en software comercial y/o libre, tales como las ArcHydro en ArcMap (ESRI WRT, 2013) o las TauDEM (Tarboton, 2011) en MapWindowGIS (www.mapwindow. org); o, alternativamente, crearlas ex profeso debido diversas razones particulares, tales como la necesidad de crear herramientas propias o resolver problemas de una forma alternativa. En este trabajo se describe el proceso seguido al desarrollar prototipos en Excel de parte de las herramientas DACHydro (Delineación Alternativa de Cuencas Hidrológicas), una serie de herramientas que sirven para delinear cuencas y efectuar procesos relacionados (Martínez, (2013a y 2013b). Las herramientas DACHydro corren como un complemento (en inglés, plug-in o add-in) de MapWindowGIS, que le añade a esta última aplicación, funcionalidad que originalmente no tenía. 2014) llamado simplemente asc, es un formato en el que la malla se da en un solo archivo de texto con extensión asc que puede importarse fácilmente a Excel; de tal manera que los datos generales que acompañan a la malla se guardan en una hoja de trabajo (Worksheet) y la matriz de valores se guarda en otra. Las celdas de la malla se identifican por renglones que van de arriba a abajo, del renglón 1 al renglón máximo y por columnas que van de izquierda a derecha, de la columna 1 a la columna máxima, concordando de esta manera con la identificación de las celdas de Excel. En el proceso de análisis de un MDE se pueden crear varias hojas de trabajo adicionales que representan mallas y que serían el resultado de los procesos efectuados. La ilustración 1 muestra un MDE que abarca los alrededores de la cuenca de la presa Media Luna (localizada en Calvillo, Ags), la salida de la cuenca y la cuenca delineada con las herramientas DACHydro. La fuente del MDE fue el Continuo de Elevaciones Mexicano (INEGI, 2013). Metodología Algunas veces, el desarrollo de software se puede abordar escribiendo código prototípico en un lenguaje interpretado debido a que se quiere observar de manera inmediata los resultados intermedios de los algoritmos sujetos a prueba. En el caso de los MDE, un ambiente de programación propicio para realizarlo es el proporcionado por hojas de trabajo del programa Microsoft® Excel® y macros desarrolladas en lenguaje Visual Basic para Aplicaciones (Microsoft® VBA©). Primero se escogieron o generaron varios MDE suficientemente pequeños para poder visualizarlos sin mucha dificultad en la pantalla de la computadora al usarlos como casos de prueba. En realidad, para el desarrollo de las herramientas no es necesario que los MDE correspondan a un lugar de la superficie terrestre, pueden ser simples matrices. Existen múltiples formatos en los cuales guardar un MDE como tiff, grid o asc (ESRI, 2014). De hecho los MDE son un caso especial de un ráster o malla (del inglés raster o grid). En una malla se pueden almacenar también valores diferentes a la elevación, tales como dirección de flujo, número de escurrimiento o precipitación. Los formatos están definidos por uno o varios archivos, en los que se guardan la matriz de celdas de valores, el tamaño de las celdas, la extensión de la malla, las coordenadas de un punto específico, el valor que señala una celda sin datos (NoData) y el sistema de coordenadas geográficas en que está referenciado la malla, entre otros datos. El formato ArcInfo ASCII Grid (ESRI, Ilustración 1. MDE de la presa Media Luna cuya salida está localizada en las coordenadas longitud 102°47’18”W y latitud 21°48’26”N. Se han propuesto diversos algoritmos para delinear cuencas y hacer operaciones afines a partir de MDE; ver por ejemplo, (Vieux, 2004) y (Bartak, 2009). En términos generales, el proceso de delineación de una cuenca abarca los siguientes subprocesos: el rellenado de hoyos o depresiones, la asignación de direcciones de flujo y la delineación, propiamente dicha, a partir de la celda de salida. El rellenado de hoyos consiste en aumentar la elevación de zonas del MDE formadas por una o más celdas que no tienen salida; esto es, que su elevación es más baja que la de cualquiera de las celdas AMH XXIII C ON G R E S O N A C I O N A L DE H I D R Á U LI C A PUERTO VALLARTA, JALISCO, MÉXICO, OCTUBRE 2014 que las rodean. Salvo que esas zonas sean depresiones reales, deberán ser rellenadas para generar un MDE con comportamiento hidrológico correcto en el que todas las celdas tengan salida hacia los límites del MDE. El resultado de este primer subproceso es el MDE con hoyos rellenados (MHR). El segundo subproceso, la asignación de direcciones de flujo, produce una malla de direcciones de flujo (MDF); se realiza tomando en cuenta la dirección de máxima pendiente descendente de cada celda del MHR. Existen diferentes métodos para asignar dicha dirección, uno de los más populares, sencillo y, la mayor parte de las veces satisfactorio, es el método de las ocho direcciones de flujo, asignadas a las ocho celdas vecinas a la celda en estudio (O’Callaghan y Mark, 1984). En este método se asigna una dirección de las ocho posibles, será la que tiene máxima pendiente; ésta, se define con: (1) donde, Ea es la elevación de la celda actual, Ev, la elevación de la celda vecina, y lav, la distancia entre los centros de las celdas. Una vez identificada la pmax se asigna a la celda actual la dirección correspondiente (por ejemplo: Este = 1, Sureste = 2, Sur = 3, y así, hasta llegar a Noreste = 8). La ilustración 2 muestra como ejemplo, una celda rodeada por sus ocho celdas vecinas. Calculando las pendientes se encuentra que la dirección de flujo es igual a 3, debido a que hacia la celda Sur se tiene la pendiente máxima. Ilustración 2. Determinación de la dirección de flujo. Finalmente, la delineación de la cuenca comienza cuando ya han sido identificadas las direcciones de flujo. Primero se selecciona la celda de salida y se hace la actual. Se eligen las celdas vecinas que descargan a la celda actual. Luego, cada celda elegida se convierte a su vez en la celda actual y se repite el proceso hasta que ya no se pueden elegir más celdas que descarguen a la celda actual. En ese punto se ha delineado la cuenca y se ha guardado en el MDE de la cuenca delineada (MCD). Existen diferentes metodologías para realizar el subproceso de rellenado de hoyos, en este trabajo se implementó un método basado en el propuesto por Wang y Liu (2006), que además de rellenar los hoyos (crear el MHR) asigna las direcciones de flujo (crea la MDF) y obtiene una malla de cuencas cuyas salidas se localizan en los límites del MDE; o sea, crea la Malla de cuencas de frontera (MCF). Un refinamiento posterior del proceso de delineación (Martínez, 2013a), que se puede usar cuando se tiene un MDE muy grande comparado con el tamaño de la cuenca, consiste en definir una parte o buffer del MDE alrededor de la salida de la cuenca, realizar el proceso, revisar si la cuenca delineada toca la frontera del buffer; si es así, ajustarlo y volver a delinearla. Este proceso iterativo termina cuando la cuenca delineada no toca la frontera del buffer o se han alcanzado los límites del MDE. AMH Los bloques de construcción de una macro en VBA son las subrutinas o procedimientos (Sub) y las funciones (Function); consultar, por ejemplo, Microsoft (2006) para ver una descripción completa de VBA. Los procedimientos y las funciones manipulan datos convirtiéndolos en resultados; se valen de ciclos como For-Next o Do-Loop; de estructuras de control como If-Then-Else-EndIf o Select-Case, y de innumerables asignaciones de variables igualadas a algún valor o a una fórmula más o menos compleja. Los tipos de datos pueden ser simples como los tipos Integer, Long, Double y String, los arreglos (vectores y matrices) y otros más complejos que pueden ser definidos por el usuario, como son los objetos que se pueden implementar en una colección o en un módulo de clase. Un objeto es algo que representa cualquier cosa que uno quiera, siempre y cuando pueda ser descrito conceptualmente. Una colección (Collection) de VBA proporciona una manera conveniente para representar un grupo de elementos como un solo objeto. Los elementos de una colección no tienen por qué ser del mismo tipo, aunque suelen serlo. Una clase (Class) de VBA se define en un módulo de clase y sirve como una plantilla para representar un objeto. Un ejemplo de una colección podría ser una lista de coordenadas. Dos ejemplos de clase podrían ser la clase Cell y la clase RasterAscii. La primera podría tener diversas propiedades de una celda que servirían para almacenar y tratar como una unidad todos los datos relevantes a la celda, tales como su elevación, el renglón y la columna donde está, si está en la frontera del MDE y la cuenca de frontera a la que pertenece. La segunda clase podría tener las propiedades de una malla asc, como por ejemplo, su nombre, su número de columnas y renglones, las coordenadas geográficas de su esquina inferior izquierda, el tamaño de las celdas, el valor NoData y los valores asignados a cada una de sus celdas. El propósito de esta clase sería facilitar cargar a una hoja de Excel una malla asc o guardar en un archivo de texto una malla almacenada en una hoja de trabajo de Excel. A pesar de que se hagan buenos análisis de los problemas por resolver mediante un procesamiento automatizado, siempre existe la posibilidad de que el código generado no trabaje como se esperaba y deba ser corregido, entrando a una secuencia de pruebas y errores que va ayudando a refinar y depurar el código. En el caso de la delineación de cuencas, el desarrollo de código programático se facilita si se usan MDE suficientemente pequeños como para que sus celdas puedan ser distinguidas a simple vista en la pantalla de la computadora y se utiliza un lenguaje interpretado (como el VBA). El lenguaje interpretado permite, con cierta facilidad, parar y continuar la ejecución del código, ejecutarlo paso a paso y observar la evolución de los valores de las variables. Esta flexibilidad de ejecución ayuda al programador a escribir código, correrlo, observar los resultados, revisar si son correctos, corregir el código, volver a correrlo, observar el efecto que tienen los cambios realizados, revisar si los resultados son correctos y repetir el ciclo hasta que el comportamiento de los algoritmos codificados sea satisfactorio. Por lo menos, un código satisfactorio cumple dos condiciones: (uno) produce resultados correctos para los casos de prueba y (dos) los obtiene en tiempos computacionales razonablemente cortos. Siguiendo el proceso iterativo de diseño explicado, se llegó a implementar el proceso de delineación dentro de Excel usando macros VBA. Luego, a partir de las macros VBA y trabajo adicional no realizado en Excel, se implementaron las herramientas XXIII C ON G R E S O N A C I O N A L AMH DE H I D R Á U LI C A PUERTO VALLARTA, JALISCO, MÉXICO, OCTUBRE 2014 AMH DACHydro en un lenguaje compilado, el lenguaje Microsoft® VB.NET®. La implementación se hizo dentro de un complemento para el programa geoinformático de código abierto MapWindowGIS. Detalles de esta parte de la investigación no se muestran en este trabajo, puede consultarse en Martínez (2013a y 2013b). Resultados El desarrollo de los prototipos de código en VBA de esta parte de las herramientas de delineación DACHydro arrojó que una sola macro o rutina Sub que llama a otros procedimientos y varias funciones bastó para implementar el rellenado de hoyos (creación del MHR), la asignación de cuencas de frontera (creación de la MCF) y la asignación de direcciones de flujo (creación de la MDF). Mientras que otra macro fue suficiente para realizar la delineación de la cuenca a partir de su salida (Creación del MCD). En aras de la brevedad solo el resultado de la construcción en VBA de esta segunda macro se describe aquí. El proceso de delineación comienza una vez que se haya ejecutado la primera macro, obteniendo el MHR y la MDF; adicionalmente se debe contar con las coordenadas del punto de salida o, sea, el renglón y la columna de la celda de salida. Para realizar la delineación se implementó una estructura de datos conocida como cola (First In First Out queue); la cola es una lista en la que todas las adiciones de datos se hacen en un extremo, y todas las eliminaciones se efectúan en el otro extremo (Kruse, 1988); haciendo que los elementos que llegan primero a la lista sean los que primero salen de ella. Específicamente, la cola se implementó como una colección de renglones y columnas a la que se le añade un elemento al final de la lista con la función Queue y se le quita un elemento al principio de la lista con la función DeQueue (Ilustración 3). Ilustración 4. Diagrama de flujo del subproceso de delineación de la cuenca. Tabla 1. Pseudocódigo del subproceso delineación de la cuenca. Paso 1 2 3 Function Queue(list As Collection, _ item As Integer) list.Add item End Function Function DeQueue(list As Collection) Dim deq As Long deq = list.item(1) list.Remove 1 DeQueue = deq End Function Ilustración 3. Funciones Queue y DeQueue. El subproceso de delineación de la cuenca, explicado previamente con palabras, se puede representar también, como cualquier otro proceso, en otras formas más formalizadas como podrían ser, un diagrama de flujo o una sección de pseudocódigo. En ambas representaciones se indican de una manera simplificada las principales operaciones que se tienen que realizar al ejecutar el proceso; es decir, al mismo tiempo en que se oculta un poco la complejidad, se representa con claridad lo esencial. La ilustración 4 muestra un diagrama de flujo del subproceso de delineación de la cuenca, formado esencialmente por la identificación de la celda de salida y por un ciclo Do-Loop en el que se revisan las celdas de la MDF y se crea el MCD. A su vez, la representación del subproceso en forma de pseudocódigo se muestra en la Tabla 1. 4 5 Iniciar Introducir a la cola las coordenadas de la celda de salida. Hacer la celda de salida (la primera celda de la MCD) igual a la celda correspondiente (de las mismas coordenadas) del MHR. Hacer a. Sacar de la cola las coordenadas de la última celda. b. Hacer esta celda la celda actual. c. Para cada una de las ocho celdas vecinas de la celda actual: Revisar si descarga a la celda actual. Si es así: Introducir sus coordenadas a la cola. Hacer la nueva celda del MCD igual a la celda correspondiente del MHR. De otro modo: No hacer nada. Si la cola no está vacía regresar al paso 3. Rellenar las celdas restantes del MCD con el valor NoData. Terminar El resultado de la codificación del subproceso delineación de cuenca se muestra en la ilustración 5. Las variables que no se declaran son variables globales del módulo en el que se incluyen las dos macros discutidas y con significado ya explicado; entre ellas, las que designan las mallas MHR, MDF y MCD. Los valores almacenados o por almacenar en las celdas de una hoja de trabajo se referencian con la sintaxis: Worksheets(NombreHoja).Cells(i, j), donde i representa al renglón y j la columna donde está la celda (Por razones de espacio, en la ilustración 5 se sustituyó Worksheets por WS). El símbolo “_” indica que la línea de código continúa en el siguiente renglón. XXIII C ON G R E S O N A C I O N A L AMH DE H I D R Á U LI C A PUERTO VALLARTA, JALISCO, MÉXICO, OCTUBRE 2014 Public Sub DeliCuenca() Dim i As Integer, j As Integer Dim k As Byte, df As Byte Dim dk As Integer Dim i1 As Integer, j1 As Integer Dim Cola As New Collection Case 3, 7 jj = 0 Case 4, 5, 6 jj = -1 End Select End Function ' Las coordenadas de la celda de ' salida se almacenan en la cola ´ ' "Cola" Queue Cola, iSal Queue Cola, jSal WS(MCD).Cells(iSal, jSal) = _ WS(MHR).Cells(iSal, jSal) Function ii(dir As Byte) Select Case dir Case 1, 5 ii = 0 Case 2, 3, 4 ii = 1 Case 6, 7, 8 ii = -1 End Select End Function Do ' ' i j Las coordenadas de la celda actual son leídas de la cola. = DeQueue(Cola) = DeQueue(Cola) ' Se revisan las ocho celdas vecinas ' de la celda actual desde el Oriente ' hasta el Nororiente en sentido de ' las manecillas del reloj. For k = 1 To 8 i1 = i + ii(k) j1 = j + jj(k) If i1 < 1 Or i1 > imax Or _ j1 < 1 Or j1 > jmax Then ' celda fuera del MDE ' No hacer nada Else df = WS(MDF).Cells(i1, j1) If df <> 0 Then dk = df - k If Abs(dk) = 4 Then Queue Cola, i1 Queue Cola, j1 WS(MCD).Cells(i1, j1) = _ WS(MHR).Cells(i1, j1) End If End If End If Next k Loop While Cola.Count > 0 ' Llenar con NoData las celdas ' restantes del MCD For i = 1 To imax For j = 1 To jmax If WS(MCD).Cells(i, j) = "" Then WS(MCD).Cells(i, j) = NoData End If Next j Next i End Sub Ilustración 5. Subrutina Delineación de la cuenca. En la ilustración 5 aparecen dos funciones que dan las coordenadas relativas de las celdas vecinas con respecto a las de la celda actual; su codificación en VBA se da en la ilustración 6. Function Select Case jj jj(dir As Byte) Case dir 1, 2, 8 = 1 AMH Ilustración 6. Funciones para dar las coordenadas relativas de las celdas vecinas. Discusión Las dos macros que realizan los subprocesos para la delineación de cuencas fueron la semilla para desarrollar las versiones compiladas de las mismas. Aunque en este trabajo solo se muestra el detalle de la segunda macro, llamada DeliCuenca, es suficiente para demostrar que efectivamente el uso de hojas de trabajo de Excel y de macros en VBA que manipulen las hojas, sirve para comenzar a desarrollar herramientas para realizar análisis de mallas de datos geográficos. Entre las mallas, son de interés especial los MDE, pues sirven para efectuar análisis hidrológicos. Las modificaciones esenciales de los códigos prototípicos creados al pasar de una versión de Basic (VBA) a otra (VB.NET) fueron pequeñas. Sin embargo, se tuvo que hacer trabajo adicional debido a nuevos requerimientos de la versión compilada, pues la implementación de las herramientas se tenía que hacer como un complemento que se guarda en un archivo ejecutable que puede ser activado al correr el programa MapWindowGIS (MapWindow, 2013a y 2013b). Además, el propio programa MapWindowGIS permite realizar funciones geoinformáticas que no pueden hacerse en Excel. Otra ventaja que conviene enfatizar es que el programa geoinformático MapWindowGIS es no comercial y de código abierto, lo que hace atractivo crear complementos para añadirle funcionalidad sin que los desarrolladores ni los usuarios finales tengan que comprar licencias de software comercial para poder utilizarlos. Conclusiones El uso de un ambiente de programación interpretado, VBA implementado en Excel, sencillo y accesible para programadores principiantes o intermedios, ha demostrado su utilidad al ayudar a generar códigos prototípicos de herramientas especializadas, sin requerir nada más que ese programa ampliamente disponible. Luego, la transformación del código a un lenguaje muy parecido pero compilado, dando origen a varias herramientas contenidas en las DACHydro, demuestra lo útil que puede ser este enfoque. Las herramientas DACHydro siguen en desarrollo, actualmente se está mejorando la delineación iterativa, se está tratando de hacer que su ejecución sea más eficiente, evitando en lo posible la repetición de operaciones realizadas en iteraciones previas. AMH XXIII C ON G R E S O N A C I O N A L DE H I D R Á U LI C A PUERTO VALLARTA, JALISCO, MÉXICO, OCTUBRE 2014 Adicionalmente, trabajo futuro puede incluir el desarrollo de nuevas herramientas que complementen las ya implementadas. Referencias BARTAK, V., How to Extract River Networks and Catchment Boundaries from DEM: a Review of Digital Terrain Analysis Techniques. Journal of Landscape Studies 2, 2009, pp. 57-68. ESRI, Supported raster dataset file formats. [en línea] [citado el 24 de agosto de 2014]. Disponible para World Wide Web: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/ Supported_raster_dataset_file_formats/009t0000000q000000/ ESRI WATER RESOURCES TEAM (ESRI WRT), Arc Hydro Tools Overview. Version 2.0. [en línea] [citado el 6 de abril de 2013]. Disponible para World Wide Web: http://downloads.esri.com/blogs/hydro/ah2/arc_hydro_tools_2 _0_overview.pdf. INSTITUTO NACIONAL DE ESTADÍSTICA Y GEOGRAFÍA (INEGI), Continuo de elevaciones mexicano CEM 2.0. [en línea] [citado el 24 de mayo de 2013]. Disponible para World Wide Web: http://www.inegi.org.mx/geo/contenidos/datosrelieve/continen tal/continuoelevaciones.aspx. KRUSE, R.L., Estructuras de datos y diseño de programas. Primera ed., México: Prentice Hall Hispanoamericana, 1988, 488 pp. MAPWINDOW [Ref a], Write MapWindow GIS Plugins. [en línea] [citado el 6 de abril de 2013]. Disponible para World Wide Web: http://www.mapwindow.org/apps/wiki/doku.php?id=write_plu gins#ducumentation. MAPWINDOW [Ref. b], MapWindow Project Overview. [en línea] [citado el 7 de abril de 2013]. Disponible para World Wide Web: http://www.mapwindow.org/apps/wiki/doku.php?id=project_o verview. MARTÍNEZ, S. I. [Ref. a], Acercamiento a la delineación iterativa de cuencas utilizando modelos digitales de elevación, Memoria de resúmenes del 14o. Seminario de Investigación, Universidad Autónoma de Aguascalientes, 20-22 mayo 2013, pp. 168-175. MARTÍNEZ S. I. [Ref. b], Uso de mapas mentales para la creación del complemento DACHydro para MapWindow. Convergencias del diseño y de la construcción. Arquitectura, ingeniería civil y urbanismo, Universidad Autónoma de Aguascalientes, Vol. III, pp. 242-255. MICROSOFT, Referencia del programador de Microsoft Office Excel 2007 (Parte de la ayuda de Microsoft Excel 2007). Redmond WA: Microsoft Corporation, octubre 2006. O’CALLAGHAN, J.F., MARK, D.M., The extraction of drainage networks from digital elevation data. Computer Vision, Graphics, and Image Processing, Vol. 28, Num. 3, 1984, pp. 323-344. TARBOTON, D., Terrain Analysis Using Digital Elevation Models (TauDEM) [en línea] [citado el 12 de Agosto de 2011]. Disponible para World Wide Web: http://hydrology.usu.edu/ taudem/taudem5.0/. AMH VIEUX, B.E., Distributed Hydrologic Modeling Using GIS. 2nd ed., Water Sciences and Technology Library, Dordrecht: Kluwer Academic Publishers, 2004, 289 pp. WANG, L., and LIU, H., An Efficient Method for Identifying and Filling Surface Depressions in Digital Elevation Models for Hydrologic Analysis and Modelling, International Journal of Geographical Information Science, Vol. 20, Num. 2, 2006, pp. 193-213.
© Copyright 2025