Se quiere hacer un análisis de segregación para una ley de mineral. El análisis consiste en ubicar los puntos que cumplan con un valor mayor que una concentración especificada y que los puntos vecinos también cumplan con la condición.
En el gráfico siguiente el punto azul cumple con la condición de tener una ley mayor que la especificada. Los puntos verdes también la cumplen, pero aparte son vecinos del punto azul. Si algún punto en la vecindad no cumpliera con la condición, ninguno de los puntos tendría un cambio de atributo.
Este análisis se hizo mediante el software SQLite para base de datos. Su resolución se muestra a continuación:
1. Crear base de datos y una tabla: tabla_segregacion
2. Importar csv con los datos de xcentre, ycentre, zcentre y la ley que queremos. Prestar atención al tipo de datos que se quiere utilizar. Todas las coordenadas pueden entrar como “Integer” mientras que la ley del mineral puede entrar como “Real” o “Float”.
3. Verificar que la importación fue exitosa mediante:
SELECT * FROM tabla_segregacion
4. Generar concatenada
Para esto tenemos que generar una columna:
ALTER TABLE tabla_segregacion ADD COLUMN concatenada INTEGER
Luego actualizamos el campo de la concatenada
UPDATE tabla_segregacion SET concatenada = xcentre||ycentre||zcentre
5. Generamos el query espacial, como habíamos dicho la ley de mineral tiene que ser mayor que 0.010 y se tiene que cumplir que los 3 vecinos más próximos también tienen que cumplir la condición.
Primero creamos la columna “criterio”.
ALTER TABLE tabla_segregacion ADD COLUMN criterio INTEGER
Ponemos valores de “criterio” a 0 como condición inicial.
UPDATE tabla_segregacion SET criterio = 0
6. Generamos una nueva tabla “segregacion_filter" con todos los valores donde se cumple la condición que la ley de mineral es mayor que 0.010.
CREATE TABLE segregacion_filter AS SELECT * FROM tabla_segregacion WHERE ley > 0.010;
7. Luego hacemos el query espacial para los valores donde se cumple que los tres vecinos en x, y y la diagonal también cumplen la condición:
UPDATE segregacion_filter SET criterio = 1 WHERE
(xcentre+10)||ycentre||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+20)||ycentre||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+30)||ycentre||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
xcentre||(ycentre+10)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+10)||(ycentre+10)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+20)||(ycentre+10)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+30)||(ycentre+10)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
xcentre||(ycentre+20)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+10)||(ycentre+20)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+20)||(ycentre+20)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+30)||(ycentre+20)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
xcentre||(ycentre+30)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+10)||(ycentre+30)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+20)||(ycentre+30)||zcentre IN ( SELECT concatenada FROM segregacion_filter ) AND
(xcentre+30)||(ycentre+30)||zcentre IN ( SELECT concatenada FROM segregacion_filter )
8. Luego generamos una concatenada para seleccionar a los vecinos que también cumplan el criterio.
Para esto tenemos que generar una columna:
ALTER TABLE segregacion_filter ADD COLUMN cat_int INTEGER
Luego actualizamos el campo de la concatenada.
UPDATE segregacion_filter SET cat_int = xcentre||ycentre||zcentre||criterio
Luego verificamos que existe los vecinos.
UPDATE segregacion_filter SET criterio = 2 WHERE
xcentre-10)||ycentre||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-20)||ycentre||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-30)||ycentre||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
xcentre||(ycentre-10)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-10)||(ycentre-10)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-20)||(ycentre-10)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-30)||(ycentre-10)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
xcentre||(ycentre-20)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-10)||(ycentre-20)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-20)||(ycentre-20)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-30)||(ycentre-20)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
xcentre||(ycentre-30)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-10)||(ycentre-30)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-20)||(ycentre-30)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter) OR
(xcentre-30)||(ycentre-30)||zcentre||1 IN (SELECT cat_int FROM segregacion_filter)

FloPy es la librerìa de Python que construye y ejecuta modelos MODFLOW; esta librería se ha mejorado para proporcionar un soporte completo de MODFLOW 6 y la mayor parte de su desarrollo está relacionado con la funcionalidad de MODFLOW 6, herramientas para usar datos espaciales vectoriales, rasters y funcionalidades comunes de ploteo y exportación.
Python es un lenguaje de programación sencillo y potente; su simplicidad es notable en comparación con otros lenguajes de programación y su potencia se basa en la cantidad de herramientas disponibles para las diferentes áreas de estudio.
Hemos desarrollado un programa completo en modelamiento de aguas subterráneas con MODFLOW y FloPy que abarca desde los temas esenciales en Python hasta casos aplicados de modelamiento regional e intrusión marina. El programa está diseñado para brindarle al estudiante un enfoque metodológico para aprender FloPy basado en una serie de ejemplos aplicados junto con las opiniones/experiencias del profesor y la revisión del software.