Python_forestalDe nuevo tenemos el placer de presentar más proyectos finales del Master GIS con Python. Cada día los proyectos son más interesantes y tienen más foco en resolver problemas reales. Ese es nuestro foco y los alumnos sin duda aprovechan el tiempo.

En esta ocasión, los alumnos del Master GIS con Python, Cristian Nelson Martinez Novoa y Alejandro Gonzalez Rojas, de la empresa chilena de gestión forestal, han montado un proceso con Python que automatiza las tareas de generación de mapas para los trabajos en campo de Raleos y cosechas forestales.

Os dejo abajo el proceso completo del proyecto y además, los scripts que se usan y cuyos procesos fundamentales son de:

–          Generación y limpieza de directorios

–          Movimiento de capas

–          Generación de referencias espaciales

–          Montado de Mapas

–          Selecciones espaciales on time

 

Mauricio González Rojas    mauricio.gonzalez.rojas@arauco.cl

Cristian Martinez Novoa    cristian.martinez@arauco.cl

Ingenieros de Planificación Producción. Forestal Arauco Zona Centro. Chile.

 

Abstract

Las faenas de cosecha y raleos (aclaramientos en el bosque) comerciales son ejecutados, principalmente, para la obtención de madera aserrada y pulpa de celulosa.

En su planificación intervienen una serie de actividades que se desarrollan en terreno, como la generación adecuada de la red de caminos que permitirán a futuro la extracción y transporte de la madera. Se evalúan todas las consideraciones ambientales, económicas y de seguridad que harán viable cada proyecto de cosecha forestal. Elección de maquinarias adecuadas para la corta de los árboles. Y finalmente la definición de las áreas productivas y de protección para el patrimonio forestal a intervenir en las futuras temporadas.

Toda esta información tiene que ser canalizada a través de una buena base cartográfica, la cual debe estar lo más actualizada posible. Esta requiere ser graficada mediante planos o mapas sencillos que permitan una apreciación certera de la situación del predio y de la oferta del bosque a intervenir.

La generación de planos que hacen referencia a las áreas productivas, a los equipos de cosecha-raleo y a las condiciones topográficas de los predios de nuestra organización, hoy en día se confeccionan en su totalidad con engorrosas aplicaciones programadas en ArcView. De ahí es que surge la necesidad de realizar un giro importante en la automatización de  procesos para la generación de planos.

A través de las herramientas presentadas en el Master GIS Python de Geospatial training se ha desarrollado un código de lenguaje Python, que permitirá generar planos de forma automática, georreferenciados y a escala (cartografía 1:10.000) de la oferta de cosecha o raleo actual y además de temporadas próximas. Los cuales pueden ser utilizados en forma masiva por supervisores o ingenieros de la empresa.

  1. 1.       Situación Actual y Evaluación del cambio a realizar

La generación y uso de la cartografica actual, esta basada en la utilización de Arcview 3.1. Las coberturas asociadas al predio que se necesita graficar estan almacenadas en un disco de red de la empresa y mediante un proceso de Visual Basic se generan planos que terminan imprimiendose en papel o en formato PDF, pero teniendo la limitancia de no estar georeferenciados.

Este material cartografico es el apoyo fundamental para las unidades que trabajan en terreno,  pero su gran carencia esta en su generación, requieren de personal capacitado en Arcview para que puedan cargar las coberturas y además de iniciar cualquier geoproceso que sea necesario, los cuales están acotados a la versión de Arcview en uso.

En la figura 1, podemos apreciar un plano actual creado en ArcView, el cual puede tomar varios minutos en su confeccion y por cierto requiere conocimientos avanzados de este software.

Python_forestal_1

Figura 1: Plano tradicional confeccionado en ArcView

 

