-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
139 lines (95 loc) · 5.36 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import json
import os
import glob
import subprocess
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import earthpy as et
import earthpy.spatial as es
import earthpy.plot as ep
from modulos.cropTIF import crop_TIF
from modulos.calculo_indices import *
from modulos.clasificador import clasificar_clases, clasificar_urbanizacion
from modulos.calculo_de_atracción import calculo_campo_atraccion
from modulos.obtener_densidad_inicial import obtener_densidad_inicial
carpeta_recortadas = "ImagenesRecortadas"
carpeta_no_recortadas = "Imagenes"
ruta_poligono = os.path.abspath("data/ROI/poligono.shp")
print(ruta_poligono)
if os.path.exists(carpeta_recortadas):
print(f"La carpeta '{carpeta_recortadas}' existe.")
os.system(f"rm -rf {carpeta_recortadas}/*")
else:
print(f"La carpeta '{carpeta_recortadas}' no existe. Se creará ahora.")
try:
os.makedirs(carpeta_recortadas)
print(f"Se ha creado la carpeta '{carpeta_recortadas}/'.")
except OSError as e:
print(f"No se pudo crear la carpeta '{carpeta_recortadas}': {e}")
# Itera sobre los archivos en el directorio
for nombre_archivo in os.listdir(carpeta_no_recortadas):
if nombre_archivo.endswith(".TIF") or nombre_archivo.endswith(".tif"): # Verifica la extensión del archivo
ruta_completa = os.path.join(carpeta_no_recortadas, nombre_archivo)
# Llama a la función procesar_archivo_tif con el nombre del archivo como parámetro
crop_TIF(ruta_completa, f"{carpeta_recortadas}/{nombre_archivo}", ruta_poligono)
print("\nCálculo de índices:")
archivo_b4 = subprocess.run(f"ls {carpeta_recortadas}/*B4.TIF", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True).stdout.strip("\n")
archivo_b5 = subprocess.run(f"ls {carpeta_recortadas}/*B5.TIF", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True).stdout.strip("\n")
ruta_ndvi = f"{carpeta_recortadas}/ndvi.TIF"
calcular_ndvi(os.path.abspath(archivo_b4), os.path.abspath(archivo_b5), ruta_ndvi)
print("\t- Se calculó el NDVI")
archivo_b3 = subprocess.run(f"ls {carpeta_recortadas}/*B3.TIF", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True).stdout.strip("\n")
calcular_ndwi(os.path.abspath(archivo_b3), os.path.abspath(archivo_b5), f"{carpeta_recortadas}/ndwi.TIF")
print("\t- Se calculó el NDWI")
print("*"*30)
print("\nComienza clasificación de clases.")
archivo_clases = "ImagenesRecortadas/class.TIF"
clasificar_clases("ImagenesRecortadas/ndvi.TIF", "ImagenesRecortadas/ndwi.TIF", archivo_clases)
import rasterio
import matplotlib.pyplot as plt
import earthpy.plot as ep
# Abrir el archivo TIFF con rasterio
with rasterio.open(archivo_clases) as src:
# Leer la banda de clasificación
clasificacion = src.read(1, masked=True) # Se utiliza masked=True para ignorar los valores fuera de rango si los hay
# Obtener perfil de la imagen para obtener la transformación y la extensión
profile = src.profile
# Definir los colores para cada clase
colors = ['brown', 'green', 'yellow', 'blue'] # Ajusta los colores según tu clasificación
# Crear un mapa de colores personalizado
cmap = ListedColormap(colors)
# Crear una figura y un eje utilizando matplotlib
fig, ax = plt.subplots(figsize=(10, 10))
# Mostrar la imagen de clasificación
im = ax.imshow(clasificacion, cmap=cmap, vmin=1, vmax=4, interpolation='none')
# Definir etiquetas para la barra de colores
cbar = ax.figure.colorbar(im, ax=ax, ticks=[1, 2, 3, 4], orientation='vertical')
cbar.ax.set_yticklabels(['Suelo expuesto', 'Vegetación baja', 'Vegetación alta', 'Agua']) # Ajusta las etiquetas según tus clases
cbar.set_label('Clases')
# Añadir título
ax.set_title('Clasificación de Imagen')
# Mostrar la trama
plt.show()
print("\nFinaliza clasificación de clases.")
#-------------------------------------------------
print("*"*30)
print("\nComienza cálculo de campo de atracción.")
ruta_ndbi = f"{carpeta_recortadas}/ndbi.TIF"
ruta_ndbai = f"{carpeta_recortadas}/ndbai.TIF"
ruta_ndmi = f"{carpeta_recortadas}/ndmi.TIF"
print("\t- Se calcula el índice NDBI")
archivo_b6 = subprocess.run(f"ls {carpeta_recortadas}/*B6.TIF", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True).stdout.strip("\n")
archivo_b5 = subprocess.run(f"ls {carpeta_recortadas}/*B5.TIF", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True).stdout.strip("\n")
calcular_ndbi(os.path.abspath(archivo_b5), os.path.abspath(archivo_b6), os.path.abspath(ruta_ndbi))
print("\t- Se calcula el índice NDBaI")
archivo_b10 = subprocess.run(f"ls {carpeta_recortadas}/*B10.TIF", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True).stdout.strip("\n")
calcular_ndbai(os.path.abspath(archivo_b6), os.path.abspath(archivo_b10), ruta_ndbai)
print("\t- Se calcula el índice NDMI")
calcular_ndbi(os.path.abspath(archivo_b5), os.path.abspath(archivo_b6), os.path.abspath(ruta_ndmi))
print("\t- Se clasifica la urbanización")
urbanizacion = clasificar_urbanizacion(os.path.abspath(ruta_ndbi), os.path.abspath(ruta_ndbai), os.path.abspath(ruta_ndmi), os.path.abspath(ruta_ndvi))
atraccion = calculo_campo_atraccion(urbanizacion)
#-------------------------------------------------
print("*"*30)
print("\nComienza cálculo del mapa de densidad inicial.")
mapa_de_densidad = obtener_densidad_inicial(os.path.abspath(archivo_b4), os.path.abspath("data/datos_ovitrampas_transformados.csv"))