Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • loyolay/hackaton-entrega-grupo-3
  • hackathon-bella/plantillajupyterbook
  • copernicus-hackaton/plantillajupyterbook
3 results
Show changes
Commits on Source (29)
Showing
with 247 additions and 714 deletions
This diff is collapsed.
# Plantilla Jupyter Book
# Agricultura Familiar Conectada:
# Plataforma Web para Optimizar Cultivos con NDVI y NDWI
Plantilla para la creación de documentación usando JupyterBook
## Integrantes del Grupo 3
1. Yordany Morejón
2. Octavio Smith
3. Obed Acosta
Ejemplo en [https://class.redclara.net/cyted/course2](https://class.redclara.net/cyted/course2)
\ No newline at end of file
## Casos de estudio
Cuenca del río Grande en el área Central de Panamá
### Objetivo General
"Desarrollar una plataforma web innovadora y accesible para agricultores familiares, basada en cálculos de los índices NDVI y NDWI, que les permita mejorar la toma de decisiones y optimizar el manejo de cultivos mediante el monitoreo de la salud de las plantas y la disponibilidad de agua en sus terrenos agrícolas ee identificar posibles zonas inundables en el area."
### Objetivos Específicos
* Desarrollar la plataforma web: Crear una plataforma en línea que sea intuitiva, fácil de usar y accesible desde diversos dispositivos (como computadoras, tabletas y teléfonos móviles) para garantizar que los agricultores familiares puedan acceder a ella y utilizarla de manera efectiva.
* Integrar datos de teledetección: Automatizar la descarga de datos de los satilites y delimitados por las parcelas que el usuario seleccione.
* Identificar la calidad de la cobertura vegetal
* Identificar las potencialidades de concentración de agua superficial
* Definir los principales usos de suelo
* Delimitación de áreas de inundación por influencia topográfica
* Establecer bases de datos de parcelas agrícolas
* Implementar alertas y notificaciones cuando se detecten cambios significativos en los índices NDVI y NDWI, señalando posibles situaciones de estrés hídrico o problemas en el crecimiento de los cultivos.
* Facilitar la interacción y colaboración al implementar funciones de interacción social en la plataforma para que los agricultores familiares puedan compartir experiencias, hacer preguntas y recibir asesoramiento de otros agricultores y expertos agrícolas.
### Planteamiento del problema
En la actualidad nuestros agricultores se enfrentan a retos nunca antes vistos, fenómenos climáticos extremos como sequías, inundaciones, Ciclones tropicales, degradación de la tierra, entre otros. Estos fenómenos naturales alteran en gran medida los valores nutricionales y químicos de los suelos donde se desarrollan regularmente los cultivos.
Es por ello que se hace necesaria una herramienta que le permita al agricultor recibir alertas sobre las variaciones de las condiciones del suelo, poder monitorear de manera la salud de los cultivos y el comportamiento de los recursos hídricos existentes.
Proponemos una solución basada en una plataforma web innovadora, accesible, fácil de usar y sobre todo que esté disponible para los agricultores, incluso para aquellos con recursos limitados o acceso a Internet restringido.
Por medio de esta herramienta, nuestros agricultores serán beneficiados con productos que generarán alertas y notificaciones poniéndoles sobre aviso cuando se detecten cambios significativos en los índices NDVI y NDWI, señalando posibles situaciones de estrés hídrico o problemas en el crecimiento de los cultivos.
Además, tendrán información sobre los riesgos existentes de áreas inundables y así poder decidir los lugares adecuados para sembrar sin caer en pérdidas de inversión.
Otro beneficio es que habilita la posibilidad de almacenar y visualizar datos históricos de los índices calculados, esto permite hacer un análisis comparativo y comprender mejor las tendencias estacionales y anuales de estos.
Es importante mencionar que la información geoespacial estará disponible para el agricultor casi en tiempo real para garantizar el monitoreo adecuado de la salud de sus cultivos.
Debemos apoyar de manera intencional al agricultor familiar ya que, es un engranaje fundamental dentro de la economía de nuestros países.
Agradecemos a los organizadores de este evento por permitirnos participar y presentar nuestra solución enfocada a nuestros valiosos agricultores.
## Metodologia
### Ejecutar Script Jupyter Notebook:
./docs/hackathon.ipynb
Se deben instalas las siguientes librerias:
1. rasterio,
2. numpy
3. pandas
1. Delimitacion de Zonas agricolas mediante el uso de mapa de cobertura boscosa y uso de suelo gestionando de información de carácter satelital del sitio de Copernicus y procesadas en QGIS 3.22
<img src="./docs/images/landcover.png" />
2. Calculamos el Índice Normalizado de Diferencia de Vegetación, utilizando codigos en Python
NDVI = (NIR-Red) / (NIR+Red)
NIR= luz del infrarrojo cercano y
Rojo= luz roja visible
Entre los valores de referencia de índice que se interpretarán calculando el NDVI, se encuentran los siguientes:
| Min | Max | State |
|------|------|-----------------------------|
| 0.1 | 0.2 | Suelo desnudo |
| 0.2 | 1 | Plantas |
| 0.5 | 0.5 | Vegetación densa y saludable|
| 0.2 | 0.5 | Vegetación dispersa |
Valores negativos = Concentración de agua, estructuras artificiales y rocas entre otros.
<img src="./docs/images/NDVI.png" />
4. Cálculo de Índice de Agua de Diferencia Normalizada (NDWI), con la finalidad de identificar concentraciones de agua sobre la superficie de la tierra. Se aplicará la siguiente fórmula
NDWI = (Green – NIR)/(Green + NIR)
Green = luz de banda verde
NIR = luz del infrarrojo cercano
| Min | Max | State |
|------|-----|--------------------------------------|
| 0.2 | 1 | Superficie del agua |
| 0,0 | 0,2 | Inundación, humedad |
|- 0,3 | 0,0 | Sequía moderada, superficies sin agua|
| -1 | -0,3| Sequía, superficies sin agua |
<img src="./docs/images/NDWI.png" />
<img src="./docs/images/cuerpos_de_agua.png" />
5. Gestión de Modelo de Elevación Digital de 30 m, en el sitio de COPERNICUS
(https://portal.opentopography.org/login), para calcular el Índice de Humedad del Terreno por el carácter topográfico
<img src="./docs/images/Indice_de_Humedad_del_terreno.png"/>
7. Gestión de Clasificación supervisada de imágenes Sentinel – 2 del 2021 a través del sitio
https://viewer.esa-worldcover.org/worldcover/?language=en&bbox=-125.98451880201398,-64.41009987194155,91.3619876655554,17.92225321411891&overlay=false&bgLayer=OSM&date=2023-07-21&layer=WORLDCOVER_2021_MAP
8. Gestión de Datos de Carácter Climático
Otros sitios de referencia de Copernicus
https://emergency.copernicus.eu/
https://www.globalfloods.eu/glofas-forecasting/
https://viewer.esa-worldcover.org/worldcover/?language=en&bbox=-125.98451880201398,-64.41009987194155,91.3619876655554,17.92225321411891&overlay=false&bgLayer=OSM&date=2023-07-21&layer=WORLDCOVER_2021_MAP
https://edo.jrc.ec.europa.eu/tumbo/gdo/map/
# Table of contents
# Learn more at https://jupyterbook.org/customize/toc.html
format: jb-book
root: docs/intro
parts:
- caption: Sesiones
numbered: True # Only applies to chapters in Part 1.
chapters:
- file: docs/sesion01/milab
%% Cell type:code id:c177b48b tags:
``` python
def readTiffBand(tiff_file, band_number):
"""
Reading the specific band from the 'tiff' file.
"""
with rasterio.open(tiff_file) as dataset:
band = dataset.read(band_number)
return band
```
%% Cell type:code id:5868bef0 tags:
``` python
def calculateNDVI(band_red, band_nir):
"""
Calculating NDVI index given the red and near infrared band.
"""
# In case you don't have cero values over the bands
#ndvi = (band_nir - band_red) / (band_nir + band_red)
# Cero values won't be valid
element1 = (band_nir - band_red)
element2 = (band_nir + band_red)
ndvi = np.divide(element1, element2, out=np.zeros_like(element1), where=element2!=0)
return ndvi
```
%% Cell type:code id:6a97d07d tags:
``` python
def calculateNDWI(band_green, band_nir):
"""
Calculating NDWI index given the green and near infrared band.
"""
# In case you don't have cero values over the bands
#ndwi = (band_green - band_nir) / (band_green + band_nir)
# Cero values won't be valid
element1 = (band_green - band_nir)
element2 = (band_green + band_nir)
ndwi = np.divide(element1, element2, out=np.zeros_like(element1), where=element2!=0)
return ndwi
```
%% Cell type:code id:3ba41e31 tags:
``` python
def write_index_to_tiff(index_array, output_tiff_file, tiff_metadata):
"""
Write the computed index array to the new 'tiff' file with the same metadata as the input 'tiff' file.
"""
with rasterio.open(output_tiff_file, 'w', **tiff_metadata) as dst:
dst.write(index_array, 1)
```
%% Cell type:code id:d8bdbf9f tags:
``` python
def update_index_metadata(band_file, name_index, index_array):
"""
Update metada from the computed index array
"""
# Reading metadata from 'tiff' file
with rasterio.open(band_file) as dataset:
tiff_metadata = dataset.profile
# Updating metadata from computed index array
tiff_metadata.update(count=1, dtype=str(index_array.dtype))
# Saving computed index array to a 'tiff' file
output_index_tiff = f'./outputs/output_{name_index}.tif'
write_index_to_tiff(index_array, output_index_tiff, tiff_metadata)
```
%% Cell type:code id:6a1e0f4f tags:
``` python
# Reading green band (band 3), red band (band 4) and near infrared band (band 8) from 'tiff' files
band3_file = './sentinel_2/banda_3/T17PNK20230427T155529B03_10m.tif'
band4_file = './sentinel_2/banda_4/T17PNK20230427T155529B04_10m.tif'
band8_file = './sentinel_2/banda_8/T17PNK20230427T155529B08_10m.tif'
band_green = readTiffBand(band3_file, 1).astype('float64')
band_red = readTiffBand(band4_file, 1).astype('float64')
band_nir = readTiffBand(band8_file, 1).astype('float64')
# Calculating NDVI
ndvi = calculateNDVI(band_red, band_nir)
update_index_metadata(band8_file, "ndvi", ndvi)
# Calculating NDWI
ndwi = calculateNDWI(band_green, band_nir)
update_index_metadata(band8_file, "ndwi", ndwi)
```
%% Cell type:code id:75bcf2dd tags:
``` python
#Dataset for the calculated ndvi index
df_ndvi = pd.DataFrame(ndvi)
df_ndvi.to_csv("ndvi_index.csv", index=False)
#df_ndvi
```
%% Cell type:code id:3d50f7f7 tags:
``` python
#Dataset for the calculated ndwi index
df_ndwi = pd.DataFrame(ndwi)
df_ndwi.to_csv("ndwi_index.csv", index=False)
#df_ndwi
```
docs/images/Indice_de_Humedad_del_terreno.png

1.33 MiB

docs/images/NDVI.png

1.43 MiB

docs/images/NDWI.png

1.52 MiB

docs/images/cuerpos_de_agua.png

1020 KiB

docs/images/cyted1.png

111 KiB

docs/images/landcover.png

1.57 MiB

docs/images/upload.png

447 B

# Creación de cursos con MkDocs
```{tableofcontents}
```
Este es un curso en el servicio [MiLab Pages](https://milab.redclara.net/). Puede revisar su [código fuente](https://gitlab.com/pages/mkdocs) y solicitar un despliegue nuevo con esta plantilla para sus proyectos llenando el siguiente formulario: [https://forms.gle/y33t6xb1vSKXQV4n8](https://forms.gle/y33t6xb1vSKXQV4n8).
## Tutorial de edición
> Esta plantilla se edita en formato MarkDown, puede usar la guía creada por [Matt Cone](https://github.com/mattcone) para conocer su sintaxis en [Guía rápida MarkDown](markdown.md)
Para la edición de los cursos se debe seguir estos pasos:
1. Dirigirse al repositorio del curso. Por ejemplo https://gitmilab.redclara.net/cyted/course1
2. Ingresar al editor web dando clic al botón **Web IDE**
![upload](images/cyted1.png "Web IDE")
3. Para editar archivos existentes, localizarlos en la carpeta `docs/` y realizar las ediciones necesarias.
4. Para nuevas paginas:
1. Se debe crear un nuevo archivo con extensión `.md` en el directorio `docs/`. Ejemplo `docs/documentacion.md`
2. Se debe agregar al menú desde el archivo `mkdocs.yml` en la sección `nav:` siguiendo el formato:
```
nav:
- Título: docs/archivo.md
```
5. Se pueden agregar imagenes, documentos o cualquier material complementario cargandolos desde el editor en el ícono ![upload](images/upload.png "Upload icon from https://www.flaticon.com/free-icon/upload_747416")
6. Para guardar los cambios:
1. Se da clíc al botón **Create Commit**
2. Se agrega una descripción de los cambios en el campo *Commit message*.
> Una frase corta que describe a grandes rasgos las mejoras añadidas
3. Se selecciona, Commit to **master** branch.
4. Se da clic al botón **Commit**
> A partir del commmit los cambios se reflejarán en la versión web en aproximadamente 5 minutos.
File added
File added
# Reproducibilidad `MiLab`
Plataforma MiLab, control de versiones, mensajería en escenarios de investigación, calculo computacional y datos de investigación para la ciencia abierta y reproducible.