Open Javierroto opened 5 years ago
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)
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")
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"} |
---|
(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)
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)
i_biodiversidad_yuc ifv_biodiversidad_yuc
fv_biodiversidad_yuc
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