import os
from qgis import *
from qgis.core import *
import time
[documentos]def lista_shp(path_carpeta):
'''
:param path_carpeta: ruta que contiene los archivos shape a procesar
:type path_carpeta: String
'''
for root, dirs, files in os.walk(path_carpeta):
lista = []
for name in files:
extension = os.path.splitext(name)
if extension[1] == '.shp':
lista.append(extension[0])
return lista
[documentos]def indice_lee_salee(vlayer_base,vlayer_model,campo_categoria,categoria,id='ageb_id'):
'''
Esta función regresa el índice Lee-Sallee
.. math::
lee\_sallee\_index = \frac{A\cap B}{A\cup B}
:param vlayer_base: vector base
:type vlayer_base: QgsVectorLayer
:param vlayer_model: Vector modelo
:type vlayer_model: QgsVectorLayer
:param campo_categoria: Nombre del campo que tiene las categorias
:type campo_categoria: String
:param categoria: Número de categoria
:type categoria: int
:param id: nombre del campo identificador
:type id: String
'''
union = []
interseccion = []
for a,b in zip(vlayer_base.getFeatures(),vlayer_model.getFeatures()):
if a[campo_categoria]==categoria:
union.append(a[id])
if b[campo_categoria]==categoria:
union.append(a[id])
if a[campo_categoria]==categoria and b[campo_categoria]==categoria:
interseccion.append(b[id])
union_conjunto = set(union)
if len(union_conjunto)==0:
indice_lee_count=10
else:
indice_lee_count = round((len(interseccion) / len(union_conjunto)),4)
area_interseccion =0
area_union =0
for i in vlayer_base.getFeatures():
for ageb_union in union_conjunto:
if i[id]==ageb_union:
area_union += i.geometry().area()
for ageb_interseccion in interseccion:
if i[id]==ageb_interseccion:
area_interseccion += i.geometry().area()
if area_union ==0:
indice_lee=10
else:
indice_lee = round(area_interseccion / area_union,3)
return indice_lee
# ## Cálculo del índice Lee Sallee
# path_sig = "C:/Dropbox (LANCIS)/SIG/desarrollo/sig_megadapt/procesamiento/stressing/indice_leesallee/shapes/equidistante/"
# #vlayer_base = QgsVectorLayer(path_sig + 'action_budget_bajo_asentamientos.shp',"","ogr")
# #vlayer_model = QgsVectorLayer(path_sig + 'system_budget_bajo_asentamientos.shp',"","ogr")
# #
# #path = "C:/Dropbox (LANCIS)/SIG/desarrollo/sig_megadapt/procesamiento/stressing/indice_leesallee/shapes/equidistante/"
# lista_nombres = lista_shp(path_sig)
# list2=lista_nombres[:1]
# path_csv = 'C:/Dropbox (LANCIS)/SIG/desarrollo/sig_megadapt/procesamiento/stressing/indice_leesallee/shapes/comparacion_equidistante_cat5.csv'
# matrix=open(path_csv,"w")
# matrix.write('esc,'+','.join(lista_nombres)+"\n")
# print (time.strftime("%H:%M:%S"))
# for nombre_1 in lista_nombres:
# #print("comparando: ",nombre_1)
# vlayer_base = QgsVectorLayer(path_sig + nombre_1+'.shp',"","ogr")
# renglon=nombre_1+","
# for nombre_2 in lista_nombres:
# vlayer_model = QgsVectorLayer(path_sig + nombre_2+'.shp',"","ogr")
# #print(nombre_1,"con_este",nombre_2)
# index_lee = indice_lee_salee(vlayer_base,vlayer_model,'cat_vul',5,id='ageb_id')
# renglon+=(str(index_lee)+",")
# renglon+='\n'
# matrix.write(renglon)
# print('fin')
# matrix.close()
# print (time.strftime("%H:%M:%S"))