¿Cómo trabajar con casi 250.000 puntos y un raster de 80 GB con un tamaño de píxel de 1 x 1 m sin reventar tus equipos informáticos? Ese está siendo nuestro último reto y la mejor forma de abordarlo ha sido combinar el uso de dispositivos de almacenamiento de alta velocidad, en especial para el archivo ráster, y la división en partes más pequeñas para los puntos, de forma que las operaciones de geoprocesamiento se irán realizando de forma iterativa por subgrupos más pequeños y concentrados en el espacio, lo que facilita al ordenador los cálculos y la gestión de sus recursos.
¿Y de qué forma se pueden dividir y crear grupos más manejables? Pues te contamos algunas de ellas:
- Una forma sencilla y rápida es crear un campo nuevo en la tabla de tu archivo de puntos, y rellenarlo con un numero aleatorio dentro de un rango establecido, cuyo valor máximo marcará el número de subgrupos que queramos crear. Ello se puede hacer mediante un simple script en python por ejemplo. Si el volumen de puntos es lo suficientemente elevado es de esperar que la cantidad de puntos en cada subgrupo sea similar. Ahora sólo queda ejecutar una consulta sobre los datos para filtrar y trabajar con cada uno de los números aleatorios (subgrupos). El resultado de esta técnica es un archivo con una distribución similar a la del archivo original, pero con una menor densidad de puntos, que dependerá del número de subgrupos creados.
- Otra forma sería la de crear una malla poligonal que abarque todo el ámbito de nuestros puntos y que podrá ser rectangular, hexagonal, de tipo voronoi, etc. Mediante la intersección de nuestros puntos con esta capa poligonal conseguiremos obtener un campo en nuestra tabla de datos que incluirá el identificador de cada polígono, lo que de nuevo nos permitirá filtrar nuestra tabla y trabajar por subgrupos. En este caso el resultado dependerá de la malla poligonal creada, principalmente del tamaño de sus celdas, y de la distribución espacial de nuestros puntos, ya que ambos factores podrían determinar que haya polígonos en los que se concentren un gran número de puntos, mientras en otros la densidad de puntos podría ser muy baja.
- Una tercera posibilidad es la de crear una malla poligonal rectangular o cuadrada pero de tamaño no regular y teniendo en cuenta la distribución espacial de nuestros puntos en su diseño, con el objetivo de limitar el número máximo de puntos en cada polígono. Una vez creada la malla y de nuevo mediante una intersección entre los puntos y los polígonos así creados, obtenemos el campo con el identificador de cada parte de la malla poligonal y que podemos usar para filtrar y seleccionar los subgrupos con los que trabajar.
Existen otras muchas formas, como el uso de clusters, buffers, algoritmos de densidad, selecciones por localización o incluso mediante selecciones manuales si los datos no son muchos. La metodología a utilizar dependerá principalmente del tipo de geoprocesamiento y análisis de los datos que se requiera utilizar.
Por último, una vez que disponemos de la forma de crear subgrupos, podemos generar la consulta y la posterior ejecución del geoprocesamiento de forma manual, en especial si son pocos subgrupos, o bien, más productivo y eficaz, generar un programa en python que permita iterar con cada valor del campo que determina los subgrupos, realizando éstas funciones de consulta o filtrado, el geoprocesamiento y el guardado del resultado de forma automática.
En nuestro caso, por el tipo de análisis que estamos realizando, hemos utilizado la creación de una malla poligonal cuadrada irregular, que ha contenido más de 300 polígonos, por lo que estamos trabajando sobre más de 300 subgrupos de datos del archivos original. Es un volumen de grupos bastante elevado, pero que permite realizar los cálculos de forma eficaz ya que la densidad de puntos en cada uno de ellos es bastante baja (por debajo de los 2000). Para la gestión y el trabajo con tantos subgrupos hemos creado varios programas en python, que nos permiten iterar de forma automática todo el flujo de trabajo necesario para cada subgrupo y finalmente fusionar los más de 300 archivos resultantes (uno para cada subgrupo) de nuevo en un único archivo.