El gran desafio es poder crear un Script de Python que permita automatizar la busqueda de cada cobertura del predio y generar un plano con la superficie a cosechar o ralear por temporada y tipo de faena. Es aquí donde generaremos el cambio frente a lo que se utiliza actualmente, obteniendo mapas georeferenciados y que sean utilizados en equipos smartphones y tablets durante las actividadades de campo.

  1. 2.       Generación automática de planos

En primera instancia se debe cosiderar que, para Forestal Arauco Zona Centro, la fuente de información cartográfica se encuentra alojada en un disco de red. Estos se encuentran divididos y codificados por predio, a su vez existe un subdirectorio que almacena los caminos, curvas de nivel, información hidrográfica, canchas de cosecha e información del uso del suelo, entre muchos otros. Toda esta informacion en formato vectorial.

En la figura 2, se aprecia todos las carpetas que contienen información cartografica de un predio

Python_forestal_2

 Figura 2: Carpeta con subcarpetas predio codigo 20030

 

El disco de red es la principal fuente de información para generar los planos y constantemente se actualiza, ya sea por la unidad de Planificación o la unidad de Cartografía de la empresa. Cada tipo de archivo se guarda de distinta forma, ya sea por nombres, códigos y algunos mas complejos, se guardan con versiones anteriores y tienen códigos asociados a la fecha de creación.

Por otro lado, para el desarrollo del Script se utilizará el disco local C, donde se crearán copias de todos los archivos necesarios, los cuales podrán ser revisados sin ser modificados en el disco de red y así evitar generar algún inconveniente con la información patrimonial.

El directorio de trabajo donde se aloja el Script es nombrado GeoPlano, este contiene el código Python mas los subdirectorios necesarios para su ejecución. Finalmente se generan los planos operativos y estos se alojan en el disco C:/aplicaciones/Geoplano

El detalle de los archivos y directorios son:

GeoPlano (Script): Es el código que mediante variables de entorno ingresadas por el usuario, genera planos georreferenciados a partir de información cartográfica patrimonial de Forestal Arauco Zona Centro.

GeoPlano.mxd: Archivo de arcmap con proyecto tipo, donde ocurren las cargas de shapefiles para generar los planos.

Directorios: Carpeta donde se alojan coberturas generales e imágenes asociadas a todos los planos que seran generados.

Predio: Carpeta donde se almacenan las coberturas objetivos de forma local, mas las coberturas propias de los geoprocesos ejecutados por el Script.

Respaldo: Carpeta de respaldo con archivo .mxd sin modificaciones, ni coberturas cargadas.

Salida: Carpeta donde se alojan los archivos PDF o planos objetivos creados por medio del Script.

A continuación podemos ver en la figura 3 el contenido de la carpeta GeoPlano que contiene todo lo necesario para nuestro proyecto.

El entorno de diseño para este ejercicio, por su simpleza y ayuda gráfica, es el IDLE (Entorno de desarrollo integrado de Python) en su versión 2.7, instalado por defecto con ArcGis 10.2. Este nos permite tanto el diseño como la ejecución final del Script.

Python_forestal_3

Figura 3: Carpeta GeoPlano con código Python, mxd del proyecto y sus subdirectorios

 

En la figura 4, se puede apreciar la facilidad con la cual se puede abrir la edición y ejecutar el código en cuestión.

La generación de planos se realiza exclusivamente mediante la ejecución del código Python, por cuanto no requiere personal especializado en SIG, solamente necesita tener instalado los directorios necesarios para su ejecución.

Python_forestal_4

Figura 4: Código Python cargado en IDLE de Python 2.7 y listo para ejecutar.

 

  1. 3.       Ejecución del Script

Luego de ejecutar el Script, se inicia la carga  de los ambientes de trabajo con la información requerida, principalmente Arcpy, el cual permite el análisis de datos geográficos, conversión de datos, administración y automatización de los mapas para el proyecto. Además carga otros archivos necesarios como documentos desde el servidor hasta el directorio local del predio y permite borrar información de transición, entre otros.

El Script completo con el código de Python utilizado en todo este documento, se expone en detalle en el Anexo 1.

La carga del ambiente de trabajo se solicita mediante un reingreso de las variables primarias del Script (figura 5) que hacen alusión al predio que se requiere ilustrar.

Python_forestal_5

 Figura 5: Python Shell con Script GeoPlano en ejecución y variables de predio ingresadas

A continuación, el Script borra los archivos existentes en la carpeta “Directorio” (que son los archivos de la ejecución anterior) y busca, copia y pega, los nuevos archivos de las coberturas del predio ingresado como variable, desde el disco de red.

Entre estas coberturas busca los caminos, hidrografía, usos del suelo, entre otras. Cabe destacar que las coberturas de “Raleo” y “Cosecha” dependen de la selección del usuario, pero, cualquiera de estas, es almacenada dependiendo de la necesidad del plano final y son guardadas como “Escenario” en el directorio local.

Si todo está correctamente creado y copiado, arroja un mensaje para el predio en cuestión y comienza a ejecutar inmediatamente las siguientes tareas del código. (figura 6)

Python_forestal_6

 

 Figura 6: Ejemplo de ejecución de Script GeoPlano para el predio 20030

Una vez que se almacenan todas las coberturas necesarias en el directorio local y subdirectorios específicos del predio, se crea una workspace para la carpeta que contiene dicha información, además se incorpora la proyección geográfica de cada cobertura de la workspace según corresponda. Esto se debe a que la información patrimonial de la empresa no se encuentra con las proyecciones geograficas necesarias.

Luego de que se han incorporado las proyecciones geograficas de cada cobertura, se realiza un geoproceso sencillo de Select sobre la feature “Escenario” con un Query que asocia la temporada de intervención y el estado de avances de la faena, si es que esta se encuentra ya realizada antes de que finalice la temporada de cosecha.

Este geoproceso genera entonces una nueva feature llamada “Avance”, el cuál está asociado a la faena, temporada y estado de avance efectuado para el “Escenario” objetivo.

Concluida la generación del “Avance”, el directorio y la carpeta predio se encuentran listos para generar un mapa o plano sobre un proyecto mxd guardado que contiene las coberturas previamente asociadas. Entonces se define la escala en 1:10.000 y centra la cobertura de la imagen “Escenario” para  el feature set principal. El feature set zonal  del layer “Predio” se centra a su vez con una escala de  1:250.000.

Finalmente, se cambian los textos al interior del layout que hacen alusión a las variables del nombre del predio, código, temporada y faena. Se guarda el mxd como una nueva versión en la carpeta de GeoPlano y se exporta el plano a PDF en la carpeta de salida con una codificación que hace mención nuevamente a las variables del predio, código, temporada y faena.

Cabe resaltar que todos los procesos antes mecionados (incluyendo la edición del mxd) no son perceptibles por el usuario, puesto que estos mensajes aparecen solo durante la ejecución del Script.

A continuación podemos ver el caso del predio del ejemplo anterior (código 20030), donde ya se encuentra finalizado la ejecución del Script. Muestra los mensajes de cada uno de los pasos concluidos con éxito durante el proceso. (Figura 7)

Python_forestal_7

 Figura 7: Ejecución finalizada de Script y mensajes durante el proceso.

Al término del proceso se van almacenando los diversos planos creados en PDF en la carpeta de Salida de GeoPlano, los cuales cuentan con su georreferenciación, coberturas, faena, escala y temporada objetivo. (Fig.8)

 Python_forestal_8

Figura 8: Carpeta de Salida con archivos PDF asociados

Python_forestal_10

  Figura 10: Ejemplo con salida en PDF generado con GeoPlano

Cabe resaltar de la figura 10, que todo lo que se refiere formato de las features (colores, tipos de relleno, etiquetas y formas) está pre-definido de acuerdo al estándar de Forestal Arauco Zona Centro y solamente son las coberturas que van cambiando de acuerdo al predio que se esté graficando.

Scripts utilizados