Análisis de segregación de mineral en SQLite

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.

Segregacion_de_mineral.png

 

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)

 

Smiley face

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

Posted on September 25, 2013 and filed under Hidroinformática, Minería.