lancis-apc / espejos-lancis

GNU General Public License v3.0
0 stars 1 forks source link

Generar capa de biodiversidad para criterio resiliencia #PAPIIT #63

Open Javierroto opened 5 years ago

Javierroto commented 5 years ago

Insumos

Ruta de trabajo: C:\Dropbox\SIG\sig_papiit\procesamiento\biologicas

Insumo: Nombre: usv250s6gw Uso del suelo y vegetación, escala 1:250000, serie VI (continuo nacional)

En los Conjuntos de Datos Vectoriales de Uso del Suelo y Vegetación, Escala 1:250 000 Serie VI, se presenta información del Uso del Suelo y Vegetación, la ubicación, distribución y extensión de diferentes comunidades vegetales y usos agrícolas con sus respectivas variantes en tipos de vegetación e información ecológica relevante. Dicha información geográfica digital contiene datos estructurados en forma vectorial codificados de acuerdo con el Diccionario de Datos Vectoriales de Uso del Suelo y Vegetación Escala 1:250 000 (versión 3), aplicables a las diferentes unidades ecológicas (comunidades vegetales y usos antrópicos) contenidos en el conjunto de dato.

Ruta del archivo: C:\Dropbox\SIG\sig_papiit\procesamiento\biologicas\biodiversidad\Insumos

Javierroto commented 5 years ago

Procesamiento

i_biodiversidad_yuc

La capa de uso de suelo y vegetación "usv250s6gw" se recortó con el buffer "buffer_yuc_terrestre_3k" y se renombró como "i_biodiversidad_yuc"

(ruta: C:\Dropbox\SIG\sig_papiit\entregables\resiliencia\biologica\biodiversidad_yuc)

Javierroto commented 5 years ago

Procesamiento

ifv_biodiversidad_yuc

La capa "i_biodiversidad_yuc" fué depurada de los campos CVEUNION, AREA, COV, COV_ID, USVSVI, area_1 y se modificaron los campos OBJECTID por objectid y DESCRIPCIO por descripcio

Se añadió el campo reclas y las descripciones del campo descripcio se modificaron de la siguiente manera: "reclas" (descripcio) dunas costeras (vegetación de dunas costeras)
manglar (manglar)
pastizal halófilo y tular (pastizal halófilo y tular)
vegetación petén (vegetación de petén)
vegetación secundaria (vegetación secundaria arbórea de manglar, arbórea de selva baja, arbustiva de manglar, arbustiva de selva baja)

Y se eliminan los campos con las descripciones siguientes:

ACUÍCOLA ÁREAS DESPROVISTAS DE VEGETACIÓN URBANO CONSTRUIDO SIN VEGETACIÓN APARENTE AGUA PASTIZAL CULTIVADO AGRICULTURA DE RIEGO PERMANENTE AGRICULTURA DE TEMPORAL PERMANENTE VEGETACIÓN HALÓFILA HIDRÓFILA

Según lo acordado por el Dr. Rioja y el equipo de trabajo de LANCIS

Se añade el campo id_clases y se asigna un valor a cada tipo de vegetación mediante el siguiente código:

# -*- coding: utf-8 -*-
from osgeo import gdal, osr
import numpy as np
from PyQt4.QtCore import QFileInfo
import os
from qgis.core import *
from qgis.analysis import *
import apc
import codecs 

path_sig ="C:/Dropbox/sig_papiit/procesamiento/biologicas/biodiversidad_yuc/"
path_vector = path_sig+"i_biodiversidad_yuc.shp"

def categorias_discretas(path_vector,campo_categoria):
    '''
    Esta función genera categorias de enteros consecutivos para las
    capas de variables discretas.
    agrega un campo llamado "id_cases" el cual contien el valor para la categoria
    y genera un csv el cual contiene los datos resumidos de las categorias
    '''

    nombre_campo ="id_clases"
    apc.crear_campo(path_vector,"id_clases","Int")
    vector = QgsVectorLayer(path_vector,"","ogr")
    lista = []
    cat_txt =codecs.open(os.path.dirname(path_vector) +  "/cat_"+ os.path.basename(path_vector).split(".")[0] + ".csv","w","UTF-8")
    cat_txt.write( "descripcion  , id_clases \n")

    for elemento in vector.getFeatures():
        lista.append(elemento[campo_categoria])

    lista_filtrada =  sorted(set(lista))
    dicc = {}
    id = 1

    for cat in lista_filtrada:
        dicc[cat]= id
        cat_txt.write(cat + " , " + str(id) + " \n")
        id +=1
    cat_txt.close()
    vector.startEditing()
    for i in vector.getFeatures():
       for key, value in dicc.iteritems():
           if i[campo_categoria] == key:
                #print i[campo_categoria] , " | ", value
                i["id_clases"] = value
                vector.updateFeature(i)
    vector.commitChanges()
print "proceso terminado"

## agregar categoria de entero consecutivo 

#categorias_discretas(path_vector,"reclas")

Función de valor

Se utilizó una función de valor de tipo logística

1 {"layer": "R_biodiversidad", "center": "60", "min": "0", "max": "100", "k": "0.108", "show_map": "False", "function_name": "logistic"}

biodiversidad_res

(ruta: C:/Dropbox/PAPIIT/pap_modelos/vul_costera/fv

y se obtuvieron los siguientes valores:

1 dunas costeras= 0.332 2 manglar= 1.000 3 pastizal halófilo y tular= 0.092 4 vegetación petén= 0.311 5 vegetación secundaria= 0.064

A continuación se agregó el campo "fv_res" y se asigno el valor de la función de valor para cada tipo de vegetación mediante el código:

# Agregar la funcion de valor

apc.crear_campo(path_vector,"fv_exp","Double")

vector = QgsVectorLayer(path_vector,"","ogr")

vector.startEditing()

for elemento in vector.getFeatures():
    if elemento["id_clases"] == 1:
        elemento["fv_exp"] = 0.332
        vector.updateFeature(elemento)
    elif elemento["id_clases"] == 2: 
        elemento["fv_exp"] = 1.00
        vector.updateFeature(elemento)
    elif elemento["id_clases"] == 3: 
        elemento["fv_exp"] = 0.092
        vector.updateFeature(elemento)
    elif elemento["id_clases"] == 4: 
        elemento["fv_exp"] = 0.331
        vector.updateFeature(elemento)
    elif elemento["id_clases"] == 5: 
        elemento["fv_exp"] = 0.064
        vector.updateFeature(elemento)
    else:
        elemento["fv_exp"] = 0
        vector.updateFeature(elemento)
vector.commitChanges()
print 'proceso terminado'

Se guardó la versión final como "ifv_biodiversidad_yuc" (ruta: C:\Dropbox\SIG\sig_papiit\entregables\resiliencia\biologica\biodiversidad_yuc)

Javierroto commented 5 years ago

Procesamiento

fv_biodiversidad_yuc

Rasterización

La capa "ifv_biodiversidad_yuc" se rasterizó mediante el código:

# -*- coding: utf-8 -*-
'''
Este script funciona para convertir un vector en raster, el vector debe
estar en la proyeccion UTM Z16N "EPSG:32616". El raster resultante
hereda los parametros del extent 3
'''

from osgeo import gdal, osr
import numpy as np
import processing
from qgis.core import QgsRasterLayer
from PyQt4.QtCore import QFileInfo
from qgis.analysis import QgsRasterCalculator, QgsRasterCalculatorEntry
from qgis.analysis import *

path_sig ="C:/Dropbox/sig/procesamiento/biologicas/biodiversidad_yuc/"
path_vector = path_sig+"ifv_biodiversidad_yuc.shp"
path_salida = path_sig+ "salida/ifv_biodiversidad_yuc.tif"

nombre_campo = 'fv_res'#nombre del campo del vector que contiene la clase o categorias
valor_nodata = 3.402823466e+38 #0## El valor no data
tipo_raster = 'Float32'## El tipo de dato de salida del raster
# Diccionario de tipos de datos perteneciente a qgis

QGIS_TYPE = {QGis.Byte:'Byte', QGis.UInt16:'UInt16',\
                    QGis.Int16:'Int16', QGis.UInt32:'UInt32',\
                    QGis.Int32:'Int32', QGis.Float32:'Float32',\
                    QGis.Float64:'Float64'}
## tipo  de dato que ocupa gdal en su funcion rasterize
RTYPE = { 'Byte': 0, 'Int16': 1, 'UInt16': 2, 'UInt32':3,\
                'Int32':4, 'Float32':5, 'Float64':6 }
## Extent_1 o region de la zona de estudio NO MODIFICAR ESTOS VALORES
xmin = 130380
xmax = 444600
ymin = 2298780
ymax = 2403780
vector = QgsVectorLayer(path_vector,"","ogr")
## llamada a la funcion de gadal rasterize para convertir el vector a una capa raster.
processing.runalg('gdalogr:rasterize',
                               vector ,#INPUT <ParameterVector> vector de entrada
                                nombre_campo,#FIELD <parameters from INPUT> nombre del campo que contiene los datos en el vector
                                0,#DIMENSIONS <ParameterSelection>
                                10474,#WIDTH <ParameterNumber> ancho del tamaño del raster NO MODIFICAR ESTE VALOR
                                3500,#HEIGHT <ParameterNumber> alto del ancho del raster NO MODIFICAR ESTE VALOR
                                "%f,%f,%f,%f" % (xmin, xmax, ymin, ymax),#RAST_EXT <ParameterExtent> Coordenadas de la extension  de la zona de estudio  NO MODIFICAR ESTE VALOR
                                0,#TFW <ParameterBoolean>
                                RTYPE[tipo_raster],#RTYPE <ParameterSelection> tipo del raster de salida
                                valor_nodata ,#NO_DATA <ParameterString> valor que se ocupara para representar los valores nulos
                                4,#COMPRESS <ParameterSelection>
                                75,#JPEGCOMPRESSION <ParameterNumber>
                                6.0,#ZLEVEL <ParameterNumber>
                                1.0,#PREDICTOR <ParameterNumber>
                                False,#TILED <ParameterBoolean>
                                0,#BIGTIFF <ParameterSelection>
                                "",#EXTRA <ParameterString>
                                path_salida)#OUTPUT <OutputRaster> ruta de salida de la capa raster

La capa raster resultante se guardó como "ifv_biodiversidad_yuc.tif" (ruta: C:\Dropbox\sig_papiit\entregables\resiliencia\biologica\biodiversidad_yuc)

A continuación se sumó la capa "ifv_biodiversidad_yuc.tif" con el buffer del área de estudio de la parte terrestres "buf_yuc_terr.tif" con el siguiente código:

# -*- coding: utf-8 -*-
import os, sys, subprocess, processing
from qgis.core import QgsRasterLayer
from PyQt4.QtCore import QFileInfo

from qgis.analysis import QgsRasterCalculator, QgsRasterCalculatorEntry
from qgis.analysis import *

## ruta del raster1
path_raster1 = "C:/Dropbox/sig_papiit/procesamiento/biologicas/biodiversidad_yuc/salida/ifv_biodiversidad_yuc.tif"
## ruta del raster2
path_raster2 = "C:/Dropbox/sig_papiit/procesamiento/procesamiento_inicial/buffer_yucatan/buffer_yuca_terrestre_3k/buf_yuc_terr.tif"
## ruta de salida del raster de operacion
path_salida = "C:/Dropbox/sig_papiit/procesamiento/biologicas/biodiversidad_yuc/salida/fv_biodiversidad_yuc.tif"
## expresión raster
expresion_calculator = 'raster1@1 + raster2@1'

entries = []

## abre raster1
fileInfo = QFileInfo(path_raster1)
path = fileInfo.filePath()
baseName = fileInfo.baseName()
raster1 = QgsRasterLayer(path, baseName)
var1 = QgsRasterCalculatorEntry()
var1.ref = 'raster1@1'
var1.raster = raster1
var1.bandNumber = 1
entries.append( var1 )

#abre raster2
fileInfo = QFileInfo(path_raster2)
path = fileInfo.filePath()
baseName = fileInfo.baseName()
raster2 = QgsRasterLayer(path, baseName)
var2 = QgsRasterCalculatorEntry()
var2.ref = 'raster2@1'
var2.raster = raster2
var2.bandNumber = 1
entries.append( var2 )

calc = QgsRasterCalculator(expresion_calculator,
                           path_salida,
                           'GTiff',
                           raster1.extent(),
                           raster1.width(),
                           raster1.height(),
                           entries)

calc.processCalculation()

La capa raster final se guarda como "fv_biodiversidad_yuc" (ruta: C:\Dropbox\SIG\sig_papiit\entregables\resiliencia\biologica\biodiversidad_yuc)

fv_biodiversidad_res

Javierroto commented 5 years ago

Productos entregables

Insumo de la Función de valor

i_biodiversidad_yuc ifv_biodiversidad_yuc

Función de valor

fv_biodiversidad_yuc