From 6efcc8cfecd1cd1ca494ba32370bf4e4ccd275af Mon Sep 17 00:00:00 2001 From: Timon Date: Thu, 19 Jun 2025 20:37:20 +0200 Subject: [PATCH] Fix CI report pipeline: update tmap v4 syntax, add continuous color scales, fix formatting - Updated all CI maps to use tm_scale_continuous() for proper tmap v4 compatibility - Added fixed color scale limits (1-8 for CI, -3 to +3 for differences) for consistent field comparison - Fixed YAML header formatting issues in CI_report_dashboard_planet.Rmd - Positioned RGB map before CI overview map as requested - Removed all obsolete use_breaks parameter references - Enhanced error handling and logging throughout the pipeline - Added new experimental analysis scripts and improvements to mosaic creation --- .Rhistory | 513 ++++- .vscode/settings.json | 3 + ...ots planting date and harevsting data.xlsx | Bin 99055 -> 0 bytes Rplots.pdf | Bin 160945 -> 0 bytes figure/sub_chunk_8433-1.png | Bin 0 -> 8114 bytes python_app/planet_download.ipynb | 1738 ++--------------- python_app/planet_download_with_ocm.ipynb | 1097 +++++++++++ python_app/planet_ocm_processor.py | 319 +++ r_app/CI_report_dashboard_planet.Rmd | 308 ++- .../figure-html/ci_diff_kaart-1.png | Bin 156119 -> 0 bytes .../figure-html/ci_overzicht_kaart-1.png | Bin 183969 -> 0 bytes r_app/CI_report_executive_summary.Rmd | 1120 ++--------- r_app/Rplots.pdf | Bin 332961 -> 0 bytes r_app/ci_extraction.R | 24 +- .../ci_extraction_and_yield_prediction.R | 572 ++++++ r_app/{ => experiments}/counting_clouds.R | 0 r_app/experiments/delete_cloud_exploratoin | 556 ++++++ r_app/experiments/delete_cloud_exploratoin.R | 191 ++ .../CI_report_executive_summary.Rmd | 718 +++++++ .../CI_report_executive_summary_v2.Rmd | 1531 +++++++++++++++ .../executive_report_utils.R | 437 +++++ r_app/{ => experiments}/max_ci_field.r | 0 r_app/experiments/mosaic_creation_fixed.R | 0 r_app/experiments/optimal_ci_analysis.R | 421 ++++ r_app/{ => experiments}/plot_testing.R | 0 r_app/{ => experiments}/run_tests.R | 0 r_app/{ => experiments}/utils_3.R | 0 r_app/installPackages.R | 55 +- r_app/interpolate_growth_model.R | 16 +- r_app/mosaic_creation.R | 50 +- r_app/mosaic_creation_utils.R | 221 ++- r_app/report_utils.R | 107 +- r_app/system_architecture.md | 409 ++++ r_app/tests/test_date_functions.R | 68 - r_app/tests/test_framework.R | 120 -- r_app/tests/test_report_utils.R | 280 --- 36 files changed, 7601 insertions(+), 3273 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 Current - Pivots planting date and harevsting data.xlsx delete mode 100644 Rplots.pdf create mode 100644 figure/sub_chunk_8433-1.png create mode 100644 python_app/planet_download_with_ocm.ipynb create mode 100644 python_app/planet_ocm_processor.py delete mode 100644 r_app/CI_report_dashboard_planet_files/figure-html/ci_diff_kaart-1.png delete mode 100644 r_app/CI_report_dashboard_planet_files/figure-html/ci_overzicht_kaart-1.png delete mode 100644 r_app/Rplots.pdf create mode 100644 r_app/experiments/ci_extraction_and_yield_prediction.R rename r_app/{ => experiments}/counting_clouds.R (100%) create mode 100644 r_app/experiments/delete_cloud_exploratoin create mode 100644 r_app/experiments/delete_cloud_exploratoin.R create mode 100644 r_app/experiments/executive_summary/CI_report_executive_summary.Rmd create mode 100644 r_app/experiments/executive_summary/CI_report_executive_summary_v2.Rmd create mode 100644 r_app/experiments/executive_summary/executive_report_utils.R rename r_app/{ => experiments}/max_ci_field.r (100%) create mode 100644 r_app/experiments/mosaic_creation_fixed.R create mode 100644 r_app/experiments/optimal_ci_analysis.R rename r_app/{ => experiments}/plot_testing.R (100%) rename r_app/{ => experiments}/run_tests.R (100%) rename r_app/{ => experiments}/utils_3.R (100%) create mode 100644 r_app/system_architecture.md delete mode 100644 r_app/tests/test_date_functions.R delete mode 100644 r_app/tests/test_framework.R delete mode 100644 r_app/tests/test_report_utils.R diff --git a/.Rhistory b/.Rhistory index 3ae17c0..19c58ab 100644 --- a/.Rhistory +++ b/.Rhistory @@ -1 +1,512 @@ -install.packages("xfun") +}) +# Verify farm_health_data exists and has content +if (!exists("farm_health_data") || nrow(farm_health_data) == 0) { +safe_log("farm_health_data not found or empty, generating default data", "WARNING") +# Create minimal fallback data +tryCatch({ +# Get fields from boundaries +fields <- unique(AllPivots0$field) +# Create basic data frame with just field names +farm_health_data <- data.frame( +field = fields, +mean_ci = rep(NA, length(fields)), +ci_change = rep(NA, length(fields)), +ci_uniformity = rep(NA, length(fields)), +status = rep("Unknown", length(fields)), +anomaly_type = rep("Unknown", length(fields)), +priority_level = rep(5, length(fields)), # Low priority +age_weeks = rep(NA, length(fields)), +harvest_readiness = rep("Unknown", length(fields)), +stringsAsFactors = FALSE +) +safe_log("Created fallback farm_health_data with basic field information") +}, error = function(e) { +safe_log(paste("Error creating fallback farm_health_data:", e$message), "ERROR") +farm_health_data <<- data.frame( +field = character(), +mean_ci = numeric(), +ci_change = numeric(), +ci_uniformity = numeric(), +status = character(), +anomaly_type = character(), +priority_level = numeric(), +age_weeks = numeric(), +harvest_readiness = character(), +stringsAsFactors = FALSE +) +}) +} +# Calculate farm health summary metrics +tryCatch({ +# Generate farm health summary data +farm_health_data <- generate_farm_health_summary( +field_boundaries = AllPivots0, +ci_current = CI, +ci_previous = CI_m1, +harvesting_data = harvesting_data +) +# Log the summary data +safe_log(paste("Generated farm health summary with", nrow(farm_health_data), "fields")) +}, error = function(e) { +safe_log(paste("Error in farm health calculation:", e$message), "ERROR") +# Create empty dataframe if calculation failed +farm_health_data <- data.frame( +field = character(), +mean_ci = numeric(), +ci_change = numeric(), +ci_uniformity = numeric(), +status = character(), +anomaly_type = character(), +priority_level = numeric(), +age_weeks = numeric(), +harvest_readiness = character(), +stringsAsFactors = FALSE +) +}) +# Render the velocity and acceleration indicators +tryCatch({ +# Create and display the indicators using the imported utility function +velocity_plot <- create_velocity_acceleration_indicator( +health_data = farm_health_data, +ci_current = CI, +ci_prev1 = CI_m1, +ci_prev2 = CI_m2, +ci_prev3 = CI_m3, +field_boundaries = AllPivots0 +) +# Print the visualization +print(velocity_plot) +# Create a table of fields with significant velocity changes +field_ci_metrics <- list() +# Process each field to get metrics +fields <- unique(AllPivots0$field) +for (field_name in fields) { +tryCatch({ +# Get field boundary +field_shape <- AllPivots0 %>% dplyr::filter(field == field_name) +if (nrow(field_shape) == 0) next +# Extract CI values +ci_curr_values <- terra::extract(CI, field_shape) +ci_prev1_values <- terra::extract(CI_m1, field_shape) +# Calculate metrics +mean_ci_curr <- mean(ci_curr_values$CI, na.rm = TRUE) +mean_ci_prev1 <- mean(ci_prev1_values$CI, na.rm = TRUE) +velocity <- mean_ci_curr - mean_ci_prev1 +# Store in list +field_ci_metrics[[field_name]] <- list( +field = field_name, +ci_current = mean_ci_curr, +ci_prev1 = mean_ci_prev1, +velocity = velocity +) +}, error = function(e) { +safe_log(paste("Error processing field", field_name, "for velocity table:", e$message), "WARNING") +}) +} +# Convert list to data frame +velocity_df <- do.call(rbind, lapply(field_ci_metrics, function(x) { +data.frame( +field = x$field, +ci_current = round(x$ci_current, 2), +ci_prev1 = round(x$ci_prev1, 2), +velocity = round(x$velocity, 2), +direction = ifelse(x$velocity >= 0, "Improving", "Declining") +) +})) +# Select top 5 positive and top 5 negative velocity fields +top_positive <- velocity_df %>% +dplyr::filter(velocity > 0) %>% +dplyr::arrange(desc(velocity)) %>% +dplyr::slice_head(n = 5) +top_negative <- velocity_df %>% +dplyr::filter(velocity < 0) %>% +dplyr::arrange(velocity) %>% +dplyr::slice_head(n = 5) +# Display the tables if we have data +if (nrow(top_positive) > 0) { +cat("

Fields with Fastest Improvement

") +knitr::kable(top_positive %>% +dplyr::select(Field = field, +`Current CI` = ci_current, +`Previous CI` = ci_prev1, +`Weekly Change` = velocity)) +} +if (nrow(top_negative) > 0) { +cat("

Fields with Fastest Decline

") +knitr::kable(top_negative %>% +dplyr::select(Field = field, +`Current CI` = ci_current, +`Previous CI` = ci_prev1, +`Weekly Change` = velocity)) +} +}, error = function(e) { +safe_log(paste("Error rendering velocity visualization:", e$message), "ERROR") +cat("
Error generating velocity visualization.
") +}) +# Generate anomaly timeline visualization +tryCatch({ +# Use the imported function to create the anomaly timeline +anomaly_timeline <- create_anomaly_timeline( +field_boundaries = AllPivots0, +ci_data = CI_quadrant, +days_to_include = 90 # Show last 90 days of data +) +# Display the timeline +print(anomaly_timeline) +}, error = function(e) { +safe_log(paste("Error generating anomaly timeline:", e$message), "ERROR") +cat("
Error generating anomaly timeline visualization.
") +}) +# Verify farm_health_data exists and has content +if (!exists("farm_health_data") || nrow(farm_health_data) == 0) { +safe_log("farm_health_data not found or empty, generating default data", "WARNING") +# Create minimal fallback data +tryCatch({ +# Get fields from boundaries +fields <- unique(AllPivots0$field) +# Create basic data frame with just field names +farm_health_data <- data.frame( +field = fields, +mean_ci = rep(NA, length(fields)), +ci_change = rep(NA, length(fields)), +ci_uniformity = rep(NA, length(fields)), +status = rep("Unknown", length(fields)), +anomaly_type = rep("Unknown", length(fields)), +priority_level = rep(5, length(fields)), # Low priority +age_weeks = rep(NA, length(fields)), +harvest_readiness = rep("Unknown", length(fields)), +stringsAsFactors = FALSE +) +safe_log("Created fallback farm_health_data with basic field information") +}, error = function(e) { +safe_log(paste("Error creating fallback farm_health_data:", e$message), "ERROR") +farm_health_data <<- data.frame( +field = character(), +mean_ci = numeric(), +ci_change = numeric(), +ci_uniformity = numeric(), +status = character(), +anomaly_type = character(), +priority_level = numeric(), +age_weeks = numeric(), +harvest_readiness = character(), +stringsAsFactors = FALSE +) +}) +} +# ADVANCED ANALYTICS FUNCTIONS +# Note: These functions are now imported from executive_report_utils.R +# The utility file contains functions for velocity/acceleration indicators, +# anomaly timeline creation, age cohort mapping, and cohort performance charts +safe_log("Using analytics functions from executive_report_utils.R") +# Chunk 1: setup_parameters +# Set up basic report parameters from input values +report_date <- params$report_date +mail_day <- params$mail_day +borders <- params$borders +use_breaks <- params$use_breaks # Whether to use breaks or continuous spectrum in visualizations +# Environment setup notes (commented out) +# # Activeer de renv omgeving +# renv::activate() +# renv::deactivate() +# # Optioneel: Herstel de omgeving als dat nodig is +# # Je kunt dit commentaar geven als je het normaal niet wilt uitvoeren +# renv::restore() +# Chunk 2: load_libraries +# Configure knitr options +knitr::opts_chunk$set(warning = FALSE, message = FALSE) +# Path management +library(here) +# Spatial data libraries +library(sf) +library(terra) +library(exactextractr) +# library(raster) - Removed as it's no longer maintained +# Data manipulation and visualization +library(tidyverse) # Includes dplyr, ggplot2, etc. +library(tmap) +library(lubridate) +library(zoo) +# Machine learning +library(rsample) +library(caret) +library(randomForest) +library(CAST) +# Load custom utility functions +tryCatch({ +source("report_utils.R") +}, error = function(e) { +message(paste("Error loading report_utils.R:", e$message)) +# Try alternative path if the first one fails +tryCatch({ +source(here::here("r_app", "report_utils.R")) +}, error = function(e) { +stop("Could not load report_utils.R from either location: ", e$message) +}) +}) +# Load executive report utilities +tryCatch({ +source("executive_report_utils.R") +}, error = function(e) { +message(paste("Error loading executive_report_utils.R:", e$message)) +# Try alternative path if the first one fails +tryCatch({ +source(here::here("r_app", "executive_report_utils.R")) +}, error = function(e) { +stop("Could not load executive_report_utils.R from either location: ", e$message) +}) +}) +# Chunk 1: setup_parameters +# Set up basic report parameters from input values +report_date <- params$report_date +mail_day <- params$mail_day +borders <- params$borders +use_breaks <- params$use_breaks # Whether to use breaks or continuous spectrum in visualizations +# Environment setup notes (commented out) +# # Activeer de renv omgeving +# renv::activate() +# renv::deactivate() +# # Optioneel: Herstel de omgeving als dat nodig is +# # Je kunt dit commentaar geven als je het normaal niet wilt uitvoeren +# renv::restore() +# Chunk 2: load_libraries +# Configure knitr options +knitr::opts_chunk$set(warning = FALSE, message = FALSE) +# Path management +library(here) +# Spatial data libraries +library(sf) +library(terra) +library(exactextractr) +# library(raster) - Removed as it's no longer maintained +# Data manipulation and visualization +library(tidyverse) # Includes dplyr, ggplot2, etc. +library(tmap) +library(lubridate) +library(zoo) +# Machine learning +library(rsample) +library(caret) +library(randomForest) +library(CAST) +# Load custom utility functions +tryCatch({ +source("report_utils.R") +}, error = function(e) { +message(paste("Error loading report_utils.R:", e$message)) +# Try alternative path if the first one fails +tryCatch({ +source(here::here("r_app", "report_utils.R")) +}, error = function(e) { +stop("Could not load report_utils.R from either location: ", e$message) +}) +}) +# Load executive report utilities +tryCatch({ +source("executive_report_utils.R") +}, error = function(e) { +message(paste("Error loading executive_report_utils.R:", e$message)) +# Try alternative path if the first one fails +tryCatch({ +source(here::here("r_app", "executive_report_utils.R")) +}, error = function(e) { +stop("Could not load executive_report_utils.R from either location: ", e$message) +}) +}) +# Chunk 1: setup_parameters +# Set up basic report parameters from input values +report_date <- params$report_date +mail_day <- params$mail_day +borders <- params$borders +use_breaks <- params$use_breaks # Whether to use breaks or continuous spectrum in visualizations +# Environment setup notes (commented out) +# # Activeer de renv omgeving +# renv::activate() +# renv::deactivate() +# # Optioneel: Herstel de omgeving als dat nodig is +# # Je kunt dit commentaar geven als je het normaal niet wilt uitvoeren +# renv::restore() +# Chunk 2: load_libraries +# Configure knitr options +knitr::opts_chunk$set(warning = FALSE, message = FALSE) +# Path management +library(here) +# Spatial data libraries +library(sf) +library(terra) +library(exactextractr) +# library(raster) - Removed as it's no longer maintained +# Data manipulation and visualization +library(tidyverse) # Includes dplyr, ggplot2, etc. +library(tmap) +library(lubridate) +library(zoo) +# Machine learning +library(rsample) +library(caret) +library(randomForest) +library(CAST) +# Load custom utility functions +# tryCatch({ +# source("report_utils.R") +# }, error = function(e) { +# message(paste("Error loading report_utils.R:", e$message)) +# # Try alternative path if the first one fails +# tryCatch({ +source(here::here("r_app", "report_utils.R")) +# }, error = function(e) { +# stop("Could not load report_utils.R from either location: ", e$message) +# }) +# }) +# Load executive report utilities +# tryCatch({ +# source("executive_report_utils.R") +# }, error = function(e) { +# message(paste("Error loading executive_report_utils.R:", e$message)) +# # Try alternative path if the first one fails +# tryCatch({ +source(here::here("r_app", "executive_report_utils.R")) +# Chunk 1: setup_parameters +# Set up basic report parameters from input values +report_date <- params$report_date +mail_day <- params$mail_day +borders <- params$borders +use_breaks <- params$use_breaks # Whether to use breaks or continuous spectrum in visualizations +# Environment setup notes (commented out) +# # Activeer de renv omgeving +# renv::activate() +# renv::deactivate() +# # Optioneel: Herstel de omgeving als dat nodig is +# # Je kunt dit commentaar geven als je het normaal niet wilt uitvoeren +# renv::restore() +# Chunk 2: load_libraries +# Configure knitr options +knitr::opts_chunk$set(warning = FALSE, message = FALSE) +# Path management +library(here) +# Spatial data libraries +library(sf) +library(terra) +library(exactextractr) +# library(raster) - Removed as it's no longer maintained +# Data manipulation and visualization +library(tidyverse) # Includes dplyr, ggplot2, etc. +library(tmap) +library(lubridate) +library(zoo) +# Machine learning +library(rsample) +library(caret) +library(randomForest) +library(CAST) +# Load custom utility functions +# tryCatch({ +# source("report_utils.R") +# }, error = function(e) { +# message(paste("Error loading report_utils.R:", e$message)) +# # Try alternative path if the first one fails +# tryCatch({ +source(here::here("r_app", "report_utils.R")) +# }, error = function(e) { +# stop("Could not load report_utils.R from either location: ", e$message) +# }) +# }) +# Load executive report utilities +# tryCatch({ +# source("executive_report_utils.R") +# }, error = function(e) { +# message(paste("Error loading executive_report_utils.R:", e$message)) +# # Try alternative path if the first one fails +# tryCatch({ +source(here::here("r_app", "exec_dashboard", "executive_report_utils.R")) +# }, error = function(e) { +# stop("Could not load executive_report_utils.R from either location: ", e$message) +# }) +# }) +# Chunk 3: initialize_project_config +# Set the project directory from parameters +project_dir <- params$data_dir +# Source project parameters with error handling +# tryCatch({ +source(here::here("r_app", "parameters_project.R")) +# }, error = function(e) { +# stop("Error loading parameters_project.R: ", e$message) +# }) +# Log initial configuration +safe_log("Starting the R Markdown script") +safe_log(paste("mail_day params:", params$mail_day)) +safe_log(paste("report_date params:", params$report_date)) +safe_log(paste("mail_day variable:", mail_day)) +# Set locale for consistent date formatting +Sys.setlocale("LC_TIME", "C") +# Initialize date variables from parameters +today <- as.character(report_date) +mail_day_as_character <- as.character(mail_day) +# Calculate week days +report_date_as_week_day <- weekdays(lubridate::ymd(today)) +days_of_week <- c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") +# Calculate initial week number +week <- lubridate::week(today) +safe_log(paste("Initial week calculation:", week, "today:", today)) +# Calculate previous dates for comparisons +today_minus_1 <- as.character(lubridate::ymd(today) - 7) +today_minus_2 <- as.character(lubridate::ymd(today) - 14) +today_minus_3 <- as.character(lubridate::ymd(today) - 21) +# Log the weekday calculations for debugging +safe_log(paste("Report date weekday:", report_date_as_week_day)) +safe_log(paste("Weekday index:", which(days_of_week == report_date_as_week_day))) +safe_log(paste("Mail day:", mail_day_as_character)) +safe_log(paste("Mail day index:", which(days_of_week == mail_day_as_character))) +# Adjust week calculation based on mail day +if (which(days_of_week == report_date_as_week_day) > which(days_of_week == mail_day_as_character)) { +safe_log("Adjusting weeks because of mail day") +week <- lubridate::week(today) + 1 +today_minus_1 <- as.character(lubridate::ymd(today)) +today_minus_2 <- as.character(lubridate::ymd(today) - 7) +today_minus_3 <- as.character(lubridate::ymd(today) - 14) +} +# Generate subtitle for report +subtitle_var <- paste("Report generated on", Sys.Date()) +# Calculate week numbers for previous weeks +week_minus_1 <- week - 1 +week_minus_2 <- week - 2 +week_minus_3 <- week - 3 +# Format current week with leading zeros +week <- sprintf("%02d", week) +# Get years for each date +year <- lubridate::year(today) +year_1 <- lubridate::year(today_minus_1) +year_2 <- lubridate::year(today_minus_2) +year_3 <- lubridate::year(today_minus_3) +# Load CI index data with error handling +tryCatch({ +CI_quadrant <- readRDS(here::here(cumulative_CI_vals_dir, "All_pivots_Cumulative_CI_quadrant_year_v2.rds")) +safe_log("Successfully loaded CI quadrant data") +}, error = function(e) { +stop("Error loading CI quadrant data: ", e$message) +}) +# Get file paths for different weeks using the utility function +tryCatch({ +path_to_week_current = get_week_path(weekly_CI_mosaic, today, 0) +path_to_week_minus_1 = get_week_path(weekly_CI_mosaic, today, -1) +path_to_week_minus_2 = get_week_path(weekly_CI_mosaic, today, -2) +path_to_week_minus_3 = get_week_path(weekly_CI_mosaic, today, -3) +# Log the calculated paths +safe_log("Required mosaic paths:") +safe_log(paste("Path to current week:", path_to_week_current)) +safe_log(paste("Path to week minus 1:", path_to_week_minus_1)) +safe_log(paste("Path to week minus 2:", path_to_week_minus_2)) +safe_log(paste("Path to week minus 3:", path_to_week_minus_3)) +# Validate that files exist +if (!file.exists(path_to_week_current)) warning("Current week mosaic file does not exist: ", path_to_week_current) +if (!file.exists(path_to_week_minus_1)) warning("Week minus 1 mosaic file does not exist: ", path_to_week_minus_1) +if (!file.exists(path_to_week_minus_2)) warning("Week minus 2 mosaic file does not exist: ", path_to_week_minus_2) +if (!file.exists(path_to_week_minus_3)) warning("Week minus 3 mosaic file does not exist: ", path_to_week_minus_3) +# Load raster data with terra functions +CI <- terra::rast(path_to_week_current)$CI +CI_m1 <- terra::rast(path_to_week_minus_1)$CI +CI_m2 <- terra::rast(path_to_week_minus_2)$CI +CI_m3 <- terra::rast(path_to_week_minus_3)$CI +}, error = function(e) { +stop("Error loading raster data: ", e$message) +}) diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..642ff51 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.REPL.enableREPLSmartSend": false +} \ No newline at end of file diff --git a/Current - Pivots planting date and harevsting data.xlsx b/Current - Pivots planting date and harevsting data.xlsx deleted file mode 100644 index f5445d7a9915bc63cb6f3f1b8e7fe6002e0236f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99055 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 diff --git a/Rplots.pdf b/Rplots.pdf deleted file mode 100644 index a68f07a898e1614507bcbe9f2ff0d7560ccb2c59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160945 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 L?Cc6!ibVed7$vpB diff --git a/figure/sub_chunk_8433-1.png b/figure/sub_chunk_8433-1.png new file mode 100644 index 0000000000000000000000000000000000000000..160a7338f58ae29de5742fd75f17d022b8343386 GIT binary patch literal 8114 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 aG_{U=2.12'.\n", - "\n", - "If you are a user of the module, the easiest solution will be to\n", - "downgrade to 'numpy<2' or try to upgrade the affected module.\n", - "We expect that some modules will need time to support NumPy 2.\n", - "\n", - "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main\n", - " File \"\", line 88, in _run_code\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel_launcher.py\", line 17, in \n", - " app.launch_new_instance()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\traitlets\\config\\application.py\", line 1075, in launch_instance\n", - " app.start()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelapp.py\", line 701, in start\n", - " self.io_loop.start()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\tornado\\platform\\asyncio.py\", line 205, in start\n", - " self.asyncio_loop.run_forever()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\windows_events.py\", line 322, in run_forever\n", - " super().run_forever()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\base_events.py\", line 641, in run_forever\n", - " self._run_once()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\base_events.py\", line 1987, in _run_once\n", - " handle._run()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\events.py\", line 88, in _run\n", - " self._context.run(self._callback, *self._args)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 534, in dispatch_queue\n", - " await self.process_one()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 523, in process_one\n", - " await dispatch(*args)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 429, in dispatch_shell\n", - " await result\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 767, in execute_request\n", - " reply_content = await reply_content\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\ipkernel.py\", line 429, in do_execute\n", - " res = shell.run_cell(\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\zmqshell.py\", line 549, in run_cell\n", - " return super().run_cell(*args, **kwargs)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3075, in run_cell\n", - " result = self._run_cell(\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3130, in _run_cell\n", - " result = runner(coro)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\async_helpers.py\", line 128, in _pseudo_sync_runner\n", - " coro.send(None)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3334, in run_cell_async\n", - " has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3517, in run_ast_nodes\n", - " if await self.run_code(code, result, async_=asy):\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3577, in run_code\n", - " exec(code_obj, self.user_global_ns, self.user_ns)\n", - " File \"C:\\Users\\timon\\AppData\\Local\\Temp\\ipykernel_5948\\2295736612.py\", line 21, in \n", - " import geopandas as gpd\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\geopandas\\__init__.py\", line 3, in \n", - " from geopandas.geoseries import GeoSeries\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\geopandas\\geoseries.py\", line 9, in \n", - " import pandas as pd\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\__init__.py\", line 39, in \n", - " from pandas.compat import (\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\compat\\__init__.py\", line 27, in \n", - " from pandas.compat.pyarrow import (\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\compat\\pyarrow.py\", line 8, in \n", - " import pyarrow as pa\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pyarrow\\__init__.py\", line 65, in \n", - " import pyarrow.lib as _lib\n" - ] - }, - { - "ename": "ImportError", - "evalue": "\nA module that was compiled using NumPy 1.x cannot be run in\nNumPy 2.2.4 as it may crash. To support both 1.x and 2.x\nversions of NumPy, modules must be compiled with NumPy 2.0.\nSome module may need to rebuild instead e.g. with 'pybind11>=2.12'.\n\nIf you are a user of the module, the easiest solution will be to\ndowngrade to 'numpy<2' or try to upgrade the affected module.\nWe expect that some modules will need time to support NumPy 2.\n\n", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", - "File \u001b[1;32mc:\\Users\\timon\\anaconda3\\Lib\\site-packages\\numpy\\core\\_multiarray_umath.py:44\u001b[0m, in \u001b[0;36m__getattr__\u001b[1;34m(attr_name)\u001b[0m\n\u001b[0;32m 39\u001b[0m \u001b[38;5;66;03m# Also print the message (with traceback). This is because old versions\u001b[39;00m\n\u001b[0;32m 40\u001b[0m \u001b[38;5;66;03m# of NumPy unfortunately set up the import to replace (and hide) the\u001b[39;00m\n\u001b[0;32m 41\u001b[0m \u001b[38;5;66;03m# error. The traceback shouldn't be needed, but e.g. pytest plugins\u001b[39;00m\n\u001b[0;32m 42\u001b[0m \u001b[38;5;66;03m# seem to swallow it and we should be failing anyway...\u001b[39;00m\n\u001b[0;32m 43\u001b[0m sys\u001b[38;5;241m.\u001b[39mstderr\u001b[38;5;241m.\u001b[39mwrite(msg \u001b[38;5;241m+\u001b[39m tb_msg)\n\u001b[1;32m---> 44\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(msg)\n\u001b[0;32m 46\u001b[0m ret \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(_multiarray_umath, attr_name, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m 47\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ret \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "\u001b[1;31mImportError\u001b[0m: \nA module that was compiled using NumPy 1.x cannot be run in\nNumPy 2.2.4 as it may crash. To support both 1.x and 2.x\nversions of NumPy, modules must be compiled with NumPy 2.0.\nSome module may need to rebuild instead e.g. with 'pybind11>=2.12'.\n\nIf you are a user of the module, the easiest solution will be to\ndowngrade to 'numpy<2' or try to upgrade the affected module.\nWe expect that some modules will need time to support NumPy 2.\n\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "A module that was compiled using NumPy 1.x cannot be run in\n", - "NumPy 2.2.4 as it may crash. To support both 1.x and 2.x\n", - "versions of NumPy, modules must be compiled with NumPy 2.0.\n", - "Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.\n", - "\n", - "If you are a user of the module, the easiest solution will be to\n", - "downgrade to 'numpy<2' or try to upgrade the affected module.\n", - "We expect that some modules will need time to support NumPy 2.\n", - "\n", - "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main\n", - " File \"\", line 88, in _run_code\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel_launcher.py\", line 17, in \n", - " app.launch_new_instance()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\traitlets\\config\\application.py\", line 1075, in launch_instance\n", - " app.start()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelapp.py\", line 701, in start\n", - " self.io_loop.start()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\tornado\\platform\\asyncio.py\", line 205, in start\n", - " self.asyncio_loop.run_forever()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\windows_events.py\", line 322, in run_forever\n", - " super().run_forever()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\base_events.py\", line 641, in run_forever\n", - " self._run_once()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\base_events.py\", line 1987, in _run_once\n", - " handle._run()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\events.py\", line 88, in _run\n", - " self._context.run(self._callback, *self._args)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 534, in dispatch_queue\n", - " await self.process_one()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 523, in process_one\n", - " await dispatch(*args)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 429, in dispatch_shell\n", - " await result\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 767, in execute_request\n", - " reply_content = await reply_content\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\ipkernel.py\", line 429, in do_execute\n", - " res = shell.run_cell(\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\zmqshell.py\", line 549, in run_cell\n", - " return super().run_cell(*args, **kwargs)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3075, in run_cell\n", - " result = self._run_cell(\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3130, in _run_cell\n", - " result = runner(coro)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\async_helpers.py\", line 128, in _pseudo_sync_runner\n", - " coro.send(None)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3334, in run_cell_async\n", - " has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3517, in run_ast_nodes\n", - " if await self.run_code(code, result, async_=asy):\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3577, in run_code\n", - " exec(code_obj, self.user_global_ns, self.user_ns)\n", - " File \"C:\\Users\\timon\\AppData\\Local\\Temp\\ipykernel_5948\\2295736612.py\", line 21, in \n", - " import geopandas as gpd\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\geopandas\\__init__.py\", line 3, in \n", - " from geopandas.geoseries import GeoSeries\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\geopandas\\geoseries.py\", line 9, in \n", - " import pandas as pd\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\__init__.py\", line 62, in \n", - " from pandas.core.api import (\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\api.py\", line 9, in \n", - " from pandas.core.dtypes.dtypes import (\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\dtypes\\dtypes.py\", line 24, in \n", - " from pandas._libs import (\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pyarrow\\__init__.py\", line 65, in \n", - " import pyarrow.lib as _lib\n" - ] - }, - { - "ename": "ImportError", - "evalue": "\nA module that was compiled using NumPy 1.x cannot be run in\nNumPy 2.2.4 as it may crash. To support both 1.x and 2.x\nversions of NumPy, modules must be compiled with NumPy 2.0.\nSome module may need to rebuild instead e.g. with 'pybind11>=2.12'.\n\nIf you are a user of the module, the easiest solution will be to\ndowngrade to 'numpy<2' or try to upgrade the affected module.\nWe expect that some modules will need time to support NumPy 2.\n\n", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", - "File \u001b[1;32mc:\\Users\\timon\\anaconda3\\Lib\\site-packages\\numpy\\core\\_multiarray_umath.py:44\u001b[0m, in \u001b[0;36m__getattr__\u001b[1;34m(attr_name)\u001b[0m\n\u001b[0;32m 39\u001b[0m \u001b[38;5;66;03m# Also print the message (with traceback). This is because old versions\u001b[39;00m\n\u001b[0;32m 40\u001b[0m \u001b[38;5;66;03m# of NumPy unfortunately set up the import to replace (and hide) the\u001b[39;00m\n\u001b[0;32m 41\u001b[0m \u001b[38;5;66;03m# error. The traceback shouldn't be needed, but e.g. pytest plugins\u001b[39;00m\n\u001b[0;32m 42\u001b[0m \u001b[38;5;66;03m# seem to swallow it and we should be failing anyway...\u001b[39;00m\n\u001b[0;32m 43\u001b[0m sys\u001b[38;5;241m.\u001b[39mstderr\u001b[38;5;241m.\u001b[39mwrite(msg \u001b[38;5;241m+\u001b[39m tb_msg)\n\u001b[1;32m---> 44\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(msg)\n\u001b[0;32m 46\u001b[0m ret \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(_multiarray_umath, attr_name, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m 47\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ret \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "\u001b[1;31mImportError\u001b[0m: \nA module that was compiled using NumPy 1.x cannot be run in\nNumPy 2.2.4 as it may crash. To support both 1.x and 2.x\nversions of NumPy, modules must be compiled with NumPy 2.0.\nSome module may need to rebuild instead e.g. with 'pybind11>=2.12'.\n\nIf you are a user of the module, the easiest solution will be to\ndowngrade to 'numpy<2' or try to upgrade the affected module.\nWe expect that some modules will need time to support NumPy 2.\n\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "A module that was compiled using NumPy 1.x cannot be run in\n", - "NumPy 2.2.4 as it may crash. To support both 1.x and 2.x\n", - "versions of NumPy, modules must be compiled with NumPy 2.0.\n", - "Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.\n", - "\n", - "If you are a user of the module, the easiest solution will be to\n", - "downgrade to 'numpy<2' or try to upgrade the affected module.\n", - "We expect that some modules will need time to support NumPy 2.\n", - "\n", - "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main\n", - " File \"\", line 88, in _run_code\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel_launcher.py\", line 17, in \n", - " app.launch_new_instance()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\traitlets\\config\\application.py\", line 1075, in launch_instance\n", - " app.start()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelapp.py\", line 701, in start\n", - " self.io_loop.start()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\tornado\\platform\\asyncio.py\", line 205, in start\n", - " self.asyncio_loop.run_forever()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\windows_events.py\", line 322, in run_forever\n", - " super().run_forever()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\base_events.py\", line 641, in run_forever\n", - " self._run_once()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\base_events.py\", line 1987, in _run_once\n", - " handle._run()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\events.py\", line 88, in _run\n", - " self._context.run(self._callback, *self._args)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 534, in dispatch_queue\n", - " await self.process_one()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 523, in process_one\n", - " await dispatch(*args)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 429, in dispatch_shell\n", - " await result\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 767, in execute_request\n", - " reply_content = await reply_content\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\ipkernel.py\", line 429, in do_execute\n", - " res = shell.run_cell(\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\zmqshell.py\", line 549, in run_cell\n", - " return super().run_cell(*args, **kwargs)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3075, in run_cell\n", - " result = self._run_cell(\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3130, in _run_cell\n", - " result = runner(coro)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\async_helpers.py\", line 128, in _pseudo_sync_runner\n", - " coro.send(None)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3334, in run_cell_async\n", - " has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3517, in run_ast_nodes\n", - " if await self.run_code(code, result, async_=asy):\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3577, in run_code\n", - " exec(code_obj, self.user_global_ns, self.user_ns)\n", - " File \"C:\\Users\\timon\\AppData\\Local\\Temp\\ipykernel_5948\\2295736612.py\", line 21, in \n", - " import geopandas as gpd\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\geopandas\\__init__.py\", line 3, in \n", - " from geopandas.geoseries import GeoSeries\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\geopandas\\geoseries.py\", line 9, in \n", - " import pandas as pd\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\__init__.py\", line 62, in \n", - " from pandas.core.api import (\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\api.py\", line 28, in \n", - " from pandas.core.arrays import Categorical\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\arrays\\__init__.py\", line 1, in \n", - " from pandas.core.arrays.arrow import ArrowExtensionArray\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\arrays\\arrow\\__init__.py\", line 5, in \n", - " from pandas.core.arrays.arrow.array import ArrowExtensionArray\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\arrays\\arrow\\array.py\", line 50, in \n", - " from pandas.core import (\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\ops\\__init__.py\", line 8, in \n", - " from pandas.core.ops.array_ops import (\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\ops\\array_ops.py\", line 56, in \n", - " from pandas.core.computation import expressions\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\computation\\expressions.py\", line 21, in \n", - " from pandas.core.computation.check import NUMEXPR_INSTALLED\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\computation\\check.py\", line 5, in \n", - " ne = import_optional_dependency(\"numexpr\", errors=\"warn\")\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\compat\\_optional.py\", line 135, in import_optional_dependency\n", - " module = importlib.import_module(name)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\importlib\\__init__.py\", line 90, in import_module\n", - " return _bootstrap._gcd_import(name[level:], package, level)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\numexpr\\__init__.py\", line 24, in \n", - " from numexpr.interpreter import MAX_THREADS, use_vml, __BLOCK_SIZE1__\n" - ] - }, - { - "ename": "AttributeError", - "evalue": "_ARRAY_API not found", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[1;31mAttributeError\u001b[0m: _ARRAY_API not found" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "A module that was compiled using NumPy 1.x cannot be run in\n", - "NumPy 2.2.4 as it may crash. To support both 1.x and 2.x\n", - "versions of NumPy, modules must be compiled with NumPy 2.0.\n", - "Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.\n", - "\n", - "If you are a user of the module, the easiest solution will be to\n", - "downgrade to 'numpy<2' or try to upgrade the affected module.\n", - "We expect that some modules will need time to support NumPy 2.\n", - "\n", - "Traceback (most recent call last): File \"\", line 198, in _run_module_as_main\n", - " File \"\", line 88, in _run_code\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel_launcher.py\", line 17, in \n", - " app.launch_new_instance()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\traitlets\\config\\application.py\", line 1075, in launch_instance\n", - " app.start()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelapp.py\", line 701, in start\n", - " self.io_loop.start()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\tornado\\platform\\asyncio.py\", line 205, in start\n", - " self.asyncio_loop.run_forever()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\windows_events.py\", line 322, in run_forever\n", - " super().run_forever()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\base_events.py\", line 641, in run_forever\n", - " self._run_once()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\base_events.py\", line 1987, in _run_once\n", - " handle._run()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\asyncio\\events.py\", line 88, in _run\n", - " self._context.run(self._callback, *self._args)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 534, in dispatch_queue\n", - " await self.process_one()\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 523, in process_one\n", - " await dispatch(*args)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 429, in dispatch_shell\n", - " await result\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\kernelbase.py\", line 767, in execute_request\n", - " reply_content = await reply_content\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\ipkernel.py\", line 429, in do_execute\n", - " res = shell.run_cell(\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\ipykernel\\zmqshell.py\", line 549, in run_cell\n", - " return super().run_cell(*args, **kwargs)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3075, in run_cell\n", - " result = self._run_cell(\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3130, in _run_cell\n", - " result = runner(coro)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\async_helpers.py\", line 128, in _pseudo_sync_runner\n", - " coro.send(None)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3334, in run_cell_async\n", - " has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3517, in run_ast_nodes\n", - " if await self.run_code(code, result, async_=asy):\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\IPython\\core\\interactiveshell.py\", line 3577, in run_code\n", - " exec(code_obj, self.user_global_ns, self.user_ns)\n", - " File \"C:\\Users\\timon\\AppData\\Local\\Temp\\ipykernel_5948\\2295736612.py\", line 21, in \n", - " import geopandas as gpd\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\geopandas\\__init__.py\", line 3, in \n", - " from geopandas.geoseries import GeoSeries\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\geopandas\\geoseries.py\", line 9, in \n", - " import pandas as pd\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\__init__.py\", line 62, in \n", - " from pandas.core.api import (\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\api.py\", line 28, in \n", - " from pandas.core.arrays import Categorical\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\arrays\\__init__.py\", line 1, in \n", - " from pandas.core.arrays.arrow import ArrowExtensionArray\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\arrays\\arrow\\__init__.py\", line 5, in \n", - " from pandas.core.arrays.arrow.array import ArrowExtensionArray\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\arrays\\arrow\\array.py\", line 64, in \n", - " from pandas.core.arrays.masked import BaseMaskedArray\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\arrays\\masked.py\", line 60, in \n", - " from pandas.core import (\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\core\\nanops.py\", line 52, in \n", - " bn = import_optional_dependency(\"bottleneck\", errors=\"warn\")\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\pandas\\compat\\_optional.py\", line 135, in import_optional_dependency\n", - " module = importlib.import_module(name)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\importlib\\__init__.py\", line 90, in import_module\n", - " return _bootstrap._gcd_import(name[level:], package, level)\n", - " File \"c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\bottleneck\\__init__.py\", line 7, in \n", - " from .move import (move_argmax, move_argmin, move_max, move_mean, move_median,\n" - ] - }, - { - "ename": "ImportError", - "evalue": "\nA module that was compiled using NumPy 1.x cannot be run in\nNumPy 2.2.4 as it may crash. To support both 1.x and 2.x\nversions of NumPy, modules must be compiled with NumPy 2.0.\nSome module may need to rebuild instead e.g. with 'pybind11>=2.12'.\n\nIf you are a user of the module, the easiest solution will be to\ndowngrade to 'numpy<2' or try to upgrade the affected module.\nWe expect that some modules will need time to support NumPy 2.\n\n", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", - "File \u001b[1;32mc:\\Users\\timon\\anaconda3\\Lib\\site-packages\\numpy\\core\\_multiarray_umath.py:44\u001b[0m, in \u001b[0;36m__getattr__\u001b[1;34m(attr_name)\u001b[0m\n\u001b[0;32m 39\u001b[0m \u001b[38;5;66;03m# Also print the message (with traceback). This is because old versions\u001b[39;00m\n\u001b[0;32m 40\u001b[0m \u001b[38;5;66;03m# of NumPy unfortunately set up the import to replace (and hide) the\u001b[39;00m\n\u001b[0;32m 41\u001b[0m \u001b[38;5;66;03m# error. The traceback shouldn't be needed, but e.g. pytest plugins\u001b[39;00m\n\u001b[0;32m 42\u001b[0m \u001b[38;5;66;03m# seem to swallow it and we should be failing anyway...\u001b[39;00m\n\u001b[0;32m 43\u001b[0m sys\u001b[38;5;241m.\u001b[39mstderr\u001b[38;5;241m.\u001b[39mwrite(msg \u001b[38;5;241m+\u001b[39m tb_msg)\n\u001b[1;32m---> 44\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(msg)\n\u001b[0;32m 46\u001b[0m ret \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(_multiarray_umath, attr_name, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m 47\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ret \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "\u001b[1;31mImportError\u001b[0m: \nA module that was compiled using NumPy 1.x cannot be run in\nNumPy 2.2.4 as it may crash. To support both 1.x and 2.x\nversions of NumPy, modules must be compiled with NumPy 2.0.\nSome module may need to rebuild instead e.g. with 'pybind11>=2.12'.\n\nIf you are a user of the module, the easiest solution will be to\ndowngrade to 'numpy<2' or try to upgrade the affected module.\nWe expect that some modules will need time to support NumPy 2.\n\n" - ] - } - ], + "outputs": [], "source": [ "# $ pip install sentinelhub\n", "# pip install gdal\n", @@ -403,28 +43,7 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "330c967c-2742-4a7a-9a61-28bfdaf8eeca", - "metadata": {}, - "outputs": [], - "source": [ - "# pip install geopandas" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "49f8496a-a267-4b74-9500-a168e031ed68", - "metadata": {}, - "outputs": [], - "source": [ - "#import pipreqs\n", - "#pipreqs Resilience BV/4002 CMD App - General/4002 CMD Team/4002 TechnicalData/04 WP2 technical/python/Chemba_download.ipynb" - ] - }, - { - "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "5491a840-779c-4f0c-8164-c3de738b3298", "metadata": {}, "outputs": [], @@ -435,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "eb1fb662-0e25-4ca9-8317-c6953290842b", "metadata": {}, "outputs": [], @@ -460,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "060396e0-e5ee-4b54-b211-5d8bfcba167f", "metadata": {}, "outputs": [], @@ -472,18 +91,18 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "c9f79e81-dff8-4109-8d26-6c423142dcf2", "metadata": {}, "outputs": [], "source": [ "# Adjust the number of days needed\n", - "days = 1095 #change back to 28 which is the default. 3 years is 1095 days." + "days = 30 #change back to 28 which is the default. 3 years is 1095 days.\n" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "e18bdf8f-be4b-44ab-baaa-de5de60d92cb", "metadata": {}, "outputs": [], @@ -505,7 +124,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "3f7c8e04-4569-457b-b39d-283582c4ba36", "metadata": {}, "outputs": [], @@ -529,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "244b5752-4f02-4347-9278-f6a0a46b88f4", "metadata": {}, "outputs": [], @@ -543,34 +162,92 @@ " bands: [\"red\", \"green\", \"blue\", \"nir\", \"udm1\"]\n", " }],\n", " output: {\n", - " bands: 4 \n", - " //sampleType: \"FLOAT32\"\n", + " bands: 4,\n", + " sampleType: \"FLOAT32\"\n", " }\n", " };\n", " }\n", "\n", " function evaluatePixel(sample) {\n", " // Scale the bands\n", - " var scaledBlue = [2.5 * sample.blue / 10000];\n", - " var scaledGreen = [2.5 * sample.green / 10000];\n", - " var scaledRed = [2.5 * sample.red / 10000];\n", - " var scaledNIR = [2.5 * sample.nir / 10000];\n", - " \n", - " // Calculate the CI (Chlorophyll Index) using the scaled values\n", - " // var CI = [scaledNIR / scaledGreen - 1] ;\n", + " var scaledBlue = 2.5 * sample.blue / 10000;\n", + " var scaledGreen = 2.5 * sample.green / 10000;\n", + " var scaledRed = 2.5 * sample.red / 10000;\n", + " var scaledNIR = 2.5 * sample.nir / 10000;\n", + " \n", + " // Calculate indices for cloud and shadow detection\n", + " var brightness = (scaledBlue + scaledGreen + scaledRed) / 3;\n", + " var ndvi = (scaledNIR - scaledRed) / (scaledNIR + scaledRed);\n", + " var blue_ratio = scaledBlue / (scaledRed + 0.01); // Add 0.01 to prevent division by zero\n", + " \n", + " // CLOUD DETECTION\n", + " // Clouds are typically bright in all bands\n", + " var bright_pixels = (scaledBlue > 0.3) && (scaledGreen > 0.3) && (scaledRed > 0.3);\n", + " \n", + " // Clouds often have higher blue reflectance\n", + " var blue_dominant = scaledBlue > (scaledRed * 1.2);\n", + " \n", + " // Low NDVI areas that are bright are likely clouds\n", + " var low_ndvi = ndvi < 0.1;\n", + " \n", + " // Combine cloud criteria\n", + " var is_cloud = bright_pixels && (blue_dominant || low_ndvi);\n", + " \n", + " // SHADOW DETECTION\n", + " // Shadows are typically dark\n", + " var dark_pixels = brightness < 0.1;\n", + " \n", + " // Shadows have lower NIR reflectance\n", + " var low_nir = scaledNIR < 0.15;\n", + " \n", + " // Shadows often have higher blue proportion relative to NIR\n", + " var blue_enhanced = blue_ratio > 0.8;\n", + " \n", + " // Combine shadow criteria\n", + " var is_shadow = dark_pixels && (low_nir || blue_enhanced);\n", + " \n", + " // Calculate CI (Chlorophyll Index) using the scaled values\n", + " var CI = (scaledNIR / scaledRed) - 1;\n", + " \n", + " // Use built-in usable data mask (udm1) and our own cloud/shadow detection\n", + " // udm1 == 0 means pixel is usable according to Planet's metadata\n", + " if (sample.udm1 == 0 && !is_cloud && !is_shadow) {\n", + " return [scaledRed, scaledGreen, scaledBlue, scaledNIR];\n", + " } else {\n", + " return [NaN, NaN, NaN, NaN];\n", + " }\n", + " }\n", + "\"\"\"\n", "\n", - "// Output the scaled bands and CI\n", - " if (sample.udm1 == 0) { \n", - " return [\n", - " scaledRed,\n", - " scaledGreen,\n", - " scaledBlue,\n", - " scaledNIR\n", - " // sample.UDM,\n", - " // CI,\n", - " ]\n", - " } else {\n", - " return [NaN, NaN, NaN, NaN]}\n", + "# Original evalscript without cloud/shadow detection (for comparison)\n", + "evalscript_original = \"\"\"\n", + " //VERSION=3\n", + "\n", + " function setup() {\n", + " return {\n", + " input: [{\n", + " bands: [\"red\", \"green\", \"blue\", \"nir\", \"udm1\"]\n", + " }],\n", + " output: {\n", + " bands: 4,\n", + " sampleType: \"FLOAT32\"\n", + " }\n", + " };\n", + " }\n", + "\n", + " function evaluatePixel(sample) {\n", + " // Scale the bands\n", + " var scaledBlue = 2.5 * sample.blue / 10000;\n", + " var scaledGreen = 2.5 * sample.green / 10000;\n", + " var scaledRed = 2.5 * sample.red / 10000;\n", + " var scaledNIR = 2.5 * sample.nir / 10000;\n", + " \n", + " // Only use udm1 mask (Planet's usable data mask)\n", + " if (sample.udm1 == 0) {\n", + " return [scaledRed, scaledGreen, scaledBlue, scaledNIR];\n", + " } else {\n", + " return [NaN, NaN, NaN, NaN];\n", + " }\n", " }\n", "\"\"\"\n", "\n", @@ -593,6 +270,24 @@ "\n", " )\n", "\n", + "# Added function to get original image for comparison\n", + "def get_original_request_day(time_interval, bbox, size):\n", + " return SentinelHubRequest(\n", + " evalscript=evalscript_original,\n", + " input_data=[\n", + " SentinelHubRequest.input_data(\n", + " data_collection=DataCollection.planet_data2,\n", + " time_interval=(time_interval, time_interval)\n", + " )\n", + " ],\n", + " responses=[\n", + " SentinelHubRequest.output_response('default', MimeType.TIFF)\n", + " ],\n", + " bbox=bbox,\n", + " size=size,\n", + " config=config,\n", + " )\n", + "\n", "def download_function(slot, bbox, size):\n", " # create a list of requests\n", " list_of_requests = [get_true_color_request_day(slot, bbox, size)]\n", @@ -625,26 +320,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "848dc773-70d6-4ae6-b05c-d6ebfb41624d", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Monthly time windows:\n", - "\n", - "2022-04-05\n", - "2022-04-06\n", - "2022-04-07\n", - "...\n", - "2025-04-01\n", - "2025-04-02\n", - "2025-04-03\n" - ] - } - ], + "outputs": [], "source": [ "days_needed = int(os.environ.get(\"DAYS\", days))\n", "date_str = os.environ.get(\"DATE\")\n", @@ -683,7 +362,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "c803e373-2567-4233-af7d-0d2d6f7d4f8e", "metadata": {}, "outputs": [], @@ -694,14 +373,6 @@ { "cell_type": "code", "execution_count": null, - "id": "df050c79", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 15, "id": "dc24d54e-2272-4f30-bcf5-4d8fc381915c", "metadata": {}, "outputs": [], @@ -711,7 +382,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "cd071b42-d0cd-4e54-8f88-ad1a339748e3", "metadata": {}, "outputs": [], @@ -721,19 +392,10 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "301d12e4-e47a-4034-aec0-aa5673e64935", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Area bounding box: BBox(((-47.09879025717693, -22.67132809994226), (-47.09188307701802, -22.66813642658124)), crs=CRS('4326'))\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "bbox_splitter = BBoxSplitter(\n", " shapely_geometries, CRS.WGS84, (1, 1), reduce_bbox_sizes=True\n", @@ -749,24 +411,10 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "431f6856-8d7e-4868-b627-20deeb47d77e", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "geometry_list = bbox_splitter.get_geometry_list()\n", "\n", @@ -775,7 +423,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "18655785", "metadata": {}, "outputs": [], @@ -796,43 +444,35 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "a6fc418f", "metadata": {}, "outputs": [], "source": [ "# Filter slots to only include dates with available images\n", "available_slots = [slot for slot in slots if is_image_available(slot)]\n", + "\n", + "# Store the first 5 available slots for comparison later (if available)\n", + "comparison_slots = available_slots[:min(5, len(available_slots))]\n", "\n" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "ebc416be", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['2022-04-06', '2022-04-08', '2022-04-09', '2022-04-10', '2022-04-11', '2022-04-12', '2022-04-13', '2022-04-14', '2022-04-16', '2022-04-17', '2022-04-19', '2022-04-20', '2022-04-21', '2022-04-22', '2022-04-23', '2022-04-24', '2022-04-25', '2022-04-26', '2022-04-27', '2022-04-29', '2022-04-30', '2022-05-02', '2022-05-03', '2022-05-05', '2022-05-07', '2022-05-08', '2022-05-11', '2022-05-12', '2022-05-14', '2022-05-18', '2022-05-19', '2022-05-20', '2022-05-21', '2022-05-22', '2022-05-23', '2022-05-25', '2022-05-26', '2022-05-27', '2022-05-28', '2022-05-29', '2022-05-30', '2022-06-01', '2022-06-02', '2022-06-03', '2022-06-04', '2022-06-05', '2022-06-06', '2022-06-07', '2022-06-08', '2022-06-10', '2022-06-11', '2022-06-12', '2022-06-13', '2022-06-14', '2022-06-15', '2022-06-17', '2022-06-19', '2022-06-20', '2022-06-21', '2022-06-22', '2022-06-24', '2022-06-25', '2022-06-26', '2022-06-27', '2022-06-28', '2022-06-29', '2022-06-30', '2022-07-01', '2022-07-02', '2022-07-03', '2022-07-04', '2022-07-05', '2022-07-06', '2022-07-07', '2022-07-08', '2022-07-09', '2022-07-10', '2022-07-11', '2022-07-12', '2022-07-13', '2022-07-14', '2022-07-15', '2022-07-16', '2022-07-17', '2022-07-18', '2022-07-19', '2022-07-21', '2022-07-22', '2022-07-23', '2022-07-24', '2022-07-25', '2022-07-26', '2022-07-28', '2022-07-29', '2022-07-30', '2022-07-31', '2022-08-01', '2022-08-02', '2022-08-03', '2022-08-04', '2022-08-05', '2022-08-06', '2022-08-07', '2022-08-09', '2022-08-11', '2022-08-12', '2022-08-14', '2022-08-15', '2022-08-18', '2022-08-20', '2022-08-21', '2022-08-22', '2022-08-23', '2022-08-24', '2022-08-26', '2022-08-27', '2022-08-28', '2022-08-29', '2022-08-30', '2022-08-31', '2022-09-01', '2022-09-02', '2022-09-03', '2022-09-04', '2022-09-06', '2022-09-08', '2022-09-10', '2022-09-11', '2022-09-12', '2022-09-13', '2022-09-16', '2022-09-17', '2022-09-18', '2022-09-19', '2022-09-23', '2022-09-24', '2022-09-25', '2022-09-29', '2022-09-30', '2022-10-01', '2022-10-02', '2022-10-04', '2022-10-05', '2022-10-06', '2022-10-08', '2022-10-12', '2022-10-14', '2022-10-15', '2022-10-16', '2022-10-17', '2022-10-20', '2022-10-22', '2022-10-24', '2022-10-25', '2022-10-26', '2022-10-29', '2022-10-30', '2022-11-01', '2022-11-04', '2022-11-07', '2022-11-08', '2022-11-10', '2022-11-12', '2022-11-13', '2022-11-15', '2022-11-16', '2022-11-18', '2022-11-19', '2022-11-20', '2022-11-21', '2022-11-22', '2022-11-23', '2022-11-24', '2022-11-25', '2022-11-26', '2022-11-27', '2022-11-28', '2022-11-29', '2022-11-30', '2022-12-03', '2022-12-07', '2022-12-08', '2022-12-09', '2022-12-10', '2022-12-11', '2022-12-12', '2022-12-14', '2022-12-15', '2022-12-16', '2022-12-17', '2022-12-18', '2022-12-20', '2022-12-21', '2022-12-22', '2022-12-24', '2022-12-25', '2022-12-27', '2022-12-31', '2023-01-02', '2023-01-07', '2023-01-08', '2023-01-09', '2023-01-12', '2023-01-13', '2023-01-15', '2023-01-16', '2023-01-17', '2023-01-18', '2023-01-19', '2023-01-21', '2023-01-23', '2023-01-24', '2023-01-25', '2023-01-26', '2023-01-27', '2023-01-29', '2023-01-31', '2023-02-01', '2023-02-03', '2023-02-04', '2023-02-05', '2023-02-06', '2023-02-07', '2023-02-08', '2023-02-09', '2023-02-10', '2023-02-14', '2023-02-15', '2023-02-16', '2023-02-21', '2023-02-22', '2023-02-25', '2023-02-27', '2023-02-28', '2023-03-01', '2023-03-02', '2023-03-03', '2023-03-04', '2023-03-05', '2023-03-07', '2023-03-08', '2023-03-09', '2023-03-10', '2023-03-12', '2023-03-13', '2023-03-14', '2023-03-15', '2023-03-17', '2023-03-18', '2023-03-20', '2023-03-21', '2023-03-24', '2023-03-25', '2023-03-26', '2023-03-27', '2023-03-28', '2023-03-29', '2023-03-30', '2023-03-31', '2023-04-01', '2023-04-02', '2023-04-03', '2023-04-06', '2023-04-08', '2023-04-10', '2023-04-11', '2023-04-13', '2023-04-15', '2023-04-16', '2023-04-17', '2023-04-18', '2023-04-19', '2023-04-20', '2023-04-21', '2023-04-22', '2023-04-24', '2023-04-25', '2023-04-27', '2023-04-29', '2023-04-30', '2023-05-01', '2023-05-02', '2023-05-03', '2023-05-04', '2023-05-05', '2023-05-06', '2023-05-07', '2023-05-08', '2023-05-09', '2023-05-11', '2023-05-13', '2023-05-14', '2023-05-15', '2023-05-16', '2023-05-17', '2023-05-18', '2023-05-19', '2023-05-20', '2023-05-21', '2023-05-22', '2023-05-23', '2023-05-24', '2023-05-25', '2023-05-26', '2023-05-27', '2023-05-28', '2023-05-29', '2023-05-30', '2023-06-01', '2023-06-02', '2023-06-03', '2023-06-04', '2023-06-05', '2023-06-06', '2023-06-07', '2023-06-08', '2023-06-09', '2023-06-10', '2023-06-11', '2023-06-17', '2023-06-18', '2023-06-19', '2023-06-20', '2023-06-21', '2023-06-22', '2023-06-23', '2023-06-24', '2023-06-25', '2023-06-26', '2023-06-27', '2023-06-28', '2023-06-29', '2023-06-30', '2023-07-03', '2023-07-04', '2023-07-05', '2023-07-06', '2023-07-07', '2023-07-08', '2023-07-10', '2023-07-11', '2023-07-12', '2023-07-13', '2023-07-14', '2023-07-15', '2023-07-16', '2023-07-17', '2023-07-19', '2023-07-21', '2023-07-22', '2023-07-23', '2023-07-24', '2023-07-25', '2023-07-26', '2023-07-27', '2023-07-28', '2023-07-29', '2023-07-30', '2023-07-31', '2023-08-01', '2023-08-02', '2023-08-03', '2023-08-05', '2023-08-06', '2023-08-07', '2023-08-09', '2023-08-10', '2023-08-11', '2023-08-12', '2023-08-15', '2023-08-16', '2023-08-19', '2023-08-21', '2023-08-22', '2023-08-23', '2023-08-24', '2023-08-28', '2023-08-29', '2023-08-30', '2023-08-31', '2023-09-03', '2023-09-04', '2023-09-07', '2023-09-08', '2023-09-09', '2023-09-10', '2023-09-11', '2023-09-12', '2023-09-13', '2023-09-14', '2023-09-16', '2023-09-17', '2023-09-19', '2023-09-20', '2023-09-21', '2023-09-22', '2023-09-23', '2023-09-24', '2023-09-25', '2023-09-30', '2023-10-01', '2023-10-03', '2023-10-04', '2023-10-05', '2023-10-06', '2023-10-07', '2023-10-10', '2023-10-11', '2023-10-12', '2023-10-14', '2023-10-15', '2023-10-16', '2023-10-18', '2023-10-19', '2023-10-20', '2023-10-21', '2023-10-22', '2023-10-23', '2023-10-25', '2023-10-27', '2023-10-28', '2023-10-29', '2023-10-31', '2023-11-01', '2023-11-02', '2023-11-03', '2023-11-04', '2023-11-06', '2023-11-07', '2023-11-08', '2023-11-09', '2023-11-10', '2023-11-11', '2023-11-12', '2023-11-13', '2023-11-14', '2023-11-15', '2023-11-16', '2023-11-17', '2023-11-18', '2023-11-19', '2023-11-20', '2023-11-21', '2023-11-22', '2023-11-26', '2023-11-30', '2023-12-01', '2023-12-03', '2023-12-04', '2023-12-05', '2023-12-06', '2023-12-07', '2023-12-08', '2023-12-09', '2023-12-10', '2023-12-11', '2023-12-12', '2023-12-13', '2023-12-16', '2023-12-18', '2023-12-19', '2023-12-21', '2023-12-22', '2023-12-23', '2023-12-24', '2023-12-25', '2023-12-26', '2023-12-27', '2023-12-28', '2023-12-29', '2023-12-31', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05', '2024-01-06', '2024-01-07', '2024-01-08', '2024-01-09', '2024-01-10', '2024-01-11', '2024-01-12', '2024-01-14', '2024-01-15', '2024-01-16', '2024-01-17', '2024-01-18', '2024-01-19', '2024-01-21', '2024-01-22', '2024-01-24', '2024-01-25', '2024-01-26', '2024-01-29', '2024-01-30', '2024-01-31', '2024-02-01', '2024-02-02', '2024-02-05', '2024-02-06', '2024-02-07', '2024-02-08', '2024-02-09', '2024-02-10', '2024-02-12', '2024-02-13', '2024-02-17', '2024-02-18', '2024-02-19', '2024-02-20', '2024-02-21', '2024-02-22', '2024-02-23', '2024-02-25', '2024-02-26', '2024-02-27', '2024-02-28', '2024-02-29', '2024-03-02', '2024-03-03', '2024-03-04', '2024-03-05', '2024-03-06', '2024-03-07', '2024-03-08', '2024-03-09', '2024-03-10', '2024-03-12', '2024-03-14', '2024-03-15', '2024-03-16', '2024-03-17', '2024-03-18', '2024-03-19', '2024-03-20', '2024-03-21', '2024-03-22', '2024-03-25', '2024-03-29', '2024-03-30', '2024-03-31', '2024-04-02', '2024-04-03', '2024-04-04', '2024-04-05', '2024-04-06', '2024-04-08', '2024-04-10', '2024-04-11', '2024-04-12', '2024-04-13', '2024-04-14', '2024-04-16', '2024-04-18', '2024-04-19', '2024-04-20', '2024-04-22', '2024-04-23', '2024-04-24', '2024-04-25', '2024-04-26', '2024-04-27', '2024-04-29', '2024-04-30', '2024-05-01', '2024-05-02', '2024-05-04', '2024-05-05', '2024-05-06', '2024-05-08', '2024-05-09', '2024-05-10', '2024-05-12', '2024-05-14', '2024-05-15', '2024-05-16', '2024-05-17', '2024-05-18', '2024-05-19', '2024-05-21', '2024-05-22', '2024-05-23', '2024-05-24', '2024-05-25', '2024-05-28', '2024-05-29', '2024-05-30', '2024-05-31', '2024-06-01', '2024-06-02', '2024-06-03', '2024-06-04', '2024-06-05', '2024-06-06', '2024-06-07', '2024-06-09', '2024-06-10', '2024-06-12', '2024-06-13', '2024-06-14', '2024-06-15', '2024-06-16', '2024-06-17', '2024-06-18', '2024-06-19', '2024-06-20', '2024-06-21', '2024-06-22', '2024-06-24', '2024-06-25', '2024-06-26', '2024-06-28', '2024-06-29', '2024-06-30', '2024-07-02', '2024-07-03', '2024-07-06', '2024-07-10', '2024-07-11', '2024-07-12', '2024-07-13', '2024-07-14', '2024-07-15', '2024-07-16', '2024-07-17', '2024-07-18', '2024-07-19', '2024-07-20', '2024-07-21', '2024-07-22', '2024-07-24', '2024-07-25', '2024-07-26', '2024-07-27', '2024-07-28', '2024-07-29', '2024-07-31', '2024-08-01', '2024-08-02', '2024-08-03', '2024-08-04', '2024-08-05', '2024-08-06', '2024-08-07', '2024-08-08', '2024-08-11', '2024-08-12', '2024-08-13', '2024-08-15', '2024-08-16', '2024-08-18', '2024-08-19', '2024-08-20', '2024-08-21', '2024-08-22', '2024-08-23', '2024-08-24', '2024-08-26', '2024-08-27', '2024-08-28', '2024-08-29', '2024-08-30', '2024-08-31', '2024-09-02', '2024-09-03', '2024-09-04', '2024-09-05', '2024-09-06', '2024-09-07', '2024-09-08', '2024-09-09', '2024-09-10', '2024-09-11', '2024-09-12', '2024-09-13', '2024-09-14', '2024-09-17', '2024-09-18', '2024-09-19', '2024-09-20', '2024-09-22', '2024-09-23', '2024-09-25', '2024-09-26', '2024-09-27', '2024-09-28', '2024-09-29', '2024-09-30', '2024-10-01', '2024-10-03', '2024-10-08', '2024-10-13', '2024-10-15', '2024-10-16', '2024-10-18', '2024-10-22', '2024-10-23', '2024-10-29', '2024-10-30', '2024-10-31', '2024-11-01', '2024-11-05', '2024-11-06', '2024-11-09', '2024-11-10', '2024-11-11', '2024-11-13', '2024-11-14', '2024-11-15', '2024-11-17', '2024-11-19', '2024-11-20', '2024-11-24', '2024-11-25', '2024-11-26', '2024-11-27', '2024-12-01', '2024-12-02', '2024-12-04', '2024-12-05', '2024-12-06', '2024-12-07', '2024-12-08', '2024-12-09', '2024-12-10', '2024-12-11', '2024-12-15', '2024-12-17', '2024-12-18', '2024-12-19', '2024-12-21', '2024-12-24', '2024-12-25', '2024-12-28', '2024-12-29', '2024-12-30', '2025-01-01', '2025-01-02', '2025-01-04', '2025-01-05', '2025-01-06', '2025-01-07', '2025-01-08', '2025-01-09', '2025-01-10', '2025-01-11', '2025-01-12', '2025-01-13', '2025-01-14', '2025-01-15', '2025-01-16', '2025-01-19', '2025-01-20', '2025-01-21', '2025-01-22', '2025-01-23', '2025-01-24', '2025-01-25', '2025-01-27', '2025-01-28', '2025-01-30', '2025-02-05', '2025-02-06', '2025-02-08', '2025-02-10', '2025-02-12', '2025-02-13', '2025-02-14', '2025-02-15', '2025-02-16', '2025-02-17', '2025-02-18', '2025-02-20', '2025-02-21', '2025-02-22', '2025-02-23', '2025-02-25', '2025-02-27', '2025-03-01', '2025-03-02', '2025-03-03', '2025-03-04', '2025-03-05', '2025-03-06', '2025-03-07', '2025-03-08', '2025-03-09', '2025-03-11', '2025-03-12', '2025-03-14', '2025-03-15', '2025-03-16', '2025-03-17', '2025-03-18', '2025-03-19', '2025-03-20', '2025-03-21', '2025-03-22', '2025-03-23', '2025-03-25', '2025-03-27', '2025-03-28', '2025-03-29', '2025-03-31', '2025-04-02']\n", - "Total slots: 1095\n", - "Available slots: 805\n", - "Excluded slots due to clouds: 290\n" - ] - } - ], + "outputs": [], "source": [ "print(available_slots)\n", "print(f\"Total slots: {len(slots)}\")\n", "print(f\"Available slots: {len(available_slots)}\")\n", - "print(f\"Excluded slots due to clouds: {len(slots) - len(available_slots)}\")\n" + "print(f\"Excluded slots due to empty dates: {len(slots) - len(available_slots)}\")\n" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "b0cabe8f-e1f2-4b18-8ac0-c2565d0ff16b", "metadata": {}, "outputs": [], @@ -913,847 +553,10 @@ }, { "cell_type": "code", - "execution_count": 23, - "id": "8f2c3e20-894c-4fe5-95d3-482ee3bac117", - "metadata": {}, - "outputs": [], - "source": [ - "#from mpl_toolkits.basemap import Basemap # Available here: https://github.com/matplotlib/basemap\n", - "#from matplotlib.patches import Polygon as PltPolygon\n", - "\n", - "#show_splitter(bbox_splitter, show_legend=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "41b7369c-f768-44ba-983e-eb8eae4f3afd", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\sentinelhub\\geometry.py:137: SHDeprecationWarning: Initializing `BBox` objects from `BBox` objects will no longer be possible in future versions.\n", - " return cls._tuple_from_bbox(bbox)\n", - "C:\\Users\\timon\\AppData\\Local\\Temp\\ipykernel_5948\\170088608.py:67: SHDeprecationWarning: The string representation of `BBox` will change to match its `repr` representation.\n", - " print(f' Image downloaded for ' +slot + ' and bbox ' + str(bbox))\n", - "c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\sentinelhub\\geometry.py:137: SHDeprecationWarning: Initializing `BBox` objects from `BBox` objects will no longer be possible in future versions.\n", - " return cls._tuple_from_bbox(bbox)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Image downloaded for 2022-04-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-04-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-05-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-06-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-07-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-08-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-09-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-10-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-11-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2022-12-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-01-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-02-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-03-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-04-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-05-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-06-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-07-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-08-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-09-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-10-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-11-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2023-12-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-01-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-02-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-03-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-04-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-05-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-06-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-07-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-08-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-09-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-10-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-26 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-11-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2024-12-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-24 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-01-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-10 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-13 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-02-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-01 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-03 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-04 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-05 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-06 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-07 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-08 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-09 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-11 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-12 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-14 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-15 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-16 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-17 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-18 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-19 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-20 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-21 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-22 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-23 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-25 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-27 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-28 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-29 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-03-31 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n", - " Image downloaded for 2025-04-02 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n" - ] - } - ], + "outputs": [], "source": [ "# Load areas outside the loop if they remain constant\n", "#bbox_area = json.dumps(chosen_area)\n", @@ -1769,67 +572,7 @@ }, { "cell_type": "code", - "execution_count": 25, - "id": "7c0f8f0e-b1bc-4b5a-939d-e4358a485c06", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "#if project == 'chemba':\n", - "# chosen_area = [[34.9460, -17.3500, 34.9839, -17.3110], [34.8830, -17.3516, 34.9380, -17.2917]]\n", - "\n", - "#if project == 'chemba_test_8b':\n", - "# chosen_area = [[34.946, -17.3516, 34.938, -17.2917], [34.883, -17.3516, 34.938, -17.2917]]\n", - "\n", - "#if project == 'xinavane':\n", - "# chosen_area = [[32.6790, -25.0333, 32.7453, -25.0235], [32.6213, -25.0647, 32.6284, -25.0570]]" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "16c449ab-eb40-4ed9-9a26-6a64dae114e1", - "metadata": {}, - "outputs": [], - "source": [ - "#bbox_area = json.dumps(chosen_area)\n", - "\n", - "#areas = json.loads(os.getenv('BBOX', bbox_area))\n", - "#areas" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "6c02d7de-cddf-4fc3-8d23-8431415d07b8", - "metadata": {}, - "outputs": [], - "source": [ - "# Load areas outside the loop if they remain constant\n", - "#bbox_area = json.dumps(chosen_area)\n", - "#areas = json.loads(os.getenv('BBOX', bbox_area))\n", - "#resolution = 3\n", - "\n", - "#for slot in slots:\n", - "# for area in areas:\n", - "# bbox = BBox(bbox=area, crs=CRS.WGS84)\n", - "# size = bbox_to_dimensions(bbox, resolution=resolution)\n", - "# download_function(slot, bbox, size)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "f62d8af8-1c5c-4a83-b888-7205bbe191af", - "metadata": {}, - "outputs": [], - "source": [ - "#size" - ] - }, - { - "cell_type": "code", - "execution_count": 29, + "execution_count": null, "id": "68db3c15-6f94-432e-b315-c329e4251b21", "metadata": { "tags": [] @@ -1852,227 +595,12 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "cb3fa856-a550-4899-844a-e69209bba3ad", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Emptied folder: ..\\laravel_app\\storage\\app\\citrus_brazil_trial\\merged_virtual\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-06\\\\739e5b07b94747cf5518439c03a6a882'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-08\\\\975b5f7dce90c163778e7cd60138b6e0'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-09\\\\560f3d8f33d2e3a11e451da334e2b99d'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-10\\\\147bb96d7ff751a8a5bcddec4650b3c3'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-11\\\\20ceb12e0969527eee2f862a46ad2089'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-12\\\\b280a04ed56a2749afd0531cbc5e2738'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-13\\\\ccb8960db9f078057d9a295c95951f5e'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-14\\\\b4894ef5fc0261d2d2cee3862586d2c9'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-16\\\\bfdccfeef2323f84e7ab7eb57a1f9e0f'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-17\\\\6f57540b83f9f6fc395e93b576ea3a7f'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-19\\\\259507a61f06024282a9cef7e7674843'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-20\\\\455f6fa8b835a94c7df4a99dc78aa5cd'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-21\\\\ba46a7de1a6e50d7b7019cf72bd5b042'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-22\\\\b83412c909857fe292e6f08d6efc83f8'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-23\\\\473530acf397c287242c91e00a673a6a'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-24\\\\75e8ef5602fd227d5f4cf2f49a4192dc'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-25\\\\9e1dc988b59129df6b4b8e0a5c71386c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-26\\\\45a8c237a74a0e3c26ef755caed0a980'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-27\\\\5d807380b12eae6b64523f283cd03132'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-29\\\\f300818abe064b39e19cebcfa9272f08'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-04-30\\\\536ec3dbb365b902374558b0e18fd86d'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-02\\\\f1a6fd087df19a79b1b79d3488323fc6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-03\\\\97620c35129411c4bbac64f5a54502cc'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-05\\\\fd91b61b5108fb2153973e07449bf94c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-07\\\\f44ace4ff332d7769a438329579fb90c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-08\\\\52a48086f41bc3d97b73e449b6a56720'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-11\\\\e1d4d5ba43d35430e921b5a90b30a2c3'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-12\\\\b9cfcf39cab0c7917fe3bd9d2ce1d2dd'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-14\\\\a7693d7974ad917ff6d009545d529fc1'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-18\\\\4471541ca7c0ec4b6f654482458d67fa'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-19\\\\787e72845978852f91ba3d751e894c5a'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-20\\\\a5c34eb398fe87de72bbb73216351f68'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-21\\\\8a5d080091874816e49e7acb76f345b2'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-22\\\\cb221b5d5cea693db56facc2b928a3a3'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-23\\\\387620e1283d8f08640783ca83f534a6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-25\\\\cee94abac76a87374e03313b95f9c24a'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-26\\\\02f7a7f40181ffdeddcdccbc4c3279a6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-27\\\\73bd81f36d028a45cca3c96f8cc0e039'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-28\\\\602ca22cd4e7e087ea9b3192b1c69f3f'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-29\\\\b0da02900f7396f48e32c4f3a28de4a5'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-05-30\\\\f1324a8077a10d4bb13424610788c275'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-01\\\\727173997afb53e9b7e67c3a96420c5e'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-02\\\\431240d39b4adf4317cac44dea9e0c58'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-03\\\\ee7fdaf915f7974d098c2e21c2576d69'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-04\\\\4e66468bdadeb9097ed547a91d55ea5f'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-05\\\\fee223cc34c83bf00cf7953857e9ee85'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-06\\\\4b043cfa6363838e81f55ba0cfdee167'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-07\\\\5096cc51ba94577abb2dd56204381673'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-08\\\\72edfa44afb0b87de66c79d70f89e848'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-10\\\\04bda6ff00521d02f1474224e9590230'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-11\\\\fcb7088d43f6c25a6b488bbdcda62652'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-12\\\\59fa3ab0fbfd363ab8af4a8949141ee7'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-13\\\\6dbbe42edce79f12eae04ff93f1c861e'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-14\\\\8509758460f42d43df3cecf7bba1ecb7'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-15\\\\19e1fdb2014e28baa9bd367842b1a2c7'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-17\\\\707db03584d3ce6d740d49e4df0681fd'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-19\\\\259fa487fd8b327c59f11affc0ec0aa4'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-20\\\\164a8412a0ade5cb1dc29074811588be'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-21\\\\d2a28a1011f6dbdbf9976d2c82e55590'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-22\\\\5cd42d881b4c6cbe6bc7f9fa43cf540a'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-24\\\\156f0d2c5d34a3d724b43df2ad6cb973'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-25\\\\3fc88633503c581a975af68236edaa54'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-26\\\\9b3946ef6cfb9fb76d77da5a7196675f'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-27\\\\b0dd9d246b22a37f695803816f6f693f'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-28\\\\d0bc816e07abd36dd02f2c6a0a58cefb'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-29\\\\d2efc6fd3426b30c8328392b73628404'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-06-30\\\\04aae5de5aa03c237317422abc25fd9c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-01\\\\c9fba90cedd484b9b9f1c2324556bad7'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-02\\\\68ea947d4597389586bc6273f2a44b29'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-03\\\\559502e5559f2d0dd6cd4ea58dfe23d4'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-04\\\\7fabe639423539109c3bf5a4089b30c8'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-05\\\\9ad0525f06dcda56f62fb8ebafe25f7a'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-06\\\\6fd763985cebafa05c162140fb75e5e3'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-07\\\\2f945cf98f4e106b16c82c39381814a4'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-08\\\\031662b95ebdfc245d60013866567076'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-09\\\\83900b3c79f0ece952d44caed5d27eb6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-10\\\\3ab5697089b8308647f90c5899a9d825'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-11\\\\cc28299397fd469453e6a95ea3104305'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-12\\\\cb28d70945f82724d4bcf657e01c12d6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-13\\\\b96a047c7961abed4df5351eab0cfce5'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-14\\\\9f977425569ef08fc65037e0a748a1b6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-15\\\\9a4f6d8cf9b3be5c4277fe97ba9f0ba9'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-16\\\\484bb07688adfd179745e1d9e7a4dbd1'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-17\\\\c4815b7ec2435e19ca41cf908981d2e6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-18\\\\33541c458f08474e1c22962ac663ee9e'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-19\\\\0019559d9bb3a0cf0a716a2904db2e03'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-21\\\\a632b8a7397a05ffcc0a3e6d6764dbf8'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-22\\\\5e00cf0ca48e8d9605ecb22ab09219e9'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-23\\\\8f31dacd81b7cf160767f0cde76be917'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-24\\\\61421803929083f01c133288807d73b6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-25\\\\754c771ef8d2219327383c327f7b4829'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-26\\\\2c0d09eeb5da33d7e698b0c91316b6ee'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-28\\\\8541cee9eb7b6ca72362798f240ea780'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-29\\\\bbd3c282fe4b53e83f56289205a704a2'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-30\\\\cdf6a64b217b227f3b0b5f015ae6951c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-07-31\\\\52929cc81e61d51267e650716343c115'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-01\\\\515a4d976def93f48d39a147b221826c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-02\\\\e324e6602fe4dbc0b5e1e5d12f9b6b59'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-03\\\\23be832a69cf8223e058530eb3be82c7'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-04\\\\74653f1f39ac498f32dab3cecf42ed0a'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-05\\\\f4a69ff1f3899431b89a79ac2fdbf446'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-06\\\\38dd27e2a1a3d2034c2f082a6656090c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-07\\\\1e203b729661a0360592c33fca6cd245'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-09\\\\f08659146c600b286e8c08416cd54527'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-11\\\\df73acf64acc910463e4c54a4fbec034'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-12\\\\bd7890f7d8dae834fb4df6f7c207eb3f'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-14\\\\fcc9d444d86baa4989d3de105e152e4c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-15\\\\aa0ae5c9fbc0ec64b3da409732fbf65d'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-18\\\\471209329f6113ec188ddf4331ed5e11'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-20\\\\fd1212d01f9dc4899e8f1ceff23e269a'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-21\\\\e4dc51736b1308d87b2d3c12d114b5cd'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-22\\\\ca6a8f4982e1cd717b89db960b54fd22'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-23\\\\8efdd006ad640fa78036a968db0623ab'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-24\\\\1986d5ed5f08e83ed8fdbb22f988bcb3'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-26\\\\3dec5e43137b622efaee94d71dd94281'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-27\\\\e7b146ede94c81bccb8e52ac30e1e4cc'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-28\\\\a279ebb63b871e5cea8b20acc41a758d'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-29\\\\9a0e8c7e6ad2fa8946407cf888ee6e36'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-30\\\\76b3ee11ddd4301bec65271e5d2cc1e0'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-08-31\\\\3fa3f616aed88719b8b393c445896442'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-01\\\\f56926823b403c93de201a2c427f4741'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-02\\\\b8837e7f231f381aae62e7c54bd7f1fd'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-03\\\\4fe7694ef04a3176d35f609d2de4a565'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-04\\\\40525308a6db366f7e67d500e21f79ab'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-06\\\\6297a2dfece83a51f84b1483a0ac6027'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-08\\\\293c7c568f24c341eb6302d2e0c6bd4e'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-10\\\\e0ea0737c3325bcb8c6071874e384cc8'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-11\\\\1377bb7ef9f59c7c427edefb3b15d5ab'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-12\\\\942b43857c37e506517f46eb65c22806'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-13\\\\8eb10d0cf2e2f524051a439c153fbfee'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-16\\\\b9efd95535f291dbe3ca21ba8243ca1d'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-17\\\\2875f659705afab9f4b98e6c106bfa99'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-18\\\\03a04d6b2936900834b9f1177edd7959'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-19\\\\8502dff904a83eefe4fc3680b6b367fc'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-23\\\\348bd446565e1fa947b47db957c454c6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-24\\\\e46d95e7f2132e6b12eb40f9c5530038'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-25\\\\8c0ee0707f600d15637e652e5d45cace'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-29\\\\ea6df2311779bb919c38eb2290fca6b0'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-09-30\\\\ba7085c508b482af488346761ab18260'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-01\\\\ac34c2afc14c1a95e2e88df24f60337e'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-02\\\\49a6e276b491f80a45795a81c6e90039'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-04\\\\8390c88d3d3251e4303341aba06f9707'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-05\\\\fea4a86d3bed4e9bd07986859b012d53'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-06\\\\87907b967b4b8d32cfdb6d9c2fe4751c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-08\\\\5c615b1bac43c34351ad45653d669b98'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-12\\\\8ca9dd2605e49ccdbd241b82238360b7'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-14\\\\67f1dc22b749e88a87527b48412e76bf'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-15\\\\b6223ee2ed148c5902bb96393e4e73a6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-16\\\\1e9dd526e788c06a5ba8376ba8180f5c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-17\\\\705c68cbdbd35e3ac9c5a1f2d2052a0f'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-20\\\\734c998cdfe4421c8c524becc2e62e74'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-22\\\\e109ceb686077f31f4498d7f95ef918f'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-24\\\\a30eacc0b1ced2250dabe3612439a0a6'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-25\\\\cafc3e9608059b610a4cf45887d76296'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-26\\\\54ec6bc3a8b42f6e19121c897c14d80c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-29\\\\ed19b3c473779f35015d461782dc7502'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-10-30\\\\e9866d7f4f8e947302a98f241e1bc345'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-01\\\\ada9c220e25aec789a3c5b8209722317'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-04\\\\a2f7f051f807fd5cc7620eb8f43ee607'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-07\\\\e9f688b986ce11a4847ec1103402cc28'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-08\\\\3d681376c072b7f39e885c56721a04d1'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-10\\\\92b0866881dc662cb857ee06caba95c7'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-12\\\\b93305b65052f431a246117009a99c83'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-13\\\\559fa65e67ed5d242b892113813a1242'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-15\\\\92c9e12455ad29b372b9743ebac042c9'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-16\\\\d3e8c176deb925bb7331beb9015026fa'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-18\\\\9d4e7e3d434995d7c4e63f13f56234f4'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-19\\\\c92bb0d52c7faca33726dadc56a31a44'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-20\\\\6f90989f438dfc1a6e88e2198075bc51'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-21\\\\5c0c6cac9862bf439441f0598bc9203d'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-22\\\\39d4a42d640a6046f8a4b34a8e9e9734'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-23\\\\2e313eb93aa41b4e5bc9e7f25df9985b'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-24\\\\7b4f2ffadb5c491ebb38ca29277ab016'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-25\\\\ad43bdf60b4e7c8ec2369d1f1c8ede43'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-26\\\\7cfc83d40ec8c2f8f4d7adb31ed2e0d9'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-27\\\\50c1eea195361bf993e2685d19d35ade'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-28\\\\eb9a4cc3c0067b596a0a9a5949c3f19c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-29\\\\e7c19e7b3359358a7c4a6589f878aad0'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-11-30\\\\b6647e602306d61d65a891c50e91a4d2'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-03\\\\4a9a18f95f9cf64c92c43a9dde331336'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-07\\\\de7d4cb14f1f74e0e857a6c340d0905c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-08\\\\ca82f3cfd718e41aeb222b6237168f5c'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-09\\\\7d06c7d26b6a500405c975dda7cee319'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-10\\\\ae06916f2758c2284d0b1ca845da69cc'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-11\\\\6c2aeee92347d79677770b052f1a2445'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-12\\\\306e973ac37d64c91e6a18a03daca6c3'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-14\\\\656c06b7e0173fd92477892e421b10b4'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-15\\\\06520486eb087effca3ad61d41f09667'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-16\\\\96f36a2e9995383187bfa8dd5bee2f6e'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-17\\\\6d1da5751002a53c3ca7a4ffd49e99e8'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-18\\\\00b6448cc17cccba09729e1d6f5449ec'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-20\\\\6e568ab8d5ce58ed0bfb242475994476'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-21\\\\5847c2d63d4b08fea81710e0e0fedf9b'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-22\\\\2e96f499973a0a72ef385287f947d80b'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-24\\\\53e598be77365bc2c56a94fd311c6cc7'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-25\\\\64ec7956bf74d044aa44ad065291d624'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-27\\\\e3018fc1bf8e77eb078e0e19e6a01977'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2022-12-31\\\\fdd063ba5f909a3c619dde4b44192bcc'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2023-01-02\\\\654936769fdd8ef3e99220fcfe71cfcf'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2023-01-07\\\\8e97e5f0e238177223fd586bb0737b2a'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2023-01-08\\\\6d229ce25af24ff37cfa7b54fd916156'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2023-01-09\\\\dd9743b5c2e8ab6a2223f310f1508023'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2023-01-12\\\\7a1c456f7475a95400e79eec68277e73'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2023-01-13\\\\3a7b86d2565784dc978cd7f53ef45d71'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2023-01-15\\\\bf1ae2bc023232e918cc2afa8b289b25'\n", - "Error: [WinError 5] Toegang geweigerd: '..\\\\laravel_app\\\\storage\\\\app\\\\citrus_brazil_trial\\\\single_images\\\\2023-01-16\\\\71076bd8146337f70d93822b6cb02155'\n", - "Emptied folder: ..\\laravel_app\\storage\\app\\citrus_brazil_trial\\single_images\n" - ] - } - ], + "outputs": [], "source": [ "# List of folder names\n", "\n", @@ -2104,14 +632,6 @@ "# Call the function to empty folders only if the 'run' parameter is set to True\n", "empty_folders(folders_to_empty, run=empty_folder_question)\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3f91f490", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/python_app/planet_download_with_ocm.ipynb b/python_app/planet_download_with_ocm.ipynb new file mode 100644 index 0000000..68d1b99 --- /dev/null +++ b/python_app/planet_download_with_ocm.ipynb @@ -0,0 +1,1097 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bee51aa9", + "metadata": {}, + "source": [ + "# Planet Data Download & Processing with OmniCloudMask\n", + "\n", + "This notebook extends the functionality of the original `planet_download.ipynb` by incorporating OmniCloudMask (OCM) for improved cloud and shadow detection in PlanetScope imagery. OCM is a state-of-the-art cloud masking tool that was originally trained on Sentinel-2 data but generalizes exceptionally well to PlanetScope imagery.\n", + "\n", + "## Key Features Added:\n", + "- OmniCloudMask integration for advanced cloud and shadow detection\n", + "- Comparison visualization between standard UDM masks and OCM masks\n", + "- Options for both local processing and direct integration with SentinelHub\n", + "- Support for batch processing multiple images" + ] + }, + { + "cell_type": "markdown", + "id": "6e8cbe80", + "metadata": {}, + "source": [ + "## 1. Load packages and connect to SentinelHub\n", + "First, we'll install required packages and import dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "88d787b3", + "metadata": {}, + "outputs": [], + "source": [ + "# Standard packages from original notebook\n", + "import os\n", + "import json\n", + "import datetime\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from pathlib import Path\n", + "from osgeo import gdal\n", + "\n", + "from sentinelhub import MimeType, CRS, BBox, SentinelHubRequest, SentinelHubDownloadClient, \\\n", + " DataCollection, bbox_to_dimensions, DownloadRequest, SHConfig, BBoxSplitter, read_data, Geometry, SentinelHubCatalog\n", + "\n", + "import time\n", + "import shutil\n", + "import geopandas as gpd\n", + "from shapely.geometry import MultiLineString, MultiPolygon, Polygon, box, shape\n", + "\n", + "# Install OmniCloudMask if not present\n", + "# Uncomment these lines to install dependencies\n", + "# %pip install omnicloudmask rasterio" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "967d917d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OmniCloudMask successfully loaded\n" + ] + } + ], + "source": [ + "# Import OmniCloudMask after installation\n", + "try:\n", + " from omnicloudmask import predict_from_array, load_multiband, predict_from_load_func\n", + " from functools import partial\n", + " import rasterio as rio\n", + " HAS_OCM = True\n", + " print(\"OmniCloudMask successfully loaded\")\n", + "except ImportError:\n", + " print(\"OmniCloudMask not installed. Run the cell above to install it or install manually with pip.\")\n", + " HAS_OCM = False" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "39bd6361", + "metadata": {}, + "outputs": [], + "source": [ + "# Configure SentinelHub connection\n", + "config = SHConfig()\n", + "config.sh_client_id = '1a72d811-4f0e-4447-8282-df09608cff44'\n", + "config.sh_client_secret = 'FcBlRL29i9ZmTzhmKTv1etSMFs5PxSos'\n", + "\n", + "catalog = SentinelHubCatalog(config=config)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "99f4f255", + "metadata": {}, + "outputs": [], + "source": [ + "# Configure BYOC data collection\n", + "collection_id = 'c691479f-358c-46b1-b0f0-e12b70a9856c'\n", + "byoc = DataCollection.define_byoc(\n", + " collection_id,\n", + " name='planet_data2',\n", + " is_timeless=True)" + ] + }, + { + "cell_type": "markdown", + "id": "04ad9f39", + "metadata": {}, + "source": [ + "## 2. Configure project settings" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "672bd92c", + "metadata": {}, + "outputs": [], + "source": [ + "# Project selection\n", + "project = 'chemba' # Change this to your project name\n", + "\n", + "# Number of days to process\n", + "days = 30\n", + "\n", + "# Set this to True to delete intermediate files after processing\n", + "empty_folder_question = True\n", + "\n", + "# Output directories setup\n", + "BASE_PATH = Path('../laravel_app/storage/app') / os.getenv('PROJECT_DIR', project) \n", + "BASE_PATH_SINGLE_IMAGES = Path(BASE_PATH / 'single_images')\n", + "OCM_MASKS_DIR = Path(BASE_PATH / 'ocm_masks') # Directory for OmniCloudMask results\n", + "folder_for_merged_tifs = str(BASE_PATH / 'merged_tif')\n", + "folder_for_virtual_raster = str(BASE_PATH / 'merged_virtual')\n", + "geojson_file = Path(BASE_PATH /'Data'/ 'pivot.geojson')\n", + "\n", + "# Create directories if they don't exist\n", + "for directory in [BASE_PATH_SINGLE_IMAGES, OCM_MASKS_DIR, \n", + " Path(folder_for_merged_tifs), Path(folder_for_virtual_raster)]:\n", + " directory.mkdir(exist_ok=True, parents=True)" + ] + }, + { + "cell_type": "markdown", + "id": "a69df5ab", + "metadata": {}, + "source": [ + "## 3. Define OmniCloudMask Functions\n", + "\n", + "Here we implement the functionality to use OmniCloudMask for cloud/shadow detection" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "51f33368", + "metadata": {}, + "outputs": [], + "source": [ + "def process_with_ocm(image_path, output_dir=None, save_mask=True, resample_res=10):\n", + " \"\"\"\n", + " Process a PlanetScope image with OmniCloudMask\n", + " \n", + " Parameters:\n", + " -----------\n", + " image_path : str or Path\n", + " Path to the PlanetScope image (TIFF format)\n", + " output_dir : str or Path, optional\n", + " Directory to save the mask, if None, uses same directory as image\n", + " save_mask : bool, default=True\n", + " Whether to save the mask to disk\n", + " resample_res : int, default=10\n", + " Resolution in meters to resample the image to (OCM works best at 10m)\n", + " \n", + " Returns:\n", + " --------\n", + " tuple: (mask_array, profile)\n", + " The cloud/shadow mask as a numpy array and the rasterio profile\n", + " \"\"\"\n", + " if not HAS_OCM:\n", + " print(\"OmniCloudMask not available. Please install with pip install omnicloudmask\")\n", + " return None, None\n", + " \n", + " # Ensure image_path is a Path object\n", + " image_path = Path(image_path)\n", + " \n", + " # If no output directory specified, use same directory as image\n", + " if output_dir is None:\n", + " output_dir = image_path.parent\n", + " else:\n", + " output_dir = Path(output_dir)\n", + " output_dir.mkdir(exist_ok=True, parents=True)\n", + " \n", + " # Define output path for mask\n", + " mask_path = output_dir / f\"{image_path.stem}_ocm_mask.tif\"\n", + " \n", + " try:\n", + " # For PlanetScope 4-band images, bands are [B,G,R,NIR]\n", + " # We need [R,G,NIR] for OmniCloudMask in this order\n", + " # Set band_order=[3, 2, 4] for the standard 4-band PlanetScope imagery\n", + " band_order = [3, 2, 4] # For 4-band images: [R,G,NIR]\n", + " \n", + " # Load and resample image\n", + " print(f\"Loading image: {image_path}\")\n", + " rgn_data, profile = load_multiband(\n", + " input_path=image_path,\n", + " resample_res=resample_res,\n", + " band_order=band_order\n", + " )\n", + " \n", + " # Generate cloud and shadow mask\n", + " print(\"Applying OmniCloudMask...\")\n", + " prediction = predict_from_array(rgn_data)\n", + " \n", + " # Save the mask if requested\n", + " if save_mask:\n", + " profile.update(count=1, dtype='uint8')\n", + " with rio.open(mask_path, 'w', **profile) as dst:\n", + " dst.write(prediction.astype('uint8'), 1)\n", + " print(f\"Saved mask to: {mask_path}\")\n", + " \n", + " # Summary of detected features\n", + " n_total = prediction.size\n", + " n_clear = np.sum(prediction == 0)\n", + " n_thick = np.sum(prediction == 1)\n", + " n_thin = np.sum(prediction == 2)\n", + " n_shadow = np.sum(prediction == 3)\n", + " \n", + " print(f\"OCM Classification Results:\")\n", + " print(f\" Clear pixels: {n_clear} ({100*n_clear/n_total:.1f}%)\")\n", + " print(f\" Thick clouds: {n_thick} ({100*n_thick/n_total:.1f}%)\")\n", + " print(f\" Thin clouds: {n_thin} ({100*n_thin/n_total:.1f}%)\")\n", + " print(f\" Cloud shadows: {n_shadow} ({100*n_shadow/n_total:.1f}%)\")\n", + " \n", + " return prediction, profile\n", + " \n", + " except Exception as e:\n", + " print(f\"Error processing image with OmniCloudMask: {str(e)}\")\n", + " return None, None" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "bac2f620", + "metadata": {}, + "outputs": [], + "source": [ + "def apply_ocm_mask_to_image(image_path, mask_array, output_path=None):\n", + " \"\"\"\n", + " Apply an OmniCloudMask to a Planet image and save the masked version\n", + " \n", + " Parameters:\n", + " -----------\n", + " image_path : str or Path\n", + " Path to the input image\n", + " mask_array : numpy.ndarray\n", + " The cloud/shadow mask from OmniCloudMask\n", + " output_path : str or Path, optional\n", + " Path to save the masked image, if None, uses image_path with '_masked' suffix\n", + " \n", + " Returns:\n", + " --------\n", + " str: Path to the masked image\n", + " \"\"\"\n", + " image_path = Path(image_path)\n", + " \n", + " if output_path is None:\n", + " output_path = image_path.parent / f\"{image_path.stem}_masked.tif\"\n", + " \n", + " try:\n", + " # Open the original image\n", + " with rio.open(image_path) as src:\n", + " data = src.read()\n", + " profile = src.profile.copy()\n", + " \n", + " # Check dimensions match or make them match\n", + " if data.shape[1:] != mask_array.shape:\n", + " # Need to resample the mask\n", + " from rasterio.warp import reproject, Resampling\n", + " # TODO: Implement resampling if needed\n", + " print(\"Warning: Mask and image dimensions don't match\")\n", + " \n", + " # Create a binary mask (0 = cloud/shadow, 1 = clear)\n", + " # OmniCloudMask: 0=clear, 1=thick cloud, 2=thin cloud, 3=shadow\n", + " binary_mask = np.ones_like(mask_array)\n", + " binary_mask[mask_array > 0] = 0 # Set non-clear pixels to 0\n", + " \n", + " # Apply the mask to all bands\n", + " masked_data = data.copy()\n", + " for i in range(data.shape[0]):\n", + " # Where mask is 0, set the pixel to nodata\n", + " masked_data[i][binary_mask == 0] = profile.get('nodata', 0)\n", + " \n", + " # Write the masked image\n", + " with rio.open(output_path, 'w', **profile) as dst:\n", + " dst.write(masked_data)\n", + " \n", + " print(f\"Masked image saved to: {output_path}\")\n", + " return str(output_path)\n", + " \n", + " except Exception as e:\n", + " print(f\"Error applying mask to image: {str(e)}\")\n", + " return None" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "ad6770ac", + "metadata": {}, + "outputs": [], + "source": [ + "def process_all_images_with_ocm(directory, output_dir=None, pattern=\"*.tif\"):\n", + " \"\"\"\n", + " Process all images in a directory with OmniCloudMask\n", + " \n", + " Parameters:\n", + " -----------\n", + " directory : str or Path\n", + " Directory containing PlanetScope images\n", + " output_dir : str or Path, optional\n", + " Directory to save results, defaults to a subfolder of input directory\n", + " pattern : str, default=\"*.tif\"\n", + " Glob pattern to match image files\n", + " \n", + " Returns:\n", + " --------\n", + " list: Paths to processed images\n", + " \"\"\"\n", + " directory = Path(directory)\n", + " \n", + " if output_dir is None:\n", + " output_dir = directory / \"ocm_processed\"\n", + " else:\n", + " output_dir = Path(output_dir)\n", + " \n", + " output_dir.mkdir(exist_ok=True, parents=True)\n", + " \n", + " # Find all matching image files\n", + " image_files = list(directory.glob(pattern))\n", + " \n", + " if not image_files:\n", + " print(f\"No files matching pattern '{pattern}' found in {directory}\")\n", + " return []\n", + " \n", + " print(f\"Found {len(image_files)} images to process\")\n", + " processed_images = []\n", + " \n", + " # Process each image\n", + " for img_path in image_files:\n", + " print(f\"\\nProcessing: {img_path.name}\")\n", + " mask_array, profile = process_with_ocm(img_path, output_dir=output_dir)\n", + " \n", + " if mask_array is not None:\n", + " # Apply mask to create cloud-free image\n", + " output_path = output_dir / f\"{img_path.stem}_masked.tif\"\n", + " masked_path = apply_ocm_mask_to_image(img_path, mask_array, output_path)\n", + " if masked_path:\n", + " processed_images.append(masked_path)\n", + " \n", + " return processed_images" + ] + }, + { + "cell_type": "markdown", + "id": "46e34d74", + "metadata": {}, + "source": [ + "## 4. Define functions from the original notebook (modified for OCM integration)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "85e07fa8", + "metadata": {}, + "outputs": [], + "source": [ + "# Define evalscripts (from original notebook)\n", + "\n", + "# Original evalscript without cloud/shadow detection (for comparison)\n", + "evalscript_original = \"\"\"\n", + " //VERSION=3\n", + " function setup() {\n", + " return {\n", + " input: [{\n", + " bands: [\"red\", \"green\", \"blue\", \"nir\", \"udm1\"]\n", + " }],\n", + " output: {\n", + " bands: 4,\n", + " sampleType: \"FLOAT32\"\n", + " }\n", + " };\n", + " }\n", + "\n", + " function evaluatePixel(sample) {\n", + " // Scale the bands\n", + " var scaledBlue = 2.5 * sample.blue / 10000;\n", + " var scaledGreen = 2.5 * sample.green / 10000;\n", + " var scaledRed = 2.5 * sample.red / 10000;\n", + " var scaledNIR = 2.5 * sample.nir / 10000;\n", + " \n", + " // Only use udm1 mask (Planet's usable data mask)\n", + " if (sample.udm1 == 0) {\n", + " return [scaledRed, scaledGreen, scaledBlue, scaledNIR];\n", + " } else {\n", + " return [NaN, NaN, NaN, NaN];\n", + " }\n", + " }\n", + "\"\"\"\n", + "\n", + "# Placeholder for code to be replaced by OCM-processed imagery later\n", + "evalscript_true_color = evalscript_original" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "9dee95dd", + "metadata": {}, + "outputs": [], + "source": [ + "def get_true_color_request_day(time_interval, bbox, size):\n", + " \"\"\"Request with original evalscript (will be replaced by OCM results later)\"\"\"\n", + " return SentinelHubRequest(\n", + " evalscript=evalscript_true_color,\n", + " input_data=[\n", + " SentinelHubRequest.input_data(\n", + " data_collection=DataCollection.planet_data2,\n", + " time_interval=(time_interval, time_interval)\n", + " )\n", + " ],\n", + " responses=[\n", + " SentinelHubRequest.output_response('default', MimeType.TIFF)\n", + " ],\n", + " bbox=bbox,\n", + " size=size,\n", + " config=config,\n", + " data_folder=str(BASE_PATH_SINGLE_IMAGES / time_interval),\n", + " )\n", + "\n", + "def get_original_request_day(time_interval, bbox, size):\n", + " \"\"\"Request with Planet UDM-only mask (for comparison)\"\"\"\n", + " return SentinelHubRequest(\n", + " evalscript=evalscript_original,\n", + " input_data=[\n", + " SentinelHubRequest.input_data(\n", + " data_collection=DataCollection.planet_data2,\n", + " time_interval=(time_interval, time_interval)\n", + " )\n", + " ],\n", + " responses=[\n", + " SentinelHubRequest.output_response('default', MimeType.TIFF)\n", + " ],\n", + " bbox=bbox,\n", + " size=size,\n", + " config=config,\n", + " )\n", + "\n", + "def download_function(slot, bbox, size):\n", + " \"\"\"Download imagery for a given date and bbox\"\"\"\n", + " list_of_requests = [get_true_color_request_day(slot, bbox, size)]\n", + " list_of_requests = [request.download_list[0] for request in list_of_requests]\n", + " data = SentinelHubDownloadClient(config=config).download(list_of_requests, max_threads=15)\n", + " print(f'Image downloaded for {slot} and bbox {str(bbox)}')\n", + " time.sleep(.1)\n", + " \n", + "def merge_files(slot):\n", + " \"\"\"Merge downloaded tiles into a single image\"\"\"\n", + " # Get all response.tiff files\n", + " slot_folder = Path(BASE_PATH_SINGLE_IMAGES / slot)\n", + " if not slot_folder.exists():\n", + " raise ValueError(f\"Folder not found: {slot_folder}\")\n", + " \n", + " file_list = [f\"{x}/response.tiff\" for x in slot_folder.iterdir() if Path(f\"{x}/response.tiff\").exists()]\n", + " \n", + " if not file_list:\n", + " raise ValueError(f\"No response.tiff files found in {slot_folder}\")\n", + " \n", + " print(f\"Found {len(file_list)} files to merge\")\n", + " \n", + " folder_for_merged_tifs = str(BASE_PATH / 'merged_tif' / f\"{slot}.tif\")\n", + " folder_for_virtual_raster = str(BASE_PATH / 'merged_virtual' / f\"merged{slot}.vrt\")\n", + " \n", + " # Make sure parent directories exist\n", + " Path(folder_for_merged_tifs).parent.mkdir(exist_ok=True, parents=True)\n", + " Path(folder_for_virtual_raster).parent.mkdir(exist_ok=True, parents=True)\n", + "\n", + " try:\n", + " # Create a virtual raster\n", + " print(f\"Building VRT from {len(file_list)} files\")\n", + " vrt_all = gdal.BuildVRT(folder_for_virtual_raster, file_list)\n", + " \n", + " if vrt_all is None:\n", + " raise ValueError(f\"Failed to create virtual raster: {folder_for_virtual_raster}\")\n", + " \n", + " # Write VRT to disk\n", + " vrt_all.FlushCache()\n", + " \n", + " # Convert to GeoTIFF\n", + " print(f\"Translating VRT to GeoTIFF: {folder_for_merged_tifs}\")\n", + " result = gdal.Translate(\n", + " folder_for_merged_tifs,\n", + " folder_for_virtual_raster,\n", + " xRes=10,\n", + " yRes=10,\n", + " resampleAlg=\"bilinear\" # or \"nearest\" if you prefer\n", + " )\n", + " \n", + " if result is None:\n", + " raise ValueError(f\"Failed to translate VRT to GeoTIFF: {folder_for_merged_tifs}\")\n", + " \n", + " # Make sure the file was created\n", + " if not Path(folder_for_merged_tifs).exists():\n", + " raise ValueError(f\"Output GeoTIFF file was not created: {folder_for_merged_tifs}\")\n", + " \n", + " return folder_for_merged_tifs\n", + " except Exception as e:\n", + " print(f\"Error during merging: {str(e)}\")\n", + " # If we have individual files but merging failed, return the first one as a fallback\n", + " if file_list:\n", + " print(f\"Returning first file as fallback: {file_list[0]}\")\n", + " return file_list[0]\n", + " raise" + ] + }, + { + "cell_type": "markdown", + "id": "d21a132b", + "metadata": {}, + "source": [ + "## 5. Setup date ranges and test data" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "c00fc762", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time windows to process:\n", + "\n", + "2025-04-17\n", + "2025-04-18\n", + "2025-04-19\n", + "...\n", + "2025-05-14\n", + "2025-05-15\n", + "2025-05-16\n" + ] + } + ], + "source": [ + "# Configure date ranges (from original notebook)\n", + "days_needed = int(os.environ.get(\"DAYS\", days))\n", + "date_str = os.environ.get(\"DATE\")\n", + "\n", + "if date_str:\n", + " end = datetime.datetime.strptime(date_str, \"%Y-%m-%d\").date()\n", + "else:\n", + " end = datetime.date.today() \n", + "\n", + "start = end - datetime.timedelta(days=days_needed - 1)\n", + "slots = [(start + datetime.timedelta(days=i)).strftime('%Y-%m-%d') for i in range(days_needed)]\n", + "\n", + "print('Time windows to process:\\n')\n", + "if len(slots) > 10:\n", + " for slot in slots[:3]:\n", + " print(slot)\n", + " print(\"...\")\n", + " for slot in slots[-3:]:\n", + " print(slot)\n", + "else:\n", + " for slot in slots:\n", + " print(slot)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "8947de86", + "metadata": {}, + "outputs": [], + "source": [ + "# For testing, use a specific date with known clouds/shadows\n", + "# Comment this out to process all dates defined above\n", + "slots = ['2024-10-22'] # Change to a date with clouds/shadows in your area" + ] + }, + { + "cell_type": "markdown", + "id": "ede9e761", + "metadata": {}, + "source": [ + "## 6. Load geospatial data and prepare for processing" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "485e5fa1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Area bounding box: BBox(((-47.09879025717693, -22.67132809994226), (-47.09188307701802, -22.66813642658124)), crs=CRS('4326'))\n" + ] + } + ], + "source": [ + "# Load field boundaries and prepare bounding boxes\n", + "geo_json = gpd.read_file(str(geojson_file))\n", + "geometries = [Geometry(geometry, crs=CRS.WGS84) for geometry in geo_json.geometry]\n", + "shapely_geometries = [geometry.geometry for geometry in geometries]\n", + "\n", + "# Split area into manageable bounding boxes\n", + "bbox_splitter = BBoxSplitter(\n", + " shapely_geometries, CRS.WGS84, (1, 1), reduce_bbox_sizes=True\n", + ")\n", + "print(\"Area bounding box:\", bbox_splitter.get_area_bbox().__repr__())\n", + "bbox_list = bbox_splitter.get_bbox_list()\n", + "info_list = bbox_splitter.get_info_list()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "0eb2ccf1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['2024-12-30']\n", + "Total slots: 1\n", + "Available slots: 1\n", + "Excluded slots due to empty dates: 0\n" + ] + } + ], + "source": [ + "# Function to check if images are available for each date\n", + "def is_image_available(date):\n", + " for bbox in bbox_list:\n", + " search_iterator = catalog.search(\n", + " collection=byoc,\n", + " bbox=bbox,\n", + " time=(date, date)\n", + " )\n", + " if len(list(search_iterator)) > 0:\n", + " return True\n", + " return False\n", + "\n", + "# Filter slots to only include dates with available images\n", + "available_slots = [slot for slot in slots if is_image_available(slot)]\n", + "comparison_slots = available_slots[:min(5, len(available_slots))]\n", + "\n", + "print(available_slots)\n", + "print(f\"Total slots: {len(slots)}\")\n", + "print(f\"Available slots: {len(available_slots)}\")\n", + "print(f\"Excluded slots due to empty dates: {len(slots) - len(available_slots)}\")" + ] + }, + { + "cell_type": "markdown", + "id": "d628f797", + "metadata": {}, + "source": [ + "## 7. Download and process images" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "8966f944", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Downloading images for date: 2024-12-30\n", + " Processing bbox 1/1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\sentinelhub\\geometry.py:137: SHDeprecationWarning: Initializing `BBox` objects from `BBox` objects will no longer be possible in future versions.\n", + " return cls._tuple_from_bbox(bbox)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Image downloaded for 2024-12-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\timon\\AppData\\Local\\Temp\\ipykernel_25312\\3091203660.py:43: SHDeprecationWarning: The string representation of `BBox` will change to match its `repr` representation.\n", + " print(f'Image downloaded for {slot} and bbox {str(bbox)}')\n" + ] + } + ], + "source": [ + "# Download images\n", + "resolution = 10 # Using 10m resolution for better OmniCloudMask results\n", + "\n", + "for slot in available_slots:\n", + " print(f\"\\nDownloading images for date: {slot}\")\n", + " \n", + " for i, bbox in enumerate(bbox_list):\n", + " bbox_obj = BBox(bbox=bbox, crs=CRS.WGS84)\n", + " size = bbox_to_dimensions(bbox_obj, resolution=resolution)\n", + " print(f\" Processing bbox {i+1}/{len(bbox_list)}\")\n", + " download_function(slot, bbox_obj, size)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "43a8b55e", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\sentinelhub\\geometry.py:137: SHDeprecationWarning: Initializing `BBox` objects from `BBox` objects will no longer be possible in future versions.\n", + " return cls._tuple_from_bbox(bbox)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Image downloaded for 2024-12-30 and bbox -47.09879025717693,-22.67132809994226,-47.09188307701802,-22.66813642658124\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\timon\\AppData\\Local\\Temp\\ipykernel_25312\\3091203660.py:43: SHDeprecationWarning: The string representation of `BBox` will change to match its `repr` representation.\n", + " print(f'Image downloaded for {slot} and bbox {str(bbox)}')\n" + ] + } + ], + "source": [ + "resolution = 3\n", + "\n", + "for slot in available_slots:\n", + " for bbox in bbox_list:\n", + " bbox = BBox(bbox=bbox, crs=CRS.WGS84)\n", + " size = bbox_to_dimensions(bbox, resolution=resolution)\n", + " download_function(slot, bbox, size)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "f15f04f3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 2 files to merge\n", + "Building VRT from 2 files\n", + "Translating VRT to GeoTIFF: ..\\laravel_app\\storage\\app\\citrus_brazil_trial\\merged_tif\\2024-12-30.tif\n", + "Error during merging: Failed to translate VRT to GeoTIFF: ..\\laravel_app\\storage\\app\\citrus_brazil_trial\\merged_tif\\2024-12-30.tif\n", + "Returning first file as fallback: ..\\laravel_app\\storage\\app\\citrus_brazil_trial\\single_images\\2024-12-30\\0aeb88ec276c5a05278127eb769d73ec/response.tiff\n" + ] + } + ], + "source": [ + "for slot in available_slots:\n", + " merge_files(slot)" + ] + }, + { + "cell_type": "markdown", + "id": "ee0ae99e", + "metadata": {}, + "source": [ + "## 8. Clean up intermediate files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0fe25a4d", + "metadata": {}, + "outputs": [], + "source": [ + "# Clean up intermediate files if requested\n", + "folders_to_empty = [BASE_PATH / 'merged_virtual', BASE_PATH_SINGLE_IMAGES]\n", + "\n", + "def empty_folders(folders, run=True):\n", + " if not run:\n", + " print(\"Skipping empty_folders function.\")\n", + " return\n", + " \n", + " for folder in folders:\n", + " try:\n", + " for filename in os.listdir(folder):\n", + " file_path = os.path.join(folder, filename)\n", + " try:\n", + " if os.path.isfile(file_path):\n", + " os.unlink(file_path)\n", + " elif os.path.isdir(file_path):\n", + " shutil.rmtree(file_path)\n", + " except Exception as e:\n", + " print(f\"Error: {e}\")\n", + " print(f\"Emptied folder: {folder}\")\n", + " except OSError as e:\n", + " print(f\"Error: {e}\")\n", + "\n", + "# Call the function to empty folders only if requested\n", + "empty_folders(folders_to_empty, run=False) # Change to True if you want to clean up" + ] + }, + { + "cell_type": "markdown", + "id": "25638297", + "metadata": {}, + "source": [ + "## 9. Visualize and compare cloud masks" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "7d3a73e4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processing ..\\laravel_app\\storage\\app\\chemba\\merged_tif\\2024-10-22.tif with c:\\\\Users\\\\timon\\\\Resilience BV\\\\4020 SCane ESA DEMO - Documenten\\\\General\\\\4020 SCDEMO Team\\\\4020 TechnicalData\\\\WP3\\\\smartcane\\\\python_app\\\\planet_ocm_processor.py...\n", + "Input image: ..\\laravel_app\\storage\\app\\chemba\\merged_tif\\2024-10-22.tif\n", + "Output directory: ..\\laravel_app\\storage\\app\\chemba\\ocm_masks\n", + "--- Running gdalinfo for 2024-10-22.tif ---\n", + "--- gdalinfo STDOUT ---\n", + "Driver: GTiff/GeoTIFF\n", + "Files: ..\\laravel_app\\storage\\app\\chemba\\merged_tif\\2024-10-22.tif\n", + "Size is 3605, 2162\n", + "Coordinate System is:\n", + "GEOGCRS[\"WGS 84\",\n", + " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n", + " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n", + " MEMBER[\"World Geodetic System 1984 (G730)\"],\n", + " MEMBER[\"World Geodetic System 1984 (G873)\"],\n", + " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n", + " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n", + " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n", + " MEMBER[\"World Geodetic System 1984 (G2139)\"],\n", + " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n", + " LENGTHUNIT[\"metre\",1]],\n", + " ENSEMBLEACCURACY[2.0]],\n", + " PRIMEM[\"Greenwich\",0,\n", + " ANGLEUNIT[\"degree\",0.0174532925199433]],\n", + " CS[ellipsoidal,2],\n", + " AXIS[\"geodetic latitude (Lat)\",north,\n", + " ORDER[1],\n", + " ANGLEUNIT[\"degree\",0.0174532925199433]],\n", + " AXIS[\"geodetic longitude (Lon)\",east,\n", + " ORDER[2],\n", + " ANGLEUNIT[\"degree\",0.0174532925199433]],\n", + " USAGE[\n", + " SCOPE[\"Horizontal component of 3D system.\"],\n", + " AREA[\"World.\"],\n", + " BBOX[-90,-180,90,180]],\n", + " ID[\"EPSG\",4326]]\n", + "Data axis to CRS axis mapping: 2,1\n", + "Origin = (34.883117060422094,-17.291731714592061)\n", + "Pixel Size = (0.000027942347249,-0.000027653607237)\n", + "Metadata:\n", + " AREA_OR_POINT=Area\n", + "Image Structure Metadata:\n", + " INTERLEAVE=PIXEL\n", + "Corner Coordinates:\n", + "Upper Left ( 34.8831171, -17.2917317) ( 34d52'59.22\"E, 17d17'30.23\"S)\n", + "Lower Left ( 34.8831171, -17.3515188) ( 34d52'59.22\"E, 17d21' 5.47\"S)\n", + "Upper Right ( 34.9838492, -17.2917317) ( 34d59' 1.86\"E, 17d17'30.23\"S)\n", + "Lower Right ( 34.9838492, -17.3515188) ( 34d59' 1.86\"E, 17d21' 5.47\"S)\n", + "Center ( 34.9334831, -17.3216253) ( 34d56' 0.54\"E, 17d19'17.85\"S)\n", + "Band 1 Block=3605x1 Type=Byte, ColorInterp=Gray\n", + "Band 2 Block=3605x1 Type=Byte, ColorInterp=Undefined\n", + "Band 3 Block=3605x1 Type=Byte, ColorInterp=Undefined\n", + "Band 4 Block=3605x1 Type=Byte, ColorInterp=Undefined\n", + "\n", + "--- Attempting to run OCM processor for 2024-10-22.tif ---\n", + "--- Script STDOUT ---\n", + "--- Starting OCM processing for 2024-10-22.tif ---\n", + "Input 3m image (absolute): C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\merged_tif\\2024-10-22.tif\n", + "Output base directory (absolute): C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\n", + "Intermediate 10m image path: C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\\intermediate_ocm_files\\2024-10-22_10m.tif\n", + "Resampling C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\merged_tif\\2024-10-22.tif to (10, 10)m resolution -> C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\\intermediate_ocm_files\\2024-10-22_10m.tif\n", + "Reprojected raster saved to: C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\\intermediate_ocm_files\\2024-10-22_10m_reprojected.tif\n", + "Successfully resampled image saved to: C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\\intermediate_ocm_files\\2024-10-22_10m.tif\n", + "Loading 10m image for OCM: C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\\intermediate_ocm_files\\2024-10-22_10m.tif\n", + "Applying OmniCloudMask...\n", + "Error processing 10m image with OmniCloudMask: Source shape (1, 1, 673, 1078) is inconsistent with given indexes 1\n", + "OCM processing failed. Exiting.\n", + "\n", + "--- Script STDERR ---\n", + "c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\omnicloudmask\\cloud_mask.py:145: UserWarning: Significant no-data areas detected. Adjusting patch size to 336px and overlap to 168px to minimize no-data patches.\n", + " warnings.warn(\n", + "\n", + "Successfully processed 2024-10-22.tif with c:\\\\Users\\\\timon\\\\Resilience BV\\\\4020 SCane ESA DEMO - Documenten\\\\General\\\\4020 SCDEMO Team\\\\4020 TechnicalData\\\\WP3\\\\smartcane\\\\python_app\\\\planet_ocm_processor.py\n", + "--- Script STDOUT ---\n", + "--- Starting OCM processing for 2024-10-22.tif ---\n", + "Input 3m image (absolute): C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\merged_tif\\2024-10-22.tif\n", + "Output base directory (absolute): C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\n", + "Intermediate 10m image path: C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\\intermediate_ocm_files\\2024-10-22_10m.tif\n", + "Resampling C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\merged_tif\\2024-10-22.tif to (10, 10)m resolution -> C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\\intermediate_ocm_files\\2024-10-22_10m.tif\n", + "Reprojected raster saved to: C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\\intermediate_ocm_files\\2024-10-22_10m_reprojected.tif\n", + "Successfully resampled image saved to: C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\\intermediate_ocm_files\\2024-10-22_10m.tif\n", + "Loading 10m image for OCM: C:\\Users\\timon\\Resilience BV\\4020 SCane ESA DEMO - Documenten\\General\\4020 SCDEMO Team\\4020 TechnicalData\\WP3\\smartcane\\laravel_app\\storage\\app\\chemba\\ocm_masks\\intermediate_ocm_files\\2024-10-22_10m.tif\n", + "Applying OmniCloudMask...\n", + "Error processing 10m image with OmniCloudMask: Source shape (1, 1, 673, 1078) is inconsistent with given indexes 1\n", + "OCM processing failed. Exiting.\n", + "\n", + "--- Script STDERR ---\n", + "c:\\Users\\timon\\anaconda3\\Lib\\site-packages\\omnicloudmask\\cloud_mask.py:145: UserWarning: Significant no-data areas detected. Adjusting patch size to 336px and overlap to 168px to minimize no-data patches.\n", + " warnings.warn(\n", + "\n", + "Successfully processed 2024-10-22.tif with c:\\\\Users\\\\timon\\\\Resilience BV\\\\4020 SCane ESA DEMO - Documenten\\\\General\\\\4020 SCDEMO Team\\\\4020 TechnicalData\\\\WP3\\\\smartcane\\\\python_app\\\\planet_ocm_processor.py\n" + ] + } + ], + "source": [ + "import subprocess\n", + "import sys # Added for more detailed error printing\n", + "\n", + "# Path to the Python script\n", + "script_path = r\"c:\\\\Users\\\\timon\\\\Resilience BV\\\\4020 SCane ESA DEMO - Documenten\\\\General\\\\4020 SCDEMO Team\\\\4020 TechnicalData\\\\WP3\\\\smartcane\\\\python_app\\\\planet_ocm_processor.py\"\n", + "\n", + "# Directory containing the recently downloaded images (merged TIFFs)\n", + "images_dir = BASE_PATH / 'merged_tif'\n", + "\n", + "# Output directory for OCM processor (defined in cell 8)\n", + "# OCM_MASKS_DIR should be defined earlier in your notebook, e.g.,\n", + "# OCM_MASKS_DIR = Path(BASE_PATH / 'ocm_masks')\n", + "# OCM_MASKS_DIR.mkdir(exist_ok=True, parents=True) # Ensure it exists\n", + "available_slots = [\"2024-10-22\"] # Change this to the available slots you want to process\n", + "# Run the script for each available slot (date)\n", + "for slot in available_slots:\n", + " image_file = images_dir / f\"{slot}.tif\"\n", + " if image_file.exists():\n", + " print(f\"Processing {image_file} with {script_path}...\")\n", + " print(f\"Input image: {str(image_file)}\")\n", + " print(f\"Output directory: {str(OCM_MASKS_DIR)}\")\n", + " \n", + " try:\n", + " # Run gdalinfo to inspect the image before processing\n", + " print(f\"--- Running gdalinfo for {image_file.name} ---\")\n", + " gdalinfo_result = subprocess.run(\n", + " [\"gdalinfo\", str(image_file)],\n", + " capture_output=True,\n", + " text=True,\n", + " check=True\n", + " )\n", + " print(\"--- gdalinfo STDOUT ---\")\n", + " print(gdalinfo_result.stdout)\n", + " if gdalinfo_result.stderr:\n", + " print(\"--- gdalinfo STDERR ---\")\n", + " print(gdalinfo_result.stderr)\n", + " except subprocess.CalledProcessError as e:\n", + " print(f\"gdalinfo failed for {image_file.name}:\")\n", + " print(\"--- gdalinfo STDOUT ---\")\n", + " print(e.stdout)\n", + " print(\"--- gdalinfo STDERR ---\")\n", + " print(e.stderr)\n", + " # Decide if you want to continue to the next image or stop\n", + " # continue \n", + " except FileNotFoundError:\n", + " print(\"Error: gdalinfo command not found. Make sure GDAL is installed and in your system's PATH.\")\n", + " # Decide if you want to continue or stop\n", + " # break # or continue\n", + " \n", + " print(f\"--- Attempting to run OCM processor for {image_file.name} ---\")\n", + " try:\n", + " # Run the script, passing the image file and OCM_MASKS_DIR as arguments\n", + " process_result = subprocess.run(\n", + " [sys.executable, str(script_path), str(image_file), str(OCM_MASKS_DIR)], \n", + " capture_output=True, # Capture stdout and stderr\n", + " text=True, # Decode output as text\n", + " check=False # Do not raise an exception for non-zero exit codes, we'll check manually\n", + " )\n", + " \n", + " # Print the output from the script\n", + " print(\"--- Script STDOUT ---\")\n", + " print(process_result.stdout)\n", + " \n", + " if process_result.stderr:\n", + " print(\"--- Script STDERR ---\")\n", + " print(process_result.stderr)\n", + " \n", + " if process_result.returncode != 0:\n", + " print(f\"Error: Script {script_path} failed for {image_file.name} with exit code {process_result.returncode}\")\n", + " else:\n", + " print(f\"Successfully processed {image_file.name} with {script_path}\")\n", + " \n", + " except subprocess.CalledProcessError as e:\n", + " # This block will be executed if check=True and the script returns a non-zero exit code\n", + " print(f\"Error running script {script_path} for {image_file.name}:\")\n", + " print(\"--- Script STDOUT ---\")\n", + " print(e.stdout) # stdout from the script\n", + " print(\"--- Script STDERR ---\")\n", + " print(e.stderr) # stderr from the script (this will contain the GDAL error)\n", + " except Exception as e:\n", + " print(f\"An unexpected error occurred while trying to run {script_path} for {image_file.name}: {e}\")\n", + " \n", + " else:\n", + " print(f\"Image file not found: {image_file}\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "7cb00e6a", + "metadata": {}, + "source": [ + "## 10. Understanding OmniCloudMask Results\n", + "\n", + "OmniCloudMask produces a classified raster with these values:\n", + "- **0 = Clear**: No clouds or shadows detected\n", + "- **1 = Thick Cloud**: Dense clouds that completely obscure the ground\n", + "- **2 = Thin Cloud**: Semi-transparent clouds or haze\n", + "- **3 = Shadow**: Cloud shadows on the ground\n", + "\n", + "The masked images have had all non-zero classes (clouds and shadows) removed, which provides cleaner data for analysis of crop conditions. This can significantly improve the accuracy of vegetation indices and other agricultural metrics derived from the imagery.\n", + "\n", + "For more information about OmniCloudMask, visit:\n", + "- GitHub repository: https://github.com/DPIRD-DMA/OmniCloudMask\n", + "- Paper: https://www.sciencedirect.com/science/article/pii/S0034425725000987" + ] + }, + { + "cell_type": "markdown", + "id": "2837be37", + "metadata": {}, + "source": [ + "### 9a. Upsample OCM mask to 3x3m and apply to original high-res image\n", + "\n", + "This step ensures that the OCM cloud/shadow mask (generated at 10x10m) is upsampled to match the original 3x3m PlanetScope image, so the final masked output preserves the native resolution for downstream analysis." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/python_app/planet_ocm_processor.py b/python_app/planet_ocm_processor.py new file mode 100644 index 0000000..ed434f2 --- /dev/null +++ b/python_app/planet_ocm_processor.py @@ -0,0 +1,319 @@ +import os +import argparse +import numpy as np +from pathlib import Path +from osgeo import gdal +import rasterio as rio +from rasterio.enums import Resampling +from rasterio.warp import reproject +from osgeo import osr + +# Attempt to import OmniCloudMask and set a flag +try: + from omnicloudmask import predict_from_array, load_multiband + HAS_OCM = True +except ImportError: + HAS_OCM = False + +def calculate_utm_zone_and_hemisphere(longitude, latitude): + """ + Calculate the UTM zone and hemisphere based on longitude and latitude. + """ + utm_zone = int((longitude + 180) / 6) + 1 + is_southern = latitude < 0 + return utm_zone, is_southern + +def reproject_to_projected_crs(input_path, output_path): + """ + Reprojects a raster to a projected coordinate system (e.g., UTM). + """ + input_ds = gdal.Open(str(input_path)) + if not input_ds: + raise ValueError(f"Failed to open input raster: {input_path}") + + # Get the source spatial reference + source_srs = osr.SpatialReference() + source_srs.ImportFromWkt(input_ds.GetProjection()) + + # Get the geographic coordinates of the image's center + geo_transform = input_ds.GetGeoTransform() + width = input_ds.RasterXSize + height = input_ds.RasterYSize + center_x = geo_transform[0] + (width / 2) * geo_transform[1] + center_y = geo_transform[3] + (height / 2) * geo_transform[5] + + # Calculate the UTM zone and hemisphere dynamically + utm_zone, is_southern = calculate_utm_zone_and_hemisphere(center_x, center_y) + + # Define the target spatial reference + target_srs = osr.SpatialReference() + target_srs.SetWellKnownGeogCS("WGS84") + target_srs.SetUTM(utm_zone, is_southern) + + # Create the warp options + warp_options = gdal.WarpOptions( + dstSRS=target_srs.ExportToWkt(), + format="GTiff" + ) + + # Perform the reprojection + gdal.Warp(str(output_path), input_ds, options=warp_options) + input_ds = None # Close the dataset + print(f"Reprojected raster saved to: {output_path}") + return output_path + +def resample_image(input_path, output_path, resolution=(10, 10), resample_alg="bilinear"): + """ + Resamples a raster to a specified resolution using gdal.Translate. + """ + print(f"Resampling {input_path} to {resolution}m resolution -> {output_path}") + + # Reproject the input image to a projected CRS + reprojected_path = str(Path(output_path).with_name(f"{Path(output_path).stem}_reprojected.tif")) + reproject_to_projected_crs(input_path, reprojected_path) + + # Open the reprojected dataset + input_ds = gdal.Open(reprojected_path) + if not input_ds: + raise ValueError(f"Failed to open reprojected raster: {reprojected_path}") + + # Perform the resampling + result = gdal.Translate( + str(output_path), + input_ds, + xRes=resolution[0], + yRes=resolution[1], + resampleAlg=resample_alg + ) + input_ds = None # Explicitly dereference the GDAL dataset + if result is None: + raise ValueError(f"Failed to resample image to {output_path}") + print(f"Successfully resampled image saved to: {output_path}") + return output_path + +def run_ocm_on_image(image_path_10m, ocm_output_dir, save_mask=True): + """ + Processes a 10m resolution image with OmniCloudMask. + Adapted from process_with_ocm in the notebook. + """ + if not HAS_OCM: + print("OmniCloudMask not available. Please install with: pip install omnicloudmask") + return None, None + + image_path_10m = Path(image_path_10m) + ocm_output_dir = Path(ocm_output_dir) + ocm_output_dir.mkdir(exist_ok=True, parents=True) + + mask_10m_path = ocm_output_dir / f"{image_path_10m.stem}_ocm_mask_10m.tif" + + try: + # Open the image to check dimensions + with rio.open(image_path_10m) as src: + width, height = src.width, src.height + + # Check if the image is too small for OmniCloudMask + if width < 50 or height < 50: + print(f"Warning: Image {image_path_10m} is too small for OmniCloudMask (width: {width}, height: {height}). Skipping.") + return None, None + + # PlanetScope 4-band images are typically [B,G,R,NIR] + # OCM expects [R,G,NIR] for its default model. + # Band numbers for load_multiband are 1-based. + # If original is B(1),G(2),R(3),NIR(4), then R=3, G=2, NIR=4 + band_order = [3, 2, 4] + + print(f"Loading 10m image for OCM: {image_path_10m}") + # load_multiband resamples if resample_res is different from source, + # but here image_path_10m is already 10m. + # We pass resample_res=None to use the image's own resolution. + rgn_data, profile = load_multiband( + input_path=str(image_path_10m), + resample_res=10, # Explicitly set target resolution for OCM + band_order=band_order + ) + + print("Applying OmniCloudMask...") + prediction = predict_from_array(rgn_data) + + if save_mask: + profile.update(count=1, dtype='uint8') + with rio.open(mask_10m_path, 'w', **profile) as dst: + dst.write(prediction.astype('uint8'), 1) + print(f"Saved 10m OCM mask to: {mask_10m_path}") + + # Summary (optional, can be removed for cleaner script output) + n_total = prediction.size + n_clear = np.sum(prediction == 0) + n_thick = np.sum(prediction == 1) + n_thin = np.sum(prediction == 2) + n_shadow = np.sum(prediction == 3) + print(f" OCM: Clear: {100*n_clear/n_total:.1f}%, Thick: {100*n_thick/n_total:.1f}%, Thin: {100*n_thin/n_total:.1f}%, Shadow: {100*n_shadow/n_total:.1f}%") + + return str(mask_10m_path), profile + except Exception as e: + print(f"Error processing 10m image with OmniCloudMask: {str(e)}") + return None, None + + +def upsample_mask_to_3m(mask_10m_path, target_3m_image_path, output_3m_mask_path): + """ + Upsamples a 10m OCM mask to match the 3m target image. + Adapted from upsample_mask_to_highres in the notebook. + """ + print(f"Upsampling 10m mask {mask_10m_path} to 3m, referencing {target_3m_image_path}") + with rio.open(mask_10m_path) as src_mask, rio.open(target_3m_image_path) as src_img_3m: + mask_data_10m = src_mask.read(1) + + img_shape_3m = (src_img_3m.height, src_img_3m.width) + img_transform_3m = src_img_3m.transform + img_crs_3m = src_img_3m.crs + + upsampled_mask_3m_data = np.zeros(img_shape_3m, dtype=mask_data_10m.dtype) + + reproject( + source=mask_data_10m, + destination=upsampled_mask_3m_data, + src_transform=src_mask.transform, + src_crs=src_mask.crs, + dst_transform=img_transform_3m, + dst_crs=img_crs_3m, + resampling=Resampling.nearest + ) + + profile_3m_mask = src_img_3m.profile.copy() + profile_3m_mask.update({ + 'count': 1, + 'dtype': upsampled_mask_3m_data.dtype + }) + + with rio.open(output_3m_mask_path, 'w', **profile_3m_mask) as dst: + dst.write(upsampled_mask_3m_data, 1) + print(f"Upsampled 3m OCM mask saved to: {output_3m_mask_path}") + return str(output_3m_mask_path) + + +def apply_3m_mask_to_3m_image(image_3m_path, mask_3m_path, final_masked_output_path): + """ + Applies an upsampled 3m OCM mask to the original 3m image. + Adapted from apply_upsampled_mask_to_highres in the notebook. + """ + print(f"Applying 3m mask {mask_3m_path} to 3m image {image_3m_path}") + image_3m_path = Path(image_3m_path) + mask_3m_path = Path(mask_3m_path) + final_masked_output_path = Path(final_masked_output_path) + final_masked_output_path.parent.mkdir(parents=True, exist_ok=True) + + try: + with rio.open(image_3m_path) as src_img_3m, rio.open(mask_3m_path) as src_mask_3m: + img_data_3m = src_img_3m.read() + img_profile_3m = src_img_3m.profile.copy() + mask_data_3m = src_mask_3m.read(1) + + if img_data_3m.shape[1:] != mask_data_3m.shape: + print(f"Warning: 3m image shape {img_data_3m.shape[1:]} and 3m mask shape {mask_data_3m.shape} do not match.") + # This should ideally not happen if upsampling was correct. + + # OCM: 0=clear, 1=thick cloud, 2=thin cloud, 3=shadow + # We want to mask out (set to nodata) pixels where OCM is > 0 + binary_mask = np.ones_like(mask_data_3m, dtype=np.uint8) + binary_mask[mask_data_3m > 0] = 0 # 0 for cloud/shadow, 1 for clear + + masked_img_data_3m = img_data_3m.copy() + nodata_val = img_profile_3m.get('nodata', 0) # Use existing nodata or 0 + + for i in range(img_profile_3m['count']): + masked_img_data_3m[i][binary_mask == 0] = nodata_val + + # Ensure dtype of profile matches data to be written + # If original image was float, but nodata is int (0), rasterio might complain + # It's safer to use the original image's dtype for the output. + img_profile_3m.update(dtype=img_data_3m.dtype) + + with rio.open(final_masked_output_path, 'w', **img_profile_3m) as dst: + dst.write(masked_img_data_3m) + + print(f"Final masked 3m image saved to: {final_masked_output_path}") + return str(final_masked_output_path) + + except Exception as e: + print(f"Error applying 3m mask to 3m image: {str(e)}") + return None + + +def main(): + parser = argparse.ArgumentParser(description="Process PlanetScope 3m imagery with OmniCloudMask.") + parser.add_argument("input_3m_image", type=str, help="Path to the input merged 3m PlanetScope GeoTIFF image.") + parser.add_argument("output_dir", type=str, help="Directory to save processed files (10m image, masks, final 3m masked image).") + + args = parser.parse_args() + + try: + # Resolve paths to absolute paths immediately + input_3m_path = Path(args.input_3m_image).resolve(strict=True) + # output_base_dir is the directory where outputs will be saved. + # It should exist when the script is called (created by the notebook). + output_base_dir = Path(args.output_dir).resolve(strict=True) + except FileNotFoundError as e: + print(f"Error: Path resolution failed. Input image or output base directory may not exist or is not accessible: {e}") + return + except Exception as e: + print(f"Error resolving paths: {e}") + return + + # The check for input_3m_path.exists() is now covered by resolve(strict=True) + + # Define intermediate and final file paths using absolute base paths + intermediate_dir = output_base_dir / "intermediate_ocm_files" + intermediate_dir.mkdir(parents=True, exist_ok=True) + + image_10m_path = intermediate_dir / f"{input_3m_path.stem}_10m.tif" + # OCM mask (10m) will be saved inside run_ocm_on_image, in a subdir of intermediate_dir + ocm_mask_output_dir = intermediate_dir / "ocm_10m_mask_output" + + # Upsampled OCM mask (3m) + mask_3m_upsampled_path = intermediate_dir / f"{input_3m_path.stem}_ocm_mask_3m_upsampled.tif" + + # Final masked image (3m) + final_masked_3m_path = output_base_dir / f"{input_3m_path.stem}_ocm_masked_3m.tif" + + print(f"--- Starting OCM processing for {input_3m_path.name} ---") + print(f"Input 3m image (absolute): {input_3m_path}") + print(f"Output base directory (absolute): {output_base_dir}") + print(f"Intermediate 10m image path: {image_10m_path}") + + # 1. Resample 3m input to 10m for OCM + try: + resample_image(input_3m_path, image_10m_path, resolution=(10, 10)) + except Exception as e: + print(f"Failed to resample to 10m: {e}") + return + + # 2. Run OCM on the 10m image + mask_10m_generated_path, _ = run_ocm_on_image(image_10m_path, ocm_mask_output_dir) + if not mask_10m_generated_path: + print("OCM processing failed. Exiting.") + return + + # 3. Upsample the 10m OCM mask to 3m + try: + upsample_mask_to_3m(mask_10m_generated_path, input_3m_path, mask_3m_upsampled_path) + except Exception as e: + print(f"Failed to upsample 10m OCM mask to 3m: {e}") + return + + # 4. Apply the 3m upsampled mask to the original 3m image + try: + apply_3m_mask_to_3m_image(input_3m_path, mask_3m_upsampled_path, final_masked_3m_path) + except Exception as e: + print(f"Failed to apply 3m mask to 3m image: {e}") + return + + print(f"--- Successfully completed OCM processing for {input_3m_path.name} ---") + print(f"Final 3m masked output: {final_masked_3m_path}") + +if __name__ == "__main__": + if not HAS_OCM: + print("OmniCloudMask library is not installed. Please install it to run this script.") + print("You can typically install it using: pip install omnicloudmask") + else: + main() \ No newline at end of file diff --git a/r_app/CI_report_dashboard_planet.Rmd b/r_app/CI_report_dashboard_planet.Rmd index 71de512..cb59c18 100644 --- a/r_app/CI_report_dashboard_planet.Rmd +++ b/r_app/CI_report_dashboard_planet.Rmd @@ -2,18 +2,17 @@ params: ref: "word-styles-reference-var1.docx" output_file: CI_report.docx - report_date: "2024-08-28" - data_dir: "Chemba" + report_date: "2024-07-18" + data_dir: "chemba" mail_day: "Wednesday" borders: TRUE - use_breaks: FALSE output: # html_document: # toc: yes # df_print: paged word_document: reference_docx: !expr file.path("word-styles-reference-var1.docx") - toc: yes + toc: no editor_options: chunk_output_type: console --- @@ -22,8 +21,7 @@ editor_options: # Set up basic report parameters from input values report_date <- params$report_date mail_day <- params$mail_day -borders <- params$borders -use_breaks <- params$use_breaks # Whether to use breaks or continuous spectrum in visualizations +borders <- params$borders # Environment setup notes (commented out) # # Activeer de renv omgeving @@ -38,26 +36,21 @@ use_breaks <- params$use_breaks # Whether to use breaks or continuous spectrum # Configure knitr options knitr::opts_chunk$set(warning = FALSE, message = FALSE) -# Path management -library(here) - -# Spatial data libraries -library(sf) -library(terra) -library(exactextractr) -# library(raster) - Removed as it's no longer maintained - -# Data manipulation and visualization -library(tidyverse) # Includes dplyr, ggplot2, etc. -library(tmap) -library(lubridate) -library(zoo) - -# Machine learning -library(rsample) -library(caret) -library(randomForest) -library(CAST) +# Load all packages at once with suppressPackageStartupMessages +suppressPackageStartupMessages({ + library(here) + library(sf) + library(terra) + library(exactextractr) + library(tidyverse) + library(tmap) + library(lubridate) + library(zoo) + library(rsample) + library(caret) + library(randomForest) + library(CAST) +}) # Load custom utility functions tryCatch({ @@ -127,9 +120,6 @@ if (which(days_of_week == report_date_as_week_day) > which(days_of_week == mail_ today_minus_3 <- as.character(lubridate::ymd(today) - 14) } -# Generate subtitle for report -subtitle_var <- paste("Report generated on", Sys.Date()) - # Calculate week numbers for previous weeks week_minus_1 <- week - 1 week_minus_2 <- week - 2 @@ -217,7 +207,95 @@ tryCatch({ }) ``` -`r subtitle_var` +```{r create_front_page_variables, include=FALSE} +# Create variables for the front page +farm_name <- stringr::str_to_title(gsub("_", " ", project_dir)) + +# Format dates for display +report_date_formatted <- format(as.Date(report_date), "%B %d, %Y") +current_year <- format(Sys.Date(), "%Y") + +# Get total field count and area if available +tryCatch({ + total_fields <- length(unique(AllPivots0$field)) + total_area_ha <- round(sum(sf::st_area(AllPivots0)) / 10000, 1) # Convert to hectares +}, error = function(e) { + total_fields <- "N/A" + total_area_ha <- "N/A" +}) +``` + +--- +title: "" +--- + +```{=openxml} + + + + + + + + + + + SUGARCANE CROP MONITORING REPORT + + +``` + +
+ +**`r farm_name`** + +**Chlorophyll Index Analysis** + +Report Date: **`r report_date_formatted`** + +--- + +
+ +
+ +## Report Summary + +**Farm Location:** `r farm_name` +**Report Period:** Week `r week` of `r current_year` +**Data Source:** Planet Labs Satellite Imagery +**Analysis Type:** Chlorophyll Index (CI) Monitoring + +**Field Coverage:** +- Total Fields Monitored: `r total_fields` +- Total Area: `r total_area_ha` hectares + +**Report Generated:** `r format(Sys.Date(), "%B %d, %Y at %H:%M")` + +--- + +## About This Report + +This automated report provides weekly analysis of sugarcane crop health using satellite-derived Chlorophyll Index (CI) measurements. The analysis helps identify: + +- Field-level crop health variations +- Weekly changes in crop vigor +- Areas requiring agricultural attention +- Growth patterns across different field sections + +**Key Features:** +- High-resolution satellite imagery analysis +- Week-over-week change detection +- Individual field performance metrics +- Actionable insights for crop management + +
+ +\pagebreak + + + + \pagebreak # Explanation of the Report @@ -253,34 +331,104 @@ CI values typically range from 0 (bare soil or severely stressed vegetation) to Use these insights to identify areas that may need irrigation, fertilization, or other interventions, and to track the effectiveness of your management practices over time. \pagebreak -# Chlorophyll Index (CI) Overview Map - Current Week -```{r render_ci_overview_map, echo=FALSE, fig.height=6.8, fig.width=9, message=FALSE, warning=FALSE} -# Create overview chlorophyll index map +# RGB Satellite Image - Current Week (if available) +```{r render_rgb_map, echo=FALSE, fig.height=6.9, fig.width=9, message=FALSE, warning=FALSE} +# Check if RGB bands are available and create RGB map tryCatch({ - # Base shape - map <- tmap::tm_shape(CI, unit = "m") + # Load the full raster to check available bands + full_raster <- terra::rast(path_to_week_current) + available_bands <- names(full_raster) - # Add raster layer with either breaks or continuous spectrum based on parameter - if (use_breaks) { - map <- map + tmap::tm_raster(breaks = c(0,0.5,1,2,3,4,5,6,7,Inf), - palette = "RdYlGn", - midpoint = NA, - legend.is.portrait = FALSE, - title = "Chlorophyll Index (CI)") - } else { - map <- map + tmap::tm_raster(palette = "RdYlGn", - style = "cont", - midpoint = NA, - legend.is.portrait = FALSE, - title = "Chlorophyll Index (CI)") + # Check if RGB bands are available (look for red, green, blue or similar naming) + rgb_bands_available <- any(grepl("red|Red|RED", available_bands, ignore.case = TRUE)) && + any(grepl("green|Green|GREEN", available_bands, ignore.case = TRUE)) && + any(grepl("blue|Blue|BLUE", available_bands, ignore.case = TRUE)) + + # Alternative check for numbered bands that might be RGB (e.g., band_1, band_2, band_3) + if (!rgb_bands_available && length(available_bands) >= 3) { + # Check if we have at least 3 bands that could potentially be RGB + potential_rgb_bands <- grep("band_[1-3]|B[1-3]|[1-3]", available_bands, ignore.case = TRUE) + rgb_bands_available <- length(potential_rgb_bands) >= 3 } + if (rgb_bands_available) { + safe_log("RGB bands detected - creating RGB visualization") + + # Try to extract RGB bands (prioritize named bands first) + red_band <- NULL + green_band <- NULL + blue_band <- NULL + + # Look for named RGB bands first + red_candidates <- grep("red|Red|RED", available_bands, ignore.case = TRUE, value = TRUE) + green_candidates <- grep("green|Green|GREEN", available_bands, ignore.case = TRUE, value = TRUE) + blue_candidates <- grep("blue|Blue|BLUE", available_bands, ignore.case = TRUE, value = TRUE) + + if (length(red_candidates) > 0) red_band <- red_candidates[1] + if (length(green_candidates) > 0) green_band <- green_candidates[1] + if (length(blue_candidates) > 0) blue_band <- blue_candidates[1] + + # Fallback to numbered bands if named bands not found + if (is.null(red_band) || is.null(green_band) || is.null(blue_band)) { + if (length(available_bands) >= 3) { + # Assume first 3 bands are RGB (common convention) + red_band <- available_bands[1] + green_band <- available_bands[2] + blue_band <- available_bands[3] + } + } + + if (!is.null(red_band) && !is.null(green_band) && !is.null(blue_band)) { + # Extract RGB bands + rgb_raster <- c(full_raster[[red_band]], full_raster[[green_band]], full_raster[[blue_band]]) + names(rgb_raster) <- c("red", "green", "blue") + + # Create RGB map + map <- tmap::tm_shape(rgb_raster, unit = "m") + + tmap::tm_rgb() + + tmap::tm_scalebar(position = c("right", "bottom"), text.color = "white") + + tmap::tm_compass(position = c("right", "bottom"), text.color = "white") + + tmap::tm_shape(AllPivots0) + + tmap::tm_borders(col = "white", lwd = 2) + + tmap::tm_text("sub_field", size = 0.6, col = "white") + + tmap::tm_layout(main.title = paste0("RGB Satellite Image - Week ", week), + main.title.size = 0.8, + main.title.color = "black") + + # Print the map + print(map) + + safe_log("RGB map created successfully") + } else { + safe_log("Could not identify RGB bands despite detection", "WARNING") + cat("RGB bands detected but could not be properly identified. Skipping RGB visualization.\n") + } + } else { + safe_log("No RGB bands available in the current week mosaic") + cat("**Note:** RGB satellite imagery is not available for this week. Only spectral index data is available.\n\n") + } +}, error = function(e) { + safe_log(paste("Error creating RGB map:", e$message), "ERROR") + cat("**Note:** Could not create RGB visualization for this week.\n\n") +}) +``` + +\pagebreak +# Chlorophyll Index (CI) Overview Map - Current Week +```{r render_ci_overview_map, echo=FALSE, fig.height=6.9, fig.width=9, message=FALSE, warning=FALSE} +# Create overview chlorophyll index map +tryCatch({ # Base shape + map <- tmap::tm_shape(CI, unit = "m") # Add raster layer with continuous spectrum (fixed scale 1-8 for consistent comparison) + map <- map + tmap::tm_raster(col.scale = tm_scale_continuous(values = "brewer.rd_yl_gn", + limits = c(1, 8)), + col.legend = tm_legend(title = "Chlorophyll Index (CI)", + orientation = "landscape", + position = tm_pos_out("center", "bottom"))) + # Complete the map with layout and other elements - map <- map + tmap::tm_layout(legend.outside = TRUE, - legend.outside.position = "bottom", - legend.show = TRUE) + - tmap::tm_scale_bar(position = tm_pos_out("right", "bottom"), text.color = "black") + - tmap::tm_compass(position = tm_pos_out("right", "bottom"), text.color = "black") + + map <- map + + tmap::tm_scalebar(position = c("right", "bottom"), text.color = "black") + + tmap::tm_compass(position = c("right", "bottom"), text.color = "black") + tmap::tm_shape(AllPivots0) + tmap::tm_borders(col = "black") + tmap::tm_text("sub_field", size = 0.6, col = "black") @@ -293,36 +441,24 @@ tryCatch({ text(1, 1, "Error creating CI overview map", cex=1.5) }) ``` -\newpage +\pagebreak # Weekly Chlorophyll Index Difference Map -```{r render_ci_difference_map, echo=FALSE, fig.height=6.8, fig.width=9, message=FALSE, warning=FALSE} +```{r render_ci_difference_map, echo=FALSE, fig.height=6.9, fig.width=9, message=FALSE, warning=FALSE} # Create chlorophyll index difference map -tryCatch({ - # Base shape - map <- tmap::tm_shape(last_week_dif_raster_abs, unit = "m") - - # Add raster layer with either breaks or continuous spectrum based on parameter - if (use_breaks) { - map <- map + tmap::tm_raster(breaks = c(-3,-2,-1,0,1,2,3), - palette = "RdYlGn", - midpoint = 0, - legend.is.portrait = FALSE, - title = "Chlorophyll Index (CI) Change") - } else { - map <- map + tmap::tm_raster(palette = "RdYlGn", - style = "cont", - midpoint = 0, - legend.is.portrait = FALSE, - title = "Chlorophyll Index (CI) Change") - } +tryCatch({ # Base shape + map <- tmap::tm_shape(last_week_dif_raster_abs, unit = "m") # Add raster layer with continuous spectrum (centered at 0 for difference maps, fixed scale) + map <- map + tmap::tm_raster(col.scale = tm_scale_continuous(values = "brewer.rd_yl_gn", + midpoint = 0, + limits = c(-3, 3)), + col.legend = tm_legend(title = "Chlorophyll Index (CI) Change", + orientation = "landscape", + position = tm_pos_out("center", "bottom"))) # Complete the map with layout and other elements - map <- map + tmap::tm_layout(legend.outside = TRUE, - legend.outside.position = "bottom", - legend.show = TRUE) + - tmap::tm_scale_bar(position = tm_pos_out("right", "bottom"), text.color = "black") + - tmap::tm_compass(position = tm_pos_out("right", "bottom"), text.color = "black") + + map <- map + + tmap::tm_scalebar(position = c("right", "bottom"), text.color = "black") + + tmap::tm_compass(position = c("right", "bottom"), text.color = "black") + tmap::tm_shape(AllPivots0) + tmap::tm_borders(col = "black") + tmap::tm_text("sub_field", size = 0.6, col = "black") @@ -335,8 +471,8 @@ tryCatch({ text(1, 1, "Error creating CI difference map", cex=1.5) }) ``` -\newpage -\newpage +\pagebreak + ```{r generate_field_visualizations, eval=TRUE, fig.height=3.8, fig.width=10, message=FALSE,echo=FALSE, warning=FALSE, include=TRUE, results='asis'} # Generate detailed visualizations for each field @@ -347,7 +483,7 @@ tryCatch({ dplyr::summarise(.groups = 'drop') # Generate plots for each field - purrr::walk(AllPivots_merged$field, function(field_name) { + purrr::walk(AllPivots_merged$field[1:5], function(field_name) { tryCatch({ cat("\n") # Add an empty line for better spacing @@ -358,14 +494,12 @@ tryCatch({ current_ci = CI, ci_minus_1 = CI_m1, ci_minus_2 = CI_m2, - last_week_diff = last_week_dif_raster_abs, - three_week_diff = three_week_dif_raster_abs, + last_week_diff = last_week_dif_raster_abs, three_week_diff = three_week_dif_raster_abs, harvesting_data = harvesting_data, week = week, week_minus_1 = week_minus_1, week_minus_2 = week_minus_2, week_minus_3 = week_minus_3, - use_breaks = use_breaks, borders = borders ) @@ -513,7 +647,7 @@ tryCatch({ # Predict yields for the current season (focus on mature fields over 300 days) pred_rf_current_season <- prepare_predictions(stats::predict(model_ffs_rf, newdata = prediction_yields), prediction_yields) %>% - dplyr::filter(Age_days > 300) %>% + dplyr::filter(Age_days > 1) %>% dplyr::mutate(CI_per_day = round(total_CI / Age_days, 1)) safe_log("Successfully completed yield prediction calculations") @@ -565,3 +699,7 @@ tryCatch({ }) ``` + + +\pagebreak + diff --git a/r_app/CI_report_dashboard_planet_files/figure-html/ci_diff_kaart-1.png b/r_app/CI_report_dashboard_planet_files/figure-html/ci_diff_kaart-1.png deleted file mode 100644 index 10c8573e190f949b00b374a369e63a3b77e69269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156119 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

k0`L;%5vc2;Oy^GXYc+yAl7mo*QcQ0>jKOguJ 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 diff --git a/r_app/CI_report_dashboard_planet_files/figure-html/ci_overzicht_kaart-1.png b/r_app/CI_report_dashboard_planet_files/figure-html/ci_overzicht_kaart-1.png deleted file mode 100644 index c28951af08567e52cee28290e56657386d1081c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183969 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 (}?zb`+=3fI#vs# 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 SCIv8EB3(^`OT`zh@Ba%%4eav( diff --git a/r_app/CI_report_executive_summary.Rmd b/r_app/CI_report_executive_summary.Rmd index 1e21152..6341f6c 100644 --- a/r_app/CI_report_executive_summary.Rmd +++ b/r_app/CI_report_executive_summary.Rmd @@ -2,8 +2,8 @@ params: ref: "word-styles-reference-var1.docx" output_file: CI_report.docx - report_date: "2024-08-28" - data_dir: "Chemba" + report_date: "2025-06-16" + data_dir: "simba" mail_day: "Wednesday" borders: TRUE use_breaks: FALSE @@ -60,17 +60,32 @@ library(randomForest) library(CAST) # Load custom utility functions -tryCatch({ - source("report_utils.R") -}, error = function(e) { - message(paste("Error loading report_utils.R:", e$message)) - # Try alternative path if the first one fails - tryCatch({ +# tryCatch({ +# source("report_utils.R") +# }, error = function(e) { +# message(paste("Error loading report_utils.R:", e$message)) +# # Try alternative path if the first one fails +# tryCatch({ source(here::here("r_app", "report_utils.R")) - }, error = function(e) { - stop("Could not load report_utils.R from either location: ", e$message) - }) -}) +# }, error = function(e) { +# stop("Could not load report_utils.R from either location: ", e$message) +# }) +# }) + +# Load executive report utilities +# tryCatch({ +# source("executive_report_utils.R") +# }, error = function(e) { +# message(paste("Error loading executive_report_utils.R:", e$message)) +# # Try alternative path if the first one fails +# tryCatch({ + source(here::here("r_app","exec_dashboard", "executive_report_utils.R")) +# }, error = function(e) { +# stop("Could not load executive_report_utils.R from either location: ", e$message) +# }) +# }) + +safe_log("Successfully loaded utility functions") ``` ```{r initialize_project_config, message=FALSE, warning=FALSE, include=FALSE} @@ -489,975 +504,218 @@ tryCatch({ }) ``` -```{r executive_summary_functions, message=FALSE, warning=FALSE, include=FALSE} -# EXECUTIVE SUMMARY HELPER FUNCTIONS - -#' Generate a summary of farm health status -#' -#' @param field_boundaries Field boundaries spatial data (sf object) -#' @param ci_current Current CI raster -#' @param ci_previous Previous week's CI raster -#' @param harvesting_data Data frame with harvesting information -#' @return A data frame with farm status summary metrics -#' -generate_farm_health_summary <- function(field_boundaries, ci_current, ci_previous, harvesting_data) { - # Generate a summary data frame of farm health by field - tryCatch({ - # Get unique field names - fields <- unique(field_boundaries$field) - - # Initialize result dataframe - summary_data <- data.frame( - field = character(), - mean_ci = numeric(), - ci_change = numeric(), - ci_uniformity = numeric(), - status = character(), - anomaly_type = character(), - priority_level = numeric(), - age_weeks = numeric(), - harvest_readiness = character(), - stringsAsFactors = FALSE - ) - - # Process each field with better error handling - for (field_name in fields) { - tryCatch({ - # Get field boundary - field_shape <- field_boundaries %>% dplyr::filter(field == field_name) - - # Skip if field shape is empty - if (nrow(field_shape) == 0) { - safe_log(paste("Empty field shape for", field_name), "WARNING") - next - } - - # Get field age from harvesting data - field_age_data <- harvesting_data %>% - dplyr::filter(field == field_name) %>% - dplyr::arrange(desc(season_start)) %>% - dplyr::slice(1) - - # Default age if not available - field_age_weeks <- if (nrow(field_age_data) > 0 && !is.na(field_age_data$age)) { - field_age_data$age - } else { - 10 # Default age - } - - # Extract CI values for this field using extract instead of crop/mask to avoid pointer issues - # This is more robust than the crop+mask approach - field_bbox <- sf::st_bbox(field_shape) - extent_vec <- c(field_bbox$xmin, field_bbox$xmax, field_bbox$ymin, field_bbox$ymax) - - # Use terra extract function instead of crop+mask - ci_values <- terra::extract(ci_current, field_shape) - ci_prev_values <- terra::extract(ci_previous, field_shape) - - # Calculate metrics - mean_ci <- mean(ci_values$CI, na.rm=TRUE) - mean_ci_prev <- mean(ci_prev_values$CI, na.rm=TRUE) - ci_change <- mean_ci - mean_ci_prev - ci_sd <- sd(ci_values$CI, na.rm=TRUE) - ci_uniformity <- ci_sd / max(0.1, mean_ci) # Avoid division by zero - - # Determine field status - status <- dplyr::case_when( - mean_ci >= 5 ~ "Excellent", - mean_ci >= 3.5 ~ "Good", - mean_ci >= 2 ~ "Fair", - mean_ci >= 1 ~ "Poor", - TRUE ~ "Critical" - ) - - # Determine anomaly type - anomaly_type <- dplyr::case_when( - ci_change > 2 ~ "Potential Weed Growth", - ci_change < -2 ~ "Potential Weeding/Harvesting", - ci_uniformity > 0.5 ~ "High Variability", - mean_ci < 1 ~ "Low Vigor", - TRUE ~ "None" - ) - - # Calculate priority level (1-5, with 1 being highest priority) - priority_score <- dplyr::case_when( - mean_ci < 1 ~ 1, # Critical - highest priority - anomaly_type == "Potential Weed Growth" ~ 2, - anomaly_type == "High Variability" ~ 3, - ci_change < -1 ~ 4, - TRUE ~ 5 # No urgent issues - ) - - # Determine harvest readiness - harvest_readiness <- dplyr::case_when( - field_age_weeks >= 52 & mean_ci >= 4 ~ "Ready for harvest", - field_age_weeks >= 48 & mean_ci >= 3.5 ~ "Approaching harvest", - field_age_weeks >= 40 & mean_ci >= 3 ~ "Mid-maturity", - field_age_weeks >= 12 ~ "Growing", - TRUE ~ "Early stage" - ) - - # Add to summary data - summary_data <- rbind(summary_data, data.frame( - field = field_name, - mean_ci = round(mean_ci, 2), - ci_change = round(ci_change, 2), - ci_uniformity = round(ci_uniformity, 2), - status = status, - anomaly_type = anomaly_type, - priority_level = priority_score, - age_weeks = field_age_weeks, - harvest_readiness = harvest_readiness, - stringsAsFactors = FALSE - )) - - }, error = function(e) { - safe_log(paste("Error calculating health score for field", field_name, ":", e$message), "ERROR") - # Add a row with NA values for this field to ensure it still appears in outputs - summary_data <- rbind(summary_data, data.frame( - field = field_name, - mean_ci = NA, - ci_change = NA, - ci_uniformity = NA, - status = "Error", - anomaly_type = "Error", - priority_level = 1, # High priority because it needs investigation - age_weeks = NA, - harvest_readiness = "Unknown", - stringsAsFactors = FALSE - )) - }) - } - - # Sort by priority level - summary_data <- summary_data %>% dplyr::arrange(priority_level, field) - - return(summary_data) - - }, error = function(e) { - safe_log(paste("Error in generate_farm_health_summary:", e$message), "ERROR") - return(data.frame( - field = character(), - mean_ci = numeric(), - ci_change = numeric(), - ci_uniformity = numeric(), - status = character(), - anomaly_type = character(), - priority_level = numeric(), - age_weeks = numeric(), - harvest_readiness = character(), - stringsAsFactors = FALSE - )) - }) -} - -#' Create a farm-wide anomaly detection map -#' -#' @param ci_current Current CI raster -#' @param ci_previous Previous week's CI raster -#' @param field_boundaries Field boundaries spatial data (sf object) -#' @return A tmap object with anomaly visualization -#' -create_anomaly_map <- function(ci_current, ci_previous, field_boundaries) { - tryCatch({ - # Calculate difference raster - ci_diff <- ci_current - ci_previous - - # Create a categorical raster for anomalies - anomaly_raster <- ci_current * 0 # Initialize with same extent/resolution - - # Extract values to manipulate - diff_values <- terra::values(ci_diff) - curr_values <- terra::values(ci_current) - - # Define anomaly categories: - # 4: Significant growth (potential weeds) - CI increase > 2 - # 3: Moderate growth - CI increase 1-2 - # 2: Stable - CI change between -1 and 1 - # 1: Moderate decline - CI decrease 1-2 - # 0: Significant decline (potential weeding/harvesting) - CI decrease > 2 - - # Apply classification - anomaly_values <- rep(NA, length(diff_values)) - - # Significant growth (potential weeds) - sig_growth <- which(diff_values > 2 & !is.na(diff_values)) - anomaly_values[sig_growth] <- 4 - - # Moderate growth - mod_growth <- which(diff_values > 1 & diff_values <= 2 & !is.na(diff_values)) - anomaly_values[mod_growth] <- 3 - - # Stable - stable <- which(diff_values >= -1 & diff_values <= 1 & !is.na(diff_values)) - anomaly_values[stable] <- 2 - - # Moderate decline - mod_decline <- which(diff_values < -1 & diff_values >= -2 & !is.na(diff_values)) - anomaly_values[mod_decline] <- 1 - - # Significant decline (potential weeding) - sig_decline <- which(diff_values < -2 & !is.na(diff_values)) - anomaly_values[sig_decline] <- 0 - - # Set values in raster - terra::values(anomaly_raster) <- anomaly_values - - # Create anomaly map - map <- tm_shape(anomaly_raster) + - tm_raster( - style = "cat", - palette = c("#d73027", "#fc8d59", "#ffffbf", "#91cf60", "#1a9850"), - labels = c("Significant Decline", "Moderate Decline", "Stable", "Moderate Growth", "Significant Growth"), - title = "Weekly CI Change" - ) + - tm_shape(field_boundaries) + - tm_borders(col = "black", lwd = 1.5) + - tm_text("field", size = 0.6) + - tm_layout( - main.title = "Farm-Wide Anomaly Detection", - legend.outside = TRUE, - legend.outside.position = "bottom" - ) + - tm_scale_bar(position = tm_pos_out("right", "bottom")) - - return(map) - - }, error = function(e) { - safe_log(paste("Error in create_anomaly_map:", e$message), "ERROR") - return(NULL) - }) -} - -#' Create a choropleth map of field health status -#' -#' @param field_boundaries Field boundaries with health data -#' @param attribute Field to visualize (e.g., "priority_level", "mean_ci") -#' @param title Map title -#' @param palette Color palette to use -#' @param legend_title Legend title -#' @return A tmap object -#' -create_field_status_map <- function(field_boundaries, health_data, attribute, - title = "Field Status Overview", - palette = "RdYlGn", - legend_title = "Status") { - tryCatch({ - # Join health data to field boundaries - field_data <- field_boundaries %>% - dplyr::left_join(health_data, by = "field") - - # Create style based on attribute type - if (attribute == "status") { - # Categorical styling for status - map <- tm_shape(field_data) + - tm_fill( - col = attribute, - palette = c("Critical" = "#d73027", "Poor" = "#fc8d59", - "Fair" = "#ffffbf", "Good" = "#91cf60", "Excellent" = "#1a9850", - "Error" = "#999999"), # Added Error category - title = legend_title - ) - } else if (attribute == "priority_level") { - # Numeric with custom breaks for priority (5 to 1, with 1 being highest priority) - map <- tm_shape(field_data) + - tm_fill( - col = attribute, - palette = "-RdYlGn", # Reversed so red is high priority - breaks = c(0.5, 1.5, 2.5, 3.5, 4.5, 5.5), - labels = c("Critical", "High", "Medium", "Low", "Minimal"), - title = legend_title - ) - } else if (attribute == "anomaly_type") { - # Categorical styling for anomalies - map <- tm_shape(field_data) + - tm_fill( - col = attribute, - palette = c("Potential Weed Growth" = "#d73027", - "Potential Weeding/Harvesting" = "#4575b4", - "High Variability" = "#f46d43", - "Low Vigor" = "#fee090", - "None" = "#91cf60", - "Error" = "#999999"), # Added Error category - title = legend_title - ) - } else if (attribute == "harvest_readiness") { - # Categorical styling for harvest readiness - map <- tm_shape(field_data) + - tm_fill( - col = attribute, - palette = c("Ready for harvest" = "#1a9850", - "Approaching harvest" = "#91cf60", - "Mid-maturity" = "#ffffbf", - "Growing" = "#fc8d59", - "Early stage" = "#d73027", - "Unknown" = "#999999"), # Added Unknown category - title = legend_title - ) - } else { - # Default numerical styling - map <- tm_shape(field_data) + - tm_fill( - col = attribute, - palette = palette, - title = legend_title, - style = "cont", - na.color = "#999999" # Color for NA values - ) - } - - # Complete the map with borders and labels - map <- map + - tm_borders(col = "black", lwd = 1) + - tm_text("field", size = 0.7) + - tm_layout( - main.title = title, - legend.outside = TRUE, - legend.outside.position = "bottom" - ) + - tm_scale_bar(position = tm_pos_out("right", "bottom")) - - return(map) - - }, error = function(e) { - safe_log(paste("Error in create_field_status_map:", e$message), "ERROR") - return(NULL) - }) -} - -#' Create a summary statistics visualization -#' -#' @param health_data Farm health summary data -#' @return A ggplot2 object -#' -create_summary_stats <- function(health_data) { - tryCatch({ - # Handle empty dataframe case - if (nrow(health_data) == 0) { - return(ggplot2::ggplot() + - ggplot2::annotate("text", x = 0, y = 0, label = "No field data available") + - ggplot2::theme_void()) - } - - # Count fields by status - status_counts <- health_data %>% - dplyr::group_by(status) %>% - dplyr::summarise(count = n()) %>% - dplyr::mutate(status = factor(status, levels = c("Excellent", "Good", "Fair", "Poor", "Critical", "Error"))) - - # Create colors for status categories - status_colors <- c( - "Excellent" = "#1a9850", - "Good" = "#91cf60", - "Fair" = "#ffffbf", - "Poor" = "#fc8d59", - "Critical" = "#d73027", - "Error" = "#999999" - ) - - # Create bar chart - p <- ggplot2::ggplot(status_counts, ggplot2::aes(x = status, y = count, fill = status)) + - ggplot2::geom_bar(stat = "identity") + - ggplot2::scale_fill_manual(values = status_colors) + - ggplot2::labs( - title = "Field Status Summary", - x = "Status", - y = "Number of Fields", - fill = "Field Status" - ) + - ggplot2::theme_minimal() + - ggplot2::theme( - axis.text.x = ggplot2::element_text(angle = 45, hjust = 1), - legend.position = "bottom" - ) - - return(p) - - }, error = function(e) { - safe_log(paste("Error in create_summary_stats:", e$message), "ERROR") - return(ggplot2::ggplot() + - ggplot2::annotate("text", x = 0, y = 0, label = paste("Error:", e$message)) + - ggplot2::theme_void()) - }) -} - -#' Create a bar chart of fields requiring attention -#' -#' @param health_data Farm health summary data -#' @param max_fields Maximum number of fields to display -#' @return A ggplot2 object -#' -create_priority_fields_chart <- function(health_data, max_fields = 10) { - tryCatch({ - # Handle empty dataframe case - if (nrow(health_data) == 0) { - return(ggplot2::ggplot() + - ggplot2::annotate("text", x = 0, y = 0, label = "No field data available") + - ggplot2::theme_void()) - } - - # Filter for fields that need attention (priority 1-3) - priority_fields <- health_data %>% - dplyr::filter(priority_level <= 3) %>% - dplyr::arrange(priority_level) %>% - dplyr::slice_head(n = max_fields) - - # If no priority fields, return message - if (nrow(priority_fields) == 0) { - return(ggplot2::ggplot() + - ggplot2::annotate("text", x = 0, y = 0, label = "No priority fields requiring attention") + - ggplot2::theme_void()) - } - - # Create priority labels - priority_fields$priority_label <- factor( - dplyr::case_when( - priority_fields$priority_level == 1 ~ "Critical", - priority_fields$priority_level == 2 ~ "High", - priority_fields$priority_level == 3 ~ "Medium", - TRUE ~ "Low" - ), - levels = c("Critical", "High", "Medium", "Low") - ) - - # Priority colors - priority_colors <- c( - "Critical" = "#d73027", - "High" = "#fc8d59", - "Medium" = "#fee090", - "Low" = "#91cf60" - ) - - # Create chart - p <- ggplot2::ggplot(priority_fields, - ggplot2::aes(x = reorder(field, -priority_level), - y = mean_ci, - fill = priority_label)) + - ggplot2::geom_bar(stat = "identity") + - ggplot2::geom_text(ggplot2::aes(label = anomaly_type), - position = ggplot2::position_stack(vjust = 0.5), - size = 3, angle = 90, hjust = 0) + - ggplot2::scale_fill_manual(values = priority_colors) + - ggplot2::labs( - title = "Priority Fields Requiring Attention", - subtitle = "With anomaly types and CI values", - x = "Field", - y = "Chlorophyll Index (CI)", - fill = "Priority" - ) + - ggplot2::theme_minimal() + - ggplot2::theme( - axis.text.x = ggplot2::element_text(angle = 45, hjust = 1), - legend.position = "bottom" - ) - - return(p) - - }, error = function(e) { - safe_log(paste("Error in create_priority_fields_chart:", e$message), "ERROR") - return(ggplot2::ggplot() + - ggplot2::annotate("text", x = 0, y = 0, label = paste("Error:", e$message)) + - ggplot2::theme_void()) - }) -} - -#' Creates a harvest readiness visualization -#' -#' @param health_data Farm health summary data -#' @return A ggplot2 object -create_harvest_readiness_chart <- function(health_data) { - tryCatch({ - # Handle empty dataframe case - if (nrow(health_data) == 0) { - return(ggplot2::ggplot() + - ggplot2::annotate("text", x = 0, y = 0, label = "No field data available") + - ggplot2::theme_void()) - } - - # Count fields by harvest readiness - harvest_counts <- health_data %>% - dplyr::group_by(harvest_readiness) %>% - dplyr::summarise(count = n()) - - # Order factor levels - harvest_order <- c("Ready for harvest", "Approaching harvest", "Mid-maturity", "Growing", "Early stage", "Unknown") - harvest_counts$harvest_readiness <- factor(harvest_counts$harvest_readiness, levels = harvest_order) - - # Create colors for harvest readiness categories - harvest_colors <- c( - "Ready for harvest" = "#1a9850", - "Approaching harvest" = "#91cf60", - "Mid-maturity" = "#ffffbf", - "Growing" = "#fc8d59", - "Early stage" = "#d73027", - "Unknown" = "#999999" - ) - - # Create pie chart - p <- ggplot2::ggplot(harvest_counts, ggplot2::aes(x="", y=count, fill=harvest_readiness)) + - ggplot2::geom_bar(stat="identity", width=1) + - ggplot2::coord_polar("y", start=0) + - ggplot2::scale_fill_manual(values = harvest_colors) + - ggplot2::labs( - title = "Harvest Readiness Overview", - fill = "Harvest Stage" - ) + - ggplot2::theme_minimal() + - ggplot2::theme( - axis.title.x = ggplot2::element_blank(), - axis.title.y = ggplot2::element_blank(), - panel.border = ggplot2::element_blank(), - panel.grid = ggplot2::element_blank(), - axis.ticks = ggplot2::element_blank(), - axis.text = ggplot2::element_blank(), - plot.title = ggplot2::element_text(size=14, face="bold") - ) - - return(p) - - }, error = function(e) { - safe_log(paste("Error in create_harvest_readiness_chart:", e$message), "ERROR") - return(ggplot2::ggplot() + - ggplot2::annotate("text", x = 0, y = 0, label = paste("Error:", e$message)) + - ggplot2::theme_void()) - }) -} - -#' Generate recommendations based on farm health -#' -#' @param health_data Farm health summary data -#' @return HTML formatted recommendations -generate_executive_recommendations <- function(health_data) { - tryCatch({ - # Handle empty dataframe case - if (nrow(health_data) == 0) { - return("

Executive Recommendations

No field data available to generate recommendations.

") - } - - # Count fields by priority level - priority_counts <- health_data %>% - dplyr::group_by(priority_level) %>% - dplyr::summarise(count = n()) - - # Get critical and high priority fields - critical_fields <- health_data %>% - dplyr::filter(priority_level == 1) %>% - dplyr::pull(field) - - high_priority_fields <- health_data %>% - dplyr::filter(priority_level == 2) %>% - dplyr::pull(field) - - # Count harvest-ready fields - harvest_ready <- health_data %>% - dplyr::filter(harvest_readiness == "Ready for harvest") %>% - dplyr::pull(field) - - approaching_harvest <- health_data %>% - dplyr::filter(harvest_readiness == "Approaching harvest") %>% - dplyr::pull(field) - - # Count anomalies by type - anomaly_counts <- health_data %>% - dplyr::filter(anomaly_type != "None" & anomaly_type != "Error") %>% - dplyr::group_by(anomaly_type) %>% - dplyr::summarise(count = n()) - - # Generate HTML recommendations - html_output <- "
" - html_output <- paste0(html_output, "

Executive Recommendations

") - - # Priority recommendations - html_output <- paste0(html_output, "

Priority Actions:

    ") - - if (length(critical_fields) > 0) { - html_output <- paste0(html_output, - sprintf("
  • Critical attention needed for fields: %s
  • ", - paste(critical_fields, collapse = ", "))) - } - - if (length(high_priority_fields) > 0) { - html_output <- paste0(html_output, - sprintf("
  • High priority inspection for fields: %s
  • ", - paste(high_priority_fields, collapse = ", "))) - } - - if (length(harvest_ready) > 0) { - html_output <- paste0(html_output, - sprintf("
  • Ready for harvest: %s
  • ", - paste(harvest_ready, collapse = ", "))) - } - - if (length(approaching_harvest) > 0) { - html_output <- paste0(html_output, - sprintf("
  • Approaching harvest readiness: %s
  • ", - paste(approaching_harvest, collapse = ", "))) - } - - # If no specific recommendations, add general one - if (length(critical_fields) == 0 && length(high_priority_fields) == 0 && - length(harvest_ready) == 0 && length(approaching_harvest) == 0) { - html_output <- paste0(html_output, "
  • No urgent actions required this week.
  • ") - } - - html_output <- paste0(html_output, "
") - - # Anomaly notifications - if (nrow(anomaly_counts) > 0) { - html_output <- paste0(html_output, "

Anomaly Notifications:

    ") - - for (i in 1:nrow(anomaly_counts)) { - html_output <- paste0(html_output, - sprintf("
  • %s detected in %d fields
  • ", - anomaly_counts$anomaly_type[i], anomaly_counts$count[i])) - } - - html_output <- paste0(html_output, "
") - } - - # Farm status summary - html_output <- paste0(html_output, "

Farm Status Overview:

    ") - - status_counts <- health_data %>% - dplyr::filter(status != "Error") %>% - dplyr::group_by(status) %>% - dplyr::summarise(count = n()) - - for (i in 1:nrow(status_counts)) { - html_output <- paste0(html_output, - sprintf("
  • %s: %d fields
  • ", - status_counts$status[i], status_counts$count[i])) - } - - html_output <- paste0(html_output, "
") - - return(html_output) - - }, error = function(e) { - safe_log(paste("Error in generate_executive_recommendations:", e$message), "ERROR") - return("

Error generating recommendations.

") - }) -} +```{r advanced_analytics_functions, message=FALSE, warning=FALSE, include=FALSE} +# ADVANCED ANALYTICS FUNCTIONS +# Note: These functions are now imported from executive_report_utils.R +# The utility file contains functions for velocity/acceleration indicators, +# anomaly timeline creation, age cohort mapping, and cohort performance charts +safe_log("Using analytics functions from executive_report_utils.R") ``` -`r subtitle_var` - \pagebreak -# Explanation of the Report +# Advanced Analytics -This report provides a detailed analysis of your sugarcane fields based on satellite imagery, helping you monitor crop health and development throughout the growing season. The data is processed weekly to give you timely insights for optimal farm management decisions. +## Field Health Velocity and Acceleration -## What is the Chlorophyll Index (CI)? +This visualization shows the rate of change in field health (velocity) and whether that change is speeding up or slowing down (acceleration). These metrics help identify if farm conditions are improving, stable, or deteriorating. -The **Chlorophyll Index (CI)** is a vegetation index that measures the relative amount of chlorophyll in plant leaves. Chlorophyll is the green pigment responsible for photosynthesis in plants. Higher CI values indicate: +**How to interpret:** +- **Velocity gauge:** Shows the average weekly change in CI values across all fields + - Positive values (green/right side): Farm health improving week-to-week + - Negative values (red/left side): Farm health declining week-to-week -* Greater photosynthetic activity -* Healthier plant tissue -* Better nitrogen uptake -* More vigorous crop growth +- **Acceleration gauge:** Shows whether the rate of change is increasing or decreasing + - Positive values (green/right side): Change is accelerating or improving faster + - Negative values (red/left side): Change is decelerating or slowing down -CI values typically range from 0 (bare soil or severely stressed vegetation) to 7+ (very healthy, dense vegetation). For sugarcane, values between 3-7 generally indicate good crop health, depending on the growth stage. +- **4-Week Trend:** Shows the overall CI value trajectory for the past month -# Executive Dashboard - -## Farm Health Status - -The map below shows the overall health status of all fields based on current Chlorophyll Index values. This provides a quick overview of which areas of your farm are performing well and which might need intervention. - -**How it works:** Field health status is determined by the average Chlorophyll Index (CI) value across each field: -- **Excellent** (dark green): CI ≥ 5.0 -- **Good** (light green): CI 3.5-4.99 -- **Fair** (yellow): CI 2.0-3.49 -- **Poor** (orange): CI 1.0-1.99 -- **Critical** (red): CI < 1.0 - -Fields with higher CI values indicate better crop vigor and photosynthetic activity, which typically correlate with healthier plants. - -```{r render_field_status_map, echo=FALSE, fig.height=6, fig.width=9, message=FALSE, warning=FALSE} -# Create field status map +```{r render_velocity_acceleration, echo=FALSE, fig.height=8, fig.width=10, message=FALSE, warning=FALSE} +# Render the velocity and acceleration indicators tryCatch({ - # Create and display the field status map - field_status_map <- create_field_status_map( - field_boundaries = AllPivots0, + # Create and display the indicators using the imported utility function + velocity_plot <- create_velocity_acceleration_indicator( health_data = farm_health_data, - attribute = "status", - title = "Field Health Status Overview", - palette = "RdYlGn", - legend_title = "Health Status" - ) - - # Print the map - print(field_status_map) -}, error = function(e) { - safe_log(paste("Error creating field status map:", e$message), "ERROR") - plot(1, type="n", axes=FALSE, xlab="", ylab="") - text(1, 1, "Error creating field status map", cex=1.5) -}) -``` - -## Management Priorities - -This map highlights which fields require priority management attention based on current health indicators and trends. Fields in red require immediate attention, while green fields are performing well with minimal intervention needed. - -**How it works:** Priority levels are calculated based on a combination of factors: -- **Critical Priority** (dark red): Fields with CI < 1.0 or critical health issues -- **High Priority** (red): Fields with potential weed growth (CI increase > 2) -- **Medium Priority** (orange): Fields with high internal variability -- **Low Priority** (light green): Fields with moderate decline in CI -- **Minimal Priority** (dark green): Stable, healthy fields - -The priority algorithm considers both absolute CI values and week-to-week changes to identify fields that need immediate management attention. - -```{r render_priority_map, echo=FALSE, fig.height=6, fig.width=9, message=FALSE, warning=FALSE} -# Create priority management map -tryCatch({ - # Fix the priority mapping so red = high priority, green = low priority - # Reverse the priority levels before mapping (1=critical becomes 5, 5=minimal becomes 1) - farm_health_data$display_priority <- 6 - farm_health_data$priority_level - - # Create and display the priority map with corrected priority levels - priority_map <- tm_shape(AllPivots0 %>% dplyr::left_join(farm_health_data, by = "field")) + - tm_fill( - col = "display_priority", - palette = "RdYlGn", # Now properly oriented: red = high priority, green = low priority - breaks = c(0.5, 1.5, 2.5, 3.5, 4.5, 5.5), - labels = c("Minimal", "Low", "Medium", "High", "Critical"), - title = "Priority Level" - ) + - tm_borders(col = "black", lwd = 1) + - tm_text("field", size = 0.7) + - tm_layout( - main.title = "Field Management Priority", - legend.outside = TRUE, - legend.outside.position = "bottom" - ) + - tm_scale_bar(position = tm_pos_out("right", "bottom")) - - # Print the map - print(priority_map) -}, error = function(e) { - safe_log(paste("Error creating priority map:", e$message), "ERROR") - plot(1, type="n", axes=FALSE, xlab="", ylab="") - text(1, 1, "Error creating priority map", cex=1.5) -}) -``` - -\pagebreak -## Crop Anomaly Detection - -The map below highlights potential anomalies in your fields that may require investigation. Areas with sudden changes in CI values could indicate weeding activities, rapid weed growth, or other management interventions. - -**How it works:** This map compares current week's CI values with those from the previous week: -- **Significant Growth** (dark green): CI increase > 2 units (potential weed growth) -- **Moderate Growth** (light green): CI increase of 1-2 units -- **Stable** (yellow): CI change between -1 and +1 units -- **Moderate Decline** (orange): CI decrease of 1-2 units -- **Significant Decline** (red): CI decrease > 2 units (potential weeding/harvesting activities) - -Areas with significant growth (dark green) may indicate rapid weed growth that requires monitoring, while significant declines (red) often indicate recent management activities like weeding or harvesting. - -```{r render_anomaly_map, echo=FALSE, fig.height=6, fig.width=9, message=FALSE, warning=FALSE} -# Create anomaly detection map -tryCatch({ - # Create and display the anomaly map - anomaly_map <- create_anomaly_map( ci_current = CI, - ci_previous = CI_m1, + ci_prev1 = CI_m1, + ci_prev2 = CI_m2, + ci_prev3 = CI_m3, field_boundaries = AllPivots0 ) - # Print the map - print(anomaly_map) + # Print the visualization + print(velocity_plot) + + # Create a table of fields with significant velocity changes + field_ci_metrics <- list() + + # Process each field to get metrics + fields <- unique(AllPivots0$field) + for (field_name in fields) { + tryCatch({ + # Get field boundary + field_shape <- AllPivots0 %>% dplyr::filter(field == field_name) + if (nrow(field_shape) == 0) next + + # Extract CI values + ci_curr_values <- terra::extract(CI, field_shape) + ci_prev1_values <- terra::extract(CI_m1, field_shape) + + # Calculate metrics + mean_ci_curr <- mean(ci_curr_values$CI, na.rm = TRUE) + mean_ci_prev1 <- mean(ci_prev1_values$CI, na.rm = TRUE) + velocity <- mean_ci_curr - mean_ci_prev1 + + # Store in list + field_ci_metrics[[field_name]] <- list( + field = field_name, + ci_current = mean_ci_curr, + ci_prev1 = mean_ci_prev1, + velocity = velocity + ) + + }, error = function(e) { + safe_log(paste("Error processing field", field_name, "for velocity table:", e$message), "WARNING") + }) + } + + # Convert list to data frame + velocity_df <- do.call(rbind, lapply(field_ci_metrics, function(x) { + data.frame( + field = x$field, + ci_current = round(x$ci_current, 2), + ci_prev1 = round(x$ci_prev1, 2), + velocity = round(x$velocity, 2), + direction = ifelse(x$velocity >= 0, "Improving", "Declining") + ) + })) + + # Select top 5 positive and top 5 negative velocity fields + top_positive <- velocity_df %>% + dplyr::filter(velocity > 0) %>% + dplyr::arrange(desc(velocity)) %>% + dplyr::slice_head(n = 5) + + top_negative <- velocity_df %>% + dplyr::filter(velocity < 0) %>% + dplyr::arrange(velocity) %>% + dplyr::slice_head(n = 5) + + # Display the tables if we have data + if (nrow(top_positive) > 0) { + cat("

Fields with Fastest Improvement

") + knitr::kable(top_positive %>% + dplyr::select(Field = field, + `Current CI` = ci_current, + `Previous CI` = ci_prev1, + `Weekly Change` = velocity)) + } + + if (nrow(top_negative) > 0) { + cat("

Fields with Fastest Decline

") + knitr::kable(top_negative %>% + dplyr::select(Field = field, + `Current CI` = ci_current, + `Previous CI` = ci_prev1, + `Weekly Change` = velocity)) + } + }, error = function(e) { - safe_log(paste("Error creating anomaly map:", e$message), "ERROR") - plot(1, type="n", axes=FALSE, xlab="", ylab="") - text(1, 1, "Error creating anomaly map", cex=1.5) + safe_log(paste("Error rendering velocity visualization:", e$message), "ERROR") + cat("
Error generating velocity visualization.
") }) ``` \pagebreak -## Harvest Planning +## Field Anomaly Timeline -This map shows the harvest readiness status of all fields, helping you plan harvest operations and logistics. Fields in dark green are ready for harvest, while those in yellow through red are at earlier growth stages. +This visualization shows the history of detected anomalies in fields across the monitoring period. It helps identify persistent issues or improvements over time. -**How it works:** Harvest readiness is determined by combining field age and CI values: -- **Ready for harvest** (dark green): Fields ≥52 weeks old with CI ≥4.0 -- **Approaching harvest** (light green): Fields ≥48 weeks old with CI ≥3.5 -- **Mid-maturity** (yellow): Fields ≥40 weeks old with CI ≥3.0 -- **Growing** (orange): Fields ≥12 weeks old -- **Early stage** (red): Fields <12 weeks old +**How to interpret:** +- **X-axis**: Dates of satellite observations +- **Y-axis**: Fields grouped by similar characteristics +- **Colors**: Red indicates negative anomalies, green indicates positive anomalies +- **Size**: Larger markers indicate stronger anomalies -This classification helps prioritize harvesting operations and logistical planning by identifying fields that are at optimal maturity for maximum sugar content. - -```{r render_harvest_map, echo=FALSE, fig.height=6, fig.width=9, message=FALSE, warning=FALSE} -# Create harvest planning map +```{r anomaly_timeline, echo=FALSE, fig.height=8, fig.width=10, message=FALSE, warning=FALSE} +# Generate anomaly timeline visualization tryCatch({ - # Create and display the harvest readiness map - harvest_map <- create_field_status_map( + # Use the imported function to create the anomaly timeline + anomaly_timeline <- create_anomaly_timeline( field_boundaries = AllPivots0, - health_data = farm_health_data, - attribute = "harvest_readiness", - title = "Harvest Readiness Status", - palette = "RdYlGn", - legend_title = "Harvest Status" + ci_data = CI_quadrant, + days_to_include = 90 # Show last 90 days of data ) - # Print the map - print(harvest_map) + # Display the timeline + print(anomaly_timeline) + }, error = function(e) { - safe_log(paste("Error creating harvest map:", e$message), "ERROR") - plot(1, type="n", axes=FALSE, xlab="", ylab="") - text(1, 1, "Error creating harvest map", cex=1.5) + safe_log(paste("Error generating anomaly timeline:", e$message), "ERROR") + cat("
Error generating anomaly timeline visualization.
") }) ``` \pagebreak -## Field Status Summary +## Field Age Cohorts Map -The charts below provide an overview of your farm's health and harvest readiness status, showing the distribution of fields across different health categories and maturity stages. +This map shows fields grouped by their crop age (weeks since planting). Understanding the distribution of crop ages helps interpret performance metrics and plan harvest scheduling. -**How the Field Status Chart works:** This bar chart displays the count of fields in each health status category, based on the same CI thresholds described in the Farm Health Status section: -- **Excellent** (dark green): CI ≥ 5.0 -- **Good** (light green): CI 3.5-4.99 -- **Fair** (yellow): CI 2.0-3.49 -- **Poor** (orange): CI 1.0-1.99 -- **Critical** (red): CI < 1.0 +**How to interpret:** +- **Colors**: Different colors represent different age groups (in weeks since planting) +- **Labels**: Each field is labeled with its name for easy reference +- **Legend**: Shows the age ranges in weeks and their corresponding colors -**How the Harvest Readiness Chart works:** This pie chart shows the distribution of fields by harvest readiness, allowing you to see at a glance how many fields are in each stage of development. Fields are categorized based on both age and CI values as described in the Harvest Planning section above. - -```{r render_status_charts, echo=FALSE, fig.height=5, fig.width=10, message=FALSE, warning=FALSE} -# Create field status summary visualization +```{r age_cohort_map, echo=FALSE, fig.height=8, fig.width=10, message=FALSE, warning=FALSE} +# Generate age cohort map tryCatch({ - # Create field status charts - status_chart <- create_summary_stats(farm_health_data) + # Use the imported function to create the age cohort map + age_cohort_map <- create_age_cohort_map( + field_boundaries = AllPivots0, + harvesting_data = harvesting_data + ) - # Print the chart - print(status_chart) - - # Create a second row with harvest readiness chart - harvest_chart <- create_harvest_readiness_chart(farm_health_data) - - # Print the chart - print(harvest_chart) -}, error = function(e) { - safe_log(paste("Error creating status summary charts:", e$message), "ERROR") - plot(1, type="n", axes=FALSE, xlab="", ylab="") - text(1, 1, "Error creating status summary charts", cex=1.5) -}) -``` - -## Priority Fields Requiring Attention - -The chart below highlights fields that require immediate management attention based on their health scores and anomaly detection. These should be prioritized for field inspections. - -**How it works:** This chart shows fields with priority levels 1-3 (critical, high, and medium): -- Fields are ordered by priority level, with the most critical fields on the left -- Bar height represents the Chlorophyll Index (CI) value -- Bar colors indicate priority level: red (critical), orange (high), yellow (medium) -- Text labels show the detected anomaly type for each field - -The table below the chart provides detailed metrics for these priority fields, including CI values, weekly changes, anomaly types, and harvest status. Only fields requiring management attention (priority levels 1-3) are included. - -```{r render_priority_fields_chart, echo=FALSE, fig.height=5, fig.width=10, message=FALSE, warning=FALSE} -# Create priority fields chart -tryCatch({ - # Create and display priority fields chart - priority_chart <- create_priority_fields_chart(farm_health_data) - - # Print the chart - print(priority_chart) - - # Create a table of priority fields - priority_table <- farm_health_data %>% - dplyr::filter(priority_level <= 3) %>% - dplyr::arrange(priority_level, field) %>% - dplyr::select( - Field = field, - Status = status, - `CI Value` = mean_ci, - `Weekly Change` = ci_change, - `Anomaly Type` = anomaly_type, - `Age (Weeks)` = age_weeks, - `Harvest Status` = harvest_readiness - ) - - # Display the table if there are priority fields - if (nrow(priority_table) > 0) { - knitr::kable(priority_table, caption = "Priority Fields Requiring Management Attention") - } else { - cat("No priority fields requiring immediate attention this week.") - } + # Display the map + print(age_cohort_map) }, error = function(e) { - safe_log(paste("Error creating priority fields chart:", e$message), "ERROR") - cat("Error generating priority fields visualization. See log for details.") + safe_log(paste("Error generating age cohort map:", e$message), "ERROR") + cat("
Error generating age cohort map visualization.
") }) ``` \pagebreak -## Management Recommendations +## Cohort Performance Comparison -```{r render_recommendations, echo=FALSE, results='asis', message=FALSE, warning=FALSE} -# Generate executive recommendations +This visualization compares chlorophyll index (CI) performance across different age groups of fields. This helps identify if certain age groups are performing better or worse than expected. + +**How to interpret:** +- **X-axis**: Field age groups in weeks since planting +- **Y-axis**: Average CI value for fields in that age group +- **Box plots**: Show the distribution of CI values within each age group +- **Line**: Shows the expected CI trajectory based on historical data + +```{r cohort_performance_chart, echo=FALSE, fig.height=8, fig.width=10, message=FALSE, warning=FALSE} +# Generate cohort performance comparison chart tryCatch({ - # Create and display recommendations - recommendations_html <- generate_executive_recommendations(farm_health_data) + # Use the imported function to create the cohort performance chart + cohort_chart <- create_cohort_performance_chart( + field_boundaries = AllPivots0, + ci_current = CI, + harvesting_data = harvesting_data + ) + + # Display the chart + print(cohort_chart) - # Print the HTML recommendations - cat(recommendations_html) }, error = function(e) { - safe_log(paste("Error creating recommendations:", e$message), "ERROR") - cat("

Error generating recommendations. Please see system administrator.

") + safe_log(paste("Error generating cohort performance chart:", e$message), "ERROR") + cat("
Error generating cohort performance visualization.
") }) ``` -## Yield Prediction Overview -This section provides yield predictions for mature fields (over 300 days old) based on their Chlorophyll Index values and growth patterns. These predictions can help with harvest planning and yield forecasting. -```{r render_yield_summary, echo=FALSE, fig.height=5, fig.width=10, message=FALSE, warning=FALSE} -# Create yield summary -tryCatch({ - if (exists("pred_rf_current_season") && nrow(pred_rf_current_season) > 0) { - # Calculate total estimated production - total_yield <- sum(pred_rf_current_season$predicted_Tcha, na.rm = TRUE) - - # Create summary box - cat("
") - cat("

Yield Summary

") - cat("
    ") - cat(sprintf("
  • Total estimated production: %s tonnes/ha
  • ", - format(round(total_yield, 0), big.mark=","))) - cat(sprintf("
  • Number of harvest-ready fields: %d
  • ", - nrow(pred_rf_current_season))) - cat(sprintf("
  • Average predicted yield: %s tonnes/ha
  • ", - format(round(mean(pred_rf_current_season$predicted_Tcha, na.rm=TRUE), 1), big.mark=","))) - cat("
") - cat("
") - - # Display yield prediction table - harvest_ready_fields <- pred_rf_current_season %>% - dplyr::arrange(desc(predicted_Tcha)) %>% - dplyr::select( - Field = field, - `Sub Field` = sub_field, - `Age (Days)` = Age_days, - `Cumulative CI` = total_CI, - `Predicted Yield (Tonnes/ha)` = predicted_Tcha - ) - - knitr::kable(harvest_ready_fields, - caption = "Predicted Yields for Harvest-Ready Fields", - digits = 1) - } else { - cat("
") - cat("

Yield Summary

") - cat("

No fields currently meet harvest readiness criteria (>300 days) for yield prediction.

") - cat("
") - } -}, error = function(e) { - safe_log(paste("Error creating yield summary:", e$message), "ERROR") - cat("

Error generating yield summary. Please see system administrator.

") -}) -``` + + diff --git a/r_app/Rplots.pdf b/r_app/Rplots.pdf deleted file mode 100644 index 154112837244e3b2bf878978b27f444ae6572db4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332961 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≫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

+j%o#Sj-d`V8jwLYHA``(M}j(-a?znIXGB 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 0) { + filtered_files <- c(filtered_files, matching_files) + safe_log(paste("Found", length(matching_files), "files for date", date)) + } + } + + return(filtered_files) +} + +#' Create a Chlorophyll Index (CI) from satellite imagery +#' +#' @param raster_obj A SpatRaster object with Red, Green, Blue, and NIR bands +#' @return A SpatRaster object with a CI band +#' +calculate_ci <- function(raster_obj) { + # Validate input has required bands + if (terra::nlyr(raster_obj) < 4) { + stop("Raster must have at least 4 bands (Red, Green, Blue, NIR)") + } + + # Extract bands (assuming standard order: B, G, R, NIR) + blue_band <- raster_obj[[1]] + green_band <- raster_obj[[2]] + red_band <- raster_obj[[3]] + nir_band <- raster_obj[[4]] + + # CI formula: (NIR / Red) - 1 + # This highlights chlorophyll content in vegetation + ci_raster <- (nir_band / red_band) - 1 + + # Filter extreme values that may result from division operations + ci_raster[ci_raster > 10] <- 10 # Cap max value + ci_raster[ci_raster < 0] <- 0 # Cap min value + + # Name the layer + names(ci_raster) <- "CI" + + return(ci_raster) +} + +#' Create a mask for cloudy pixels and shadows using thresholds +#' +#' @param raster_obj A SpatRaster object with multiple bands +#' @return A binary mask where 1=clear pixel, 0=cloudy or shadow pixel +#' +create_cloud_mask <- function(raster_obj) { + # Extract bands + blue_band <- raster_obj[[1]] + green_band <- raster_obj[[2]] + red_band <- raster_obj[[3]] + nir_band <- raster_obj[[4]] + + # Create initial mask (all pixels valid) + mask <- blue_band * 0 + 1 + + # Calculate indices used for detection + ndvi <- (nir_band - red_band) / (nir_band + red_band) + brightness <- (blue_band + green_band + red_band) / 3 + + # CLOUD DETECTION CRITERIA + # ------------------------ + # Clouds are typically very bright in all bands + bright_pixels <- (blue_band > 0.3) & (green_band > 0.3) & (red_band > 0.3) + + # Snow/high reflectance clouds have high blue values + blue_dominant <- blue_band > (red_band * 1.2) + + # Low NDVI areas that are bright are likely clouds + low_ndvi <- ndvi < 0.1 + + # Combine cloud criteria + cloud_pixels <- bright_pixels & (blue_dominant | low_ndvi) + + # SHADOW DETECTION CRITERIA + # ------------------------ + # Shadows typically have: + # 1. Low overall brightness across all bands + # 2. Lower NIR reflectance + # 3. Can still have reasonable NDVI (if over vegetation) + + # Dark pixels in visible spectrum + dark_pixels <- brightness < 0.1 + + # Low NIR reflectance + low_nir <- nir_band < 0.15 + + # Shadows often have higher blue proportion relative to NIR + blue_nir_ratio <- blue_band / (nir_band + 0.01) # Add small constant to avoid division by zero + blue_enhanced <- blue_nir_ratio > 0.8 + + # Combine shadow criteria + shadow_pixels <- dark_pixels & (low_nir | blue_enhanced) + + # Update mask (0 for cloud or shadow pixels) + mask[cloud_pixels | shadow_pixels] <- 0 + + # Optional: create different values for clouds vs shadows for visualization + # mask[cloud_pixels] <- 0 # Clouds + # mask[shadow_pixels] <- 0 # Shadows + + return(mask) +} + +#' Process satellite image, calculate CI, and crop to field boundaries +#' +#' @param file Path to the satellite image file +#' @param field_boundaries Field boundaries vector object +#' @param output_dir Directory to save the processed raster +#' @return Path to the processed raster file +#' +process_satellite_image <- function(file, field_boundaries, output_dir) { + # Validate inputs + if (!file.exists(file)) { + stop(paste("File not found:", file)) + } + + if (is.null(field_boundaries)) { + stop("Field boundaries are required but were not provided") + } + + # Create output filename + basename_no_ext <- tools::file_path_sans_ext(basename(file)) + output_file <- here::here(output_dir, paste0(basename_no_ext, "_CI.tif")) + + # Process with error handling + tryCatch({ + # Load and prepare raster + loaded_raster <- terra::rast(file) + + # Calculate CI + ci_raster <- calculate_ci(loaded_raster) + + # Create cloud mask + cloud_mask <- create_cloud_mask(loaded_raster) + + # Apply cloud mask to CI + ci_masked <- ci_raster * cloud_mask + + # Crop to field boundaries extent (for efficiency) + field_extent <- terra::ext(field_boundaries) + ci_cropped <- terra::crop(ci_masked, field_extent) + + # Write output + terra::writeRaster(ci_cropped, output_file, overwrite = TRUE) + + safe_log(paste("Successfully processed", basename(file))) + + return(output_file) + + }, error = function(e) { + safe_log(paste("Error processing", basename(file), ":", e$message), "ERROR") + return(NULL) + }) +} + +#' Extract CI statistics for each field +#' +#' @param ci_raster A SpatRaster with CI values +#' @param field_boundaries An sf object with field polygons +#' @return A data frame with CI statistics by field +#' +extract_ci_by_field <- function(ci_raster, field_boundaries) { + # Validate inputs + if (is.null(ci_raster)) { + stop("CI raster is required but was NULL") + } + + if (is.null(field_boundaries) || nrow(field_boundaries) == 0) { + stop("Field boundaries are required but were empty") + } + + # Extract statistics using exact extraction (weighted by coverage) + ci_stats <- exactextractr::exact_extract( + ci_raster, + field_boundaries, + fun = c("mean", "median", "min", "max", "stdev", "count"), + progress = FALSE + ) + + # Add field identifiers + ci_stats$field <- field_boundaries$field + if ("sub_field" %in% names(field_boundaries)) { + ci_stats$sub_field <- field_boundaries$sub_field + } else { + ci_stats$sub_field <- field_boundaries$field + } + + # Add date info + ci_stats$date <- Sys.Date() + + # Clean up names + names(ci_stats) <- gsub("CI\\.", "", names(ci_stats)) + + return(ci_stats) +} + +# ----------------------------------------- +# PART 4: YIELD PREDICTION IMPLEMENTATION +# ----------------------------------------- + +#' Prepare data for yield prediction model +#' +#' @param ci_data Data frame with cumulative CI values +#' @param harvest_data Data frame with harvest information +#' @return Data frame ready for modeling +#' +prepare_yield_prediction_data <- function(ci_data, harvest_data) { + # Join CI and yield data + ci_and_yield <- dplyr::left_join(ci_data, harvest_data, by = c("field", "sub_field", "season")) %>% + dplyr::group_by(sub_field, season) %>% + dplyr::slice(which.max(DOY)) %>% + dplyr::select(field, sub_field, tonnage_ha, cumulative_CI, DOY, season, sub_area) %>% + dplyr::mutate(CI_per_day = cumulative_CI / DOY) + + # Split into training and prediction sets + ci_and_yield_train <- ci_and_yield %>% + as.data.frame() %>% + dplyr::filter(!is.na(tonnage_ha)) + + prediction_yields <- ci_and_yield %>% + as.data.frame() %>% + dplyr::filter(is.na(tonnage_ha)) + + return(list( + train = ci_and_yield_train, + predict = prediction_yields + )) +} + +#' Train a random forest model for yield prediction +#' +#' @param training_data Data frame with training data +#' @param predictors Vector of predictor variable names +#' @param response Name of the response variable +#' @return Trained model +#' +train_yield_model <- function(training_data, predictors = c("cumulative_CI", "DOY", "CI_per_day"), response = "tonnage_ha") { + # Configure model training parameters + ctrl <- caret::trainControl( + method = "cv", + savePredictions = TRUE, + allowParallel = TRUE, + number = 5, + verboseIter = TRUE + ) + + # Train the model with feature selection + set.seed(202) # For reproducibility + model_ffs_rf <- CAST::ffs( + training_data[, predictors], + training_data[, response], + method = "rf", + trControl = ctrl, + importance = TRUE, + withinSE = TRUE, + tuneLength = 5, + na.rm = TRUE + ) + + return(model_ffs_rf) +} + +#' Format predictions into a clean data frame +#' +#' @param predictions Raw prediction results +#' @param newdata Original data frame with field information +#' @return Formatted predictions data frame +#' +prepare_predictions <- function(predictions, newdata) { + return(predictions %>% + as.data.frame() %>% + dplyr::rename(predicted_Tcha = ".") %>% + dplyr::mutate( + sub_field = newdata$sub_field, + field = newdata$field, + Age_days = newdata$DOY, + total_CI = round(newdata$cumulative_CI, 0), + predicted_Tcha = round(predicted_Tcha, 0), + season = newdata$season + ) %>% + dplyr::select(field, sub_field, Age_days, total_CI, predicted_Tcha, season) %>% + dplyr::left_join(., newdata, by = c("field", "sub_field", "season")) + ) +} + +#' Predict yields for mature fields +#' +#' @param model Trained model +#' @param prediction_data Data frame with fields to predict +#' @param min_age Minimum age in days to qualify as mature (default: 300) +#' @return Data frame with yield predictions +#' +predict_yields <- function(model, prediction_data, min_age = 300) { + # Make predictions + predictions <- stats::predict(model, newdata = prediction_data) + + # Format predictions + pred_formatted <- prepare_predictions(predictions, prediction_data) %>% + dplyr::filter(Age_days > min_age) %>% + dplyr::mutate(CI_per_day = round(total_CI / Age_days, 1)) + + return(pred_formatted) +} + +# ------------------------------ +# PART 5: DEMONSTRATION WORKFLOW +# ------------------------------ + +#' Demonstration workflow showing how to use the functions +#' +#' @param end_date The end date for processing satellite images +#' @param offset Number of days to look back +#' @param image_folder Path to the folder containing satellite images +#' @param field_boundaries_path Path to field boundaries shapefile +#' @param output_dir Path to save processed outputs +#' @param harvest_data_path Path to historical harvest data +#' +demo_workflow <- function(end_date = Sys.Date(), offset = 7, + image_folder = "path/to/satellite/images", + field_boundaries_path = "path/to/field_boundaries.shp", + output_dir = "path/to/output", + harvest_data_path = "path/to/harvest_data.csv") { + + # Step 1: Generate date list for processing + dates <- date_list(end_date, offset) + safe_log(paste("Processing data for week", dates$week, "of", dates$year)) + + # Step 2: Load field boundaries + field_boundaries <- sf::read_sf(field_boundaries_path) + safe_log(paste("Loaded", nrow(field_boundaries), "field boundaries")) + + # Step 3: Find satellite images for the specified date range + image_files <- find_satellite_images(image_folder, dates$days_filter) + safe_log(paste("Found", length(image_files), "satellite images for processing")) + + # Step 4: Process each satellite image and calculate CI + ci_files <- list() + for (file in image_files) { + ci_file <- process_satellite_image(file, field_boundaries, output_dir) + if (!is.null(ci_file)) { + ci_files <- c(ci_files, ci_file) + } + } + + # Step 5: Extract CI statistics for each field + ci_stats_list <- list() + for (ci_file in ci_files) { + ci_raster <- terra::rast(ci_file) + ci_stats <- extract_ci_by_field(ci_raster, field_boundaries) + ci_stats_list[[basename(ci_file)]] <- ci_stats + } + + # Combine all stats + all_ci_stats <- dplyr::bind_rows(ci_stats_list) + safe_log(paste("Extracted CI statistics for", nrow(all_ci_stats), "field-date combinations")) + + # Step 6: Prepare for yield prediction + if (file.exists(harvest_data_path)) { + # Load harvest data + harvest_data <- read.csv(harvest_data_path) + safe_log("Loaded harvest data for yield prediction") + + # Make up cumulative_CI data for demonstration purposes + # In a real scenario, this would come from accumulating CI values over time + ci_data <- all_ci_stats %>% + dplyr::group_by(field, sub_field) %>% + dplyr::summarise( + cumulative_CI = sum(mean, na.rm = TRUE), + DOY = n(), # Days of year as the count of observations + season = lubridate::year(max(date, na.rm = TRUE)), + .groups = "drop" + ) + + # Prepare data for modeling + modeling_data <- prepare_yield_prediction_data(ci_data, harvest_data) + + if (nrow(modeling_data$train) > 0) { + # Train yield prediction model + yield_model <- train_yield_model(modeling_data$train) + safe_log("Trained yield prediction model") + + # Predict yields for mature fields + yield_predictions <- predict_yields(yield_model, modeling_data$predict) + safe_log(paste("Generated yield predictions for", nrow(yield_predictions), "fields")) + + # Return results + return(list( + ci_stats = all_ci_stats, + yield_predictions = yield_predictions, + model = yield_model + )) + } else { + safe_log("No training data available for yield prediction", "WARNING") + return(list(ci_stats = all_ci_stats)) + } + } else { + safe_log("Harvest data not found, skipping yield prediction", "WARNING") + return(list(ci_stats = all_ci_stats)) + } +} + +# ------------------------------ +# PART 6: USAGE EXAMPLE +# ------------------------------ + +# Uncomment and modify paths to run the demo workflow +# results <- demo_workflow( +# end_date = "2023-10-01", +# offset = 7, +# image_folder = "data/satellite_images", +# field_boundaries_path = "data/field_boundaries.shp", +# output_dir = "output/processed", +# harvest_data_path = "data/harvest_history.csv" +# ) +# +# # Access results +# ci_stats <- results$ci_stats +# yield_predictions <- results$yield_predictions +# +# # Example: Plot CI distribution by field +# if (require(ggplot2)) { +# ggplot(ci_stats, aes(x = field, y = mean, fill = field)) + +# geom_boxplot() + +# labs(title = "CI Distribution by Field", +# x = "Field", +# y = "Mean CI") + +# theme_minimal() + +# theme(axis.text.x = element_text(angle = 45, hjust = 1)) +# } +# +# # Example: Plot predicted yield vs age +# if (exists("yield_predictions") && require(ggplot2)) { +# ggplot(yield_predictions, aes(x = Age_days, y = predicted_Tcha, color = field)) + +# geom_point(size = 3) + +# geom_text(aes(label = field), hjust = -0.2, vjust = -0.2) + +# labs(title = "Predicted Yield by Field Age", +# x = "Age (Days)", +# y = "Predicted Yield (Tonnes/ha)") + +# theme_minimal() +# } diff --git a/r_app/counting_clouds.R b/r_app/experiments/counting_clouds.R similarity index 100% rename from r_app/counting_clouds.R rename to r_app/experiments/counting_clouds.R diff --git a/r_app/experiments/delete_cloud_exploratoin b/r_app/experiments/delete_cloud_exploratoin new file mode 100644 index 0000000..2cf9a19 --- /dev/null +++ b/r_app/experiments/delete_cloud_exploratoin @@ -0,0 +1,556 @@ +# Cloud and Shadow Detection Analysis +# This script analyzes cloud and shadow detection parameters using the diagnostic GeoTIFF files +# and polygon-based classification to help optimize the detection algorithms + +# Load required packages +library(terra) +library(sf) +library(dplyr) +library(ggplot2) +library(reshape2) +library(exactextractr) # For accurate polygon extraction + +# Define diagnostic directory +diagnostic_dir <- "C:/Users/timon/Resilience BV/4020 SCane ESA DEMO - Documenten/General/4020 SCDEMO Team/4020 TechnicalData/WP3/smartcane/cloud_mask_diagnostics_20250515-164357" + +# Simple logging function for this standalone script +safe_log <- function(message, level = "INFO") { + cat(paste0("[", level, "] ", message, "\n")) +} + +safe_log("Starting cloud detection analysis on diagnostic rasters") + +# Load all diagnostic rasters +safe_log("Loading diagnostic raster files...") + + +# Load original bands +red_band <- terra::rast(file.path(diagnostic_dir, "diagnostic_red_band.tif")) +green_band <- terra::rast(file.path(diagnostic_dir, "diagnostic_green_band.tif")) +blue_band <- terra::rast(file.path(diagnostic_dir, "diagnostic_blue_band.tif")) +nir_band <- terra::rast(file.path(diagnostic_dir, "diagnostic_nir_band.tif")) + +# Load derived indices +brightness <- terra::rast(file.path(diagnostic_dir, "diagnostic_brightness.tif")) +ndvi <- terra::rast(file.path(diagnostic_dir, "diagnostic_ndvi.tif")) +blue_ratio <- terra::rast(file.path(diagnostic_dir, "diagnostic_blue_ratio.tif")) +green_nir_ratio <- terra::rast(file.path(diagnostic_dir, "diagnostic_green_nir_ratio.tif")) +ndwi <- terra::rast(file.path(diagnostic_dir, "diagnostic_ndwi.tif")) + +# Load cloud detection parameters +bright_pixels <- terra::rast(file.path(diagnostic_dir, "param_bright_pixels.tif")) +very_bright_pixels <- terra::rast(file.path(diagnostic_dir, "param_very_bright_pixels.tif")) +blue_dominant <- terra::rast(file.path(diagnostic_dir, "param_blue_dominant.tif")) +low_ndvi <- terra::rast(file.path(diagnostic_dir, "param_low_ndvi.tif")) +green_dominant_nir <- terra::rast(file.path(diagnostic_dir, "param_green_dominant_nir.tif")) +high_ndwi <- terra::rast(file.path(diagnostic_dir, "param_high_ndwi.tif")) + +# Load shadow detection parameters +dark_pixels <- terra::rast(file.path(diagnostic_dir, "param_dark_pixels.tif")) +very_dark_pixels <- terra::rast(file.path(diagnostic_dir, "param_very_dark_pixels.tif")) +low_nir <- terra::rast(file.path(diagnostic_dir, "param_low_nir.tif")) +shadow_ndvi <- terra::rast(file.path(diagnostic_dir, "param_shadow_ndvi.tif")) +low_red_to_blue <- terra::rast(file.path(diagnostic_dir, "param_low_red_to_blue.tif")) +high_blue_to_nir_ratio <- terra::rast(file.path(diagnostic_dir, "param_high_blue_to_nir_ratio.tif")) +blue_nir_ratio_raw <- terra::rast(file.path(diagnostic_dir, "param_blue_nir_ratio_raw.tif")) +red_blue_ratio_raw <- terra::rast(file.path(diagnostic_dir, "param_red_blue_ratio_raw.tif")) + +# Load edge detection parameters +brightness_focal_sd <- terra::rast(file.path(diagnostic_dir, "param_brightness_focal_sd.tif")) +edge_pixels <- terra::rast(file.path(diagnostic_dir, "param_edge_pixels.tif")) + +# Load final masks +cloud_mask <- terra::rast(file.path(diagnostic_dir, "mask_cloud.tif")) +shadow_mask <- terra::rast(file.path(diagnostic_dir, "mask_shadow.tif")) +combined_mask <- terra::rast(file.path(diagnostic_dir, "mask_combined.tif")) +dilated_mask <- terra::rast(file.path(diagnostic_dir, "mask_dilated.tif")) + +safe_log("Raster data loaded successfully") + +# Try to read the classification polygons if they exist +tryCatch({ + # Check if the classes.geojson file exists in the diagnostic directory + classes_file <- file.path(diagnostic_dir, "classes.geojson") + + # If no classes file in this directory, look for the most recent one + if (!file.exists(classes_file)) { + # Look in parent directory for most recent cloud_mask_diagnostics folder + potential_dirs <- list.dirs(path = dirname(diagnostic_dir), + full.names = TRUE, + recursive = FALSE) + + # Filter for diagnostic directories and find the most recent one that has classes.geojson + diagnostic_dirs <- potential_dirs[grepl("cloud_mask_diagnostics_", potential_dirs)] + + for (dir in rev(sort(diagnostic_dirs))) { # Reverse sort to get newest first + potential_file <- file.path(dir, "classes.geojson") + if (file.exists(potential_file)) { + classes_file <- potential_file + break + } + } + } + + # Check if we found a classes file + if (file.exists(classes_file)) { + safe_log(paste("Using classification polygons from:", classes_file)) + + # Load the classification polygons + classifications <- sf::st_read(classes_file, quiet = TRUE) %>% rename(class = type) + # Remove empty polygons + classifications <- classifications[!sf::st_is_empty(classifications), ] + + # Create a list to store all rasters we want to extract values from + extraction_rasters <- list( + # Original bands + red = red_band, + green = green_band, + blue = blue_band, + nir = nir_band, + + # Derived indices + brightness = brightness, + ndvi = ndvi, + blue_ratio = blue_ratio, + green_nir_ratio = green_nir_ratio, + ndwi = ndwi, + + # Cloud detection parameters + bright_pixels = terra::ifel(bright_pixels, 1, 0), + very_bright_pixels = terra::ifel(very_bright_pixels, 1, 0), + blue_dominant = terra::ifel(blue_dominant, 1, 0), + low_ndvi = terra::ifel(low_ndvi, 1, 0), + green_dominant_nir = terra::ifel(green_dominant_nir, 1, 0), + high_ndwi = terra::ifel(high_ndwi, 1, 0), + + # Shadow detection parameters + dark_pixels = terra::ifel(dark_pixels, 1, 0), + very_dark_pixels = terra::ifel(very_dark_pixels, 1, 0), + low_nir = terra::ifel(low_nir, 1, 0), + shadow_ndvi = terra::ifel(shadow_ndvi, 1, 0), + low_red_to_blue = terra::ifel(low_red_to_blue, 1, 0), + high_blue_to_nir_ratio = terra::ifel(high_blue_to_nir_ratio, 1, 0), + blue_nir_ratio_raw = (blue_band / (nir_band + 0.01)), + red_blue_ratio_raw = (red_band / (blue_band + 0.01)), + + # Edge detection parameters + brightness_focal_sd = brightness_focal_sd, + edge_pixels = terra::ifel(edge_pixels, 1, 0), + + # Final masks + cloud_mask = terra::ifel(cloud_mask, 1, 0), + shadow_mask = terra::ifel(shadow_mask, 1, 0), + combined_mask = terra::ifel(combined_mask, 1, 0), + dilated_mask = terra::ifel(dilated_mask, 1, 0) + ) + + # Create a stack of all rasters + extraction_stack <- terra::rast(extraction_rasters) + + # User-provided simplified extraction for mean statistics per polygon + pivot_stats_sf <- cbind( + classifications, + round(exactextractr::exact_extract(extraction_stack, classifications, fun = "mean", progress = FALSE), 2) + ) %>% + sf::st_drop_geometry() + + # Convert to a regular data frame for easier downstream processing + all_stats <- sf::st_drop_geometry(pivot_stats_sf) + + # Ensure 'class_name' column exists, if not, use 'class' as 'class_name' + if (!("class_name" %in% colnames(all_stats)) && ("class" %in% colnames(all_stats))) { + all_stats$class_name <- all_stats$class + + if (length(valid_class_ids) == 0) { + safe_log("No valid (non-NA) class IDs found for exactextractr processing.", "WARNING") + } + + for (class_id in valid_class_ids) { + # Subset polygons for this class + class_polygons_sf <- classifications[which(classifications$class == class_id), ] # Use which for NA-safe subsetting + + if (nrow(class_polygons_sf) == 0) { + safe_log(paste("Skipping empty class (no polygons after filtering):", class_id), "WARNING") + next + } + + tryCatch({ + safe_log(paste("Processing class:", class_id)) + + # Check if the polygon overlaps with the raster extent (check based on the combined extent of class polygons) + rast_extent <- terra::ext(extraction_stack) + poly_extent <- sf::st_bbox(class_polygons_sf) + + if (poly_extent["xmin"] > rast_extent["xmax"] || + poly_extent["xmax"] < rast_extent["xmin"] || + poly_extent["ymin"] > rast_extent["ymax"] || + poly_extent["ymax"] < rast_extent["ymin"]) { + safe_log(paste("Skipping class that doesn't overlap with raster:", class_id), "WARNING") + next + } + + # exact_extract will process each feature in class_polygons_sf + # and return a list of data frames (one per feature) + per_polygon_stats_list <- exactextractr::exact_extract( + extraction_stack, + class_polygons_sf, + function(values, coverage_fraction) { + # Filter pixels by coverage (e.g., >50% of the pixel is covered by the polygon) + valid_pixels_idx <- coverage_fraction > 0.5 + df_filtered <- values[valid_pixels_idx, , drop = FALSE] + + if (nrow(df_filtered) == 0) { + # If no pixels meet coverage, return a data frame with NAs + # to maintain structure, matching expected column names. + # Column names are derived from the extraction_stack + stat_cols <- paste0(names(extraction_stack), "_mean") + na_df <- as.data.frame(matrix(NA_real_, nrow = 1, ncol = length(stat_cols))) + names(na_df) <- stat_cols + return(na_df) + } + + # Calculate mean for each band (column in df_filtered) + stats_per_band <- lapply(names(df_filtered), function(band_name) { + col_data <- df_filtered[[band_name]] + if (length(col_data) > 0 && sum(!is.na(col_data)) > 0) { + mean_val <- mean(col_data, na.rm = TRUE) + return(setNames(mean_val, paste0(band_name, "_mean"))) + } else { + return(setNames(NA_real_, paste0(band_name, "_mean"))) + } + }) + + # Combine all stats (named values) into a single named vector then data frame + return(as.data.frame(t(do.call(c, stats_per_band)))) + }, + summarize_df = FALSE, # Important: get a list of DFs, one per polygon + force_df = TRUE # Ensure the output of the summary function is treated as a DF + ) + + # Combine all stats for this class if we have any + if (length(per_polygon_stats_list) > 0) { + # per_polygon_stats_list is now a list of single-row data.frames + class_stats_df <- do.call(rbind, per_polygon_stats_list) + + # Remove rows that are all NA (from polygons with no valid pixels) + class_stats_df <- class_stats_df[rowSums(is.na(class_stats_df)) < ncol(class_stats_df), ] + + if (nrow(class_stats_df) > 0) { + # Add class information + class_stats_df$class <- class_id + # Get class_name from the first polygon (assuming it's consistent for the class_id) + # Ensure class_polygons_sf is not empty before accessing class_name + if ("class_name" %in% names(class_polygons_sf) && nrow(class_polygons_sf) > 0) { + class_stats_df$class_name <- as.character(class_polygons_sf$class_name[1]) + } else { + class_stats_df$class_name <- as.character(class_id) # Fallback + } + + # Add to overall results + all_stats <- rbind(all_stats, class_stats_df) + safe_log(paste("Successfully extracted data for", nrow(class_stats_df), "polygons in class", class_id)) + } else { + safe_log(paste("No valid data extracted for class (after NA removal):", class_id), "WARNING") + } + } else { + safe_log(paste("No data frames returned by exact_extract for class:", class_id), "WARNING") + } + }, error = function(e) { + safe_log(paste("Error processing class", class_id, "with exact_extract:", e$message), "ERROR") + }) + } + # Save the extracted statistics to a CSV file + if (nrow(all_stats) > 0) { + stats_file <- file.path(diagnostic_dir, "class_spectral_stats_mean.csv") # New filename + write.csv(all_stats, stats_file, row.names = FALSE) + safe_log(paste("Saved MEAN spectral statistics by class to:", stats_file)) + } else { + safe_log("No statistics were generated to save.", "WARNING") + } + + # Calculate optimized thresholds for cloud/shadow detection (using only _mean columns) + if (nrow(all_stats) > 0 && ncol(all_stats) > 2) { # Check if all_stats has data and parameter columns + threshold_results <- data.frame( + parameter = character(), + best_threshold = numeric(), + direction = character(), + target_class = character(), + vs_class = character(), + accuracy = numeric(), + stringsAsFactors = FALSE + ) + + # Define class pairs to analyze + class_pairs <- list( + # Cloud vs various surfaces + c("cloud", "crop"), + c("cloud", "bare_soil_dry"), + c("cloud", "bare_soil_wet"), + + # Shadow vs various surfaces + c("shadow_over_crop", "crop"), + c("shadow_over_bare_soil", "bare_soil_dry"), + c("shadow_over_bare_soil", "bare_soil_wet") + ) + + # For now, let's assume all _mean parameters derived from extraction_rasters are relevant for clouds/shadows + # This part might need more specific logic if you want to distinguish cloud/shadow params cloud_params <- grep("_mean$", names(extraction_rasters), value = TRUE) + params logic + # Parameters to analyze for shadows (now only _mean versions)tatistics by class to:", stats_file)) + shadow_params <- cloud_params # Simplified: using the same set for now, adjust if specific shadow params are needed +lds for cloud/shadow detection + # Find optimal thresholdsframe( + if (length(class_pairs) > 0 && (length(cloud_params) > 0 || length(shadow_params) > 0)) { + for (pair in class_pairs) {c(), + target_class <- pair[1](), + vs_class <- pair[2](), + vs_class = character(), + # Select appropriate parameters based on whether we're analyzing clouds or shadows accuracy = numeric(), + if (grepl("cloud", target_class)) { + params_to_check <- cloud_params + } else { + params_to_check <- shadow_paramsto analyze + } + + # For each parameter, find the best threshold to separate the classesc("cloud", "crop"), + for (param in params_to_check) { + if (param %in% colnames(all_stats)) { + # Get values for both classes + target_values <- all_stats[all_stats$class_name == target_class, param] + vs_values <- all_stats[all_stats$class_name == vs_class, param] c("shadow_over_crop", "crop"), + c("shadow_over_bare_soil", "bare_soil_dry"), + if (length(target_values) > 0 && length(vs_values) > 0) {_soil_wet") + # Calculate mean and sd for both classes + target_mean <- mean(target_values, na.rm = TRUE) + target_sd <- sd(target_values, na.rm = TRUE)# Parameters to analyze for clouds + vs_mean <- mean(vs_values, na.rm = TRUE), "blue_ratio_mean", "ndvi_mean", + vs_sd <- sd(vs_values, na.rm = TRUE) + + + # Determine if higher or lower values indicate the target classshadow_params <- c("brightness_mean", "dark_pixels_mean", "very_dark_pixels_mean", + if (target_mean > vs_mean) {r_mean", "shadow_ndvi_mean", "blue_nir_ratio_raw_mean", + direction <- ">"_ratio_raw_mean", "low_red_to_blue_mean") + # Try different thresholds + potential_thresholds <- seq(olds + min(min(target_values, na.rm = TRUE), vs_mean + 0.5 * vs_sd),r (pair in class_pairs) { + max(max(vs_values, na.rm = TRUE), target_mean - 0.5 * target_sd), + length.out = 20 + ) + } else { appropriate parameters based on whether we're analyzing clouds or shadows + direction <- "<"{ + # Try different thresholds params_to_check <- cloud_params + potential_thresholds <- seq(} else { + min(min(vs_values, na.rm = TRUE), target_mean + 0.5 * target_sd), + max(max(target_values, na.rm = TRUE), vs_mean - 0.5 * vs_sd), + length.out = 20 + )st threshold to separate the classes + } + + # Calculate accuracy for each threshold# Get values for both classes + best_accuracy <- 0_class, param] + best_threshold <- ifelse(direction == ">", min(potential_thresholds), max(potential_thresholds))e == vs_class, param] + + for (threshold in potential_thresholds) {ues) > 0) { + if (direction == ">") { + correct_target <- sum(target_values > threshold, na.rm = TRUE)a.rm = TRUE) + correct_vs <- sum(vs_values <= threshold, na.rm = TRUE)target_sd <- sd(target_values, na.rm = TRUE) + } else { vs_mean <- mean(vs_values, na.rm = TRUE) + correct_target <- sum(target_values < threshold, na.rm = TRUE) + correct_vs <- sum(vs_values >= threshold, na.rm = TRUE) + } + er values indicate the target class + total_target <- length(target_values) + total_vs <- length(vs_values) + + accuracy <- (correct_target + correct_vs) / (total_target + total_vs)lds <- seq( + min(min(target_values, na.rm = TRUE), vs_mean + 0.5 * vs_sd), + if (accuracy > best_accuracy) {max(vs_values, na.rm = TRUE), target_mean - 0.5 * target_sd), + best_accuracy <- accuracy0 + best_threshold <- threshold + } + } + + # Add to resultslds <- seq( + threshold_results <- rbind(threshold_results, data.frame( min(min(vs_values, na.rm = TRUE), target_mean + 0.5 * target_sd), + parameter = gsub("_mean", "", param), max(max(target_values, na.rm = TRUE), vs_mean - 0.5 * vs_sd), + best_threshold = best_threshold, length.out = 20 + direction = direction, + target_class = target_class, + vs_class = vs_class, + accuracy = best_accuracy,# Calculate accuracy for each threshold + stringsAsFactors = FALSE + ))direction == ">", min(potential_thresholds), max(potential_thresholds)) + } + } + }ction == ">") { + } + } + else { + # Save threshold results correct_target <- sum(target_values < threshold, na.rm = TRUE) + thresholds_file <- file.path(diagnostic_dir, "optimal_thresholds.csv")shold, na.rm = TRUE) + write.csv(threshold_results, thresholds_file, row.names = FALSE) + safe_log(paste("Saved optimal threshold recommendations to:", thresholds_file)) + + # Generate box plots for key parameters to visualize class differencestotal_vs <- length(vs_values) + if (requireNamespace("ggplot2", quietly = TRUE) && nrow(all_stats) > 0) { + # Reshape data for plotting (only _mean columns) + correct_vs) / (total_target + total_vs) + mean_cols <- grep("_mean$", colnames(all_stats), value = TRUE) + if (length(mean_cols) > 0) {f (accuracy > best_accuracy) { + plot_data <- reshape2::melt(all_stats, best_accuracy <- accuracy + id.vars = c("class", "class_name"), best_threshold <- threshold + measure.vars = mean_cols, # Use only _mean columns + variable.name = "parameter", + value.name = "value") + + # Create directory for plotsnd(threshold_results, data.frame( + plots_dir <- file.path(diagnostic_dir, "class_plots"), param), + dir.create(plots_dir, showWarnings = FALSE, recursive = TRUE)t_threshold, + + # Create plots for selected key parameters (ensure they are _mean versions)ass, + # Adjust key_params to reflect the new column names (e.g., "brightness_mean")vs_class = vs_class, + key_params_plot <- intersect(c( accuracy = best_accuracy, + "brightness_mean", "ndvi_mean", "blue_ratio_mean", "ndwi_mean", stringsAsFactors = FALSE + "blue_nir_ratio_raw_mean", "red_blue_ratio_raw_mean" )) + ), mean_cols) # Ensure these params exist } + } + for (param in key_params_plot) { + # param_data <- plot_data[plot_data$parameter == param,] # Exact match for parameter + # No, grepl was fine if plot_data only contains _mean parameters now. + # Let's ensure plot_data only has the _mean parameters for simplicity here. + param_data <- plot_data[plot_data$parameter == param, ]thresholds_file <- file.path(diagnostic_dir, "optimal_thresholds.csv") + + if (nrow(param_data) > 0) {file)) + param_name <- gsub("_mean", "", param) + o visualize class differences + p <- ggplot2::ggplot(param_data, ggplot2::aes(x = class_name, y = value, fill = class_name)) +s) > 0) { + ggplot2::geom_boxplot() + + ggplot2::theme_minimal() + + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, hjust = 1)) + id.vars = c("class", "class_name"), + ggplot2::labs(ariable.name = "parameter", + title = paste("Distribution of", param_name, "by Land Cover Class"), + x = "Class", + y = param_name,# Create directory for plots + fill = "Class"ass_plots") + )_dir, showWarnings = FALSE, recursive = TRUE) + + # Save the plot + plot_file <- file.path(plots_dir, paste0("boxplot_", param_name, ".png"))ey_params <- c( + ggplot2::ggsave(plot_file, p, width = 10, height = 6, dpi = 150) "brightness_mean", "ndvi_mean", "blue_ratio_mean", "ndwi_mean", + }, "red_blue_ratio_raw_mean" + } + + # Create a summary plot showing multiple parameters + summary_data <- plot_data[plot_data$parameter %in% ram_data <- plot_data[grepl(param, plot_data$parameter),] + c("brightness_mean", "ndvi_mean", + "blue_nir_ratio_raw_mean", "red_blue_ratio_raw_mean"),] "", param) + + if (nrow(summary_data) > 0) {= class_name)) + + # Clean up parameter names for displayboxplot() + + summary_data$parameter <- gsub("_mean$", "", summary_data$parameter) # Remove _mean suffix for display + summary_data$parameter <- gsub("_raw$", "", summary_data$parameter) # Keep this if _raw_mean was a thing(axis.text.x = ggplot2::element_text(angle = 45, hjust = 1)) + + + # Create faceted plot"Distribution of", param_name, "by Land Cover Class"), + p <- ggplot2::ggplot(summary_data, x = "Class", + ggplot2::aes(x = class_name, y = value, fill = class_name)) + y = param_name, + ggplot2::geom_boxplot() +ss" + ggplot2::facet_wrap(~parameter, scales = "free_y") + + ggplot2::theme_minimal() + + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, hjust = 1)) + # Save the plot + ggplot2::labs( plot_file <- file.path(plots_dir, paste0("boxplot_", param_name, ".png")) + title = "Key Spectral Parameters by Land Cover Class", ggplot2::ggsave(plot_file, p, width = 10, height = 6, dpi = 150) + x = "Class", + y = "Value", + fill = "Class" + ) + summary_data <- plot_data[plot_data$parameter %in% + # Save the summary plot"brightness_mean", "ndvi_mean", + summary_file <- file.path(plots_dir, "spectral_parameters_summary.png")atio_raw_mean", "red_blue_ratio_raw_mean"),] + ggplot2::ggsave(summary_file, p, width = 12, height = 8, dpi = 150) + } + # Clean up parameter names for display + safe_log(paste("Generated spectral parameter plots in:", plots_dir))r <- gsub("_mean", "", summary_data$parameter) + }w", "", summary_data$parameter) + } else { + safe_log("Package 'exactextractr' not available. Install it for more accurate polygon extraction.", "WARNING") + + # Fall back to simple extraction using terra (calculating only mean)::aes(x = class_name, y = value, fill = class_name)) + + class_stats <- data.frame() + _wrap(~parameter, scales = "free_y") + + valid_class_names_fallback <- unique(classifications$class_name) + valid_class_names_fallback <- valid_class_names_fallback[!is.na(valid_class_names_fallback)](axis.text.x = ggplot2::element_text(angle = 45, hjust = 1)) + + + if (length(valid_class_names_fallback) == 0) {pectral Parameters by Land Cover Class", + safe_log("No valid (non-NA) class names found for fallback terra::extract processing.", "WARNING") x = "Class", + } y = "Value", + + for (class_name_fb in valid_class_names_fallback) { + class_polygons_fb <- classifications[which(classifications$class_name == class_name_fb), ] + # Save the summary plot + if(nrow(class_polygons_fb) == 0) next summary_file <- file.path(plots_dir, "spectral_parameters_summary.png") +) + class_vect_fb <- terra::vect(class_polygons_fb) } + + # Extract values for each raster + for (i in seq_along(extraction_rasters)) {} + raster_name <- names(extraction_rasters)[i] + # terra::extract returns a data.frame with ID and layer valuesractr' not available. Install it for more accurate polygon extraction.", "WARNING") + # For multiple polygons, it will have multiple rows per polygon if ID is not unique + # We need to aggregate per polygon, then per class if not already handled by exact_extract style + # However, for simplicity here, let's assume terra::extract gives one value per polygon for the mean + # This part of fallback might need more robust aggregation if polygons are complex + r (class_name in unique(classifications$class_name)) { + # A more robust terra::extract approach for means per polygon:s[classifications$class_name == class_name, ] + extracted_values_list <- terra::extract(extraction_rasters[[i]], class_vect_fb, fun = mean, na.rm = TRUE, ID = FALSE) + # extracted_values_list will be a data.frame with one column (the layer) and rows corresponding to polygons + + if (nrow(extracted_values_list) > 0 && ncol(extracted_values_list) > 0) {r (i in seq_along(extraction_rasters)) { + # Average over all polygons in this class for this rastertraction_rasters)[i] + mean_val_for_class <- mean(extracted_values_list[[1]], na.rm = TRUE)ct(extraction_rasters[[i]], class_vect) + + if (!is.na(mean_val_for_class)) { + stats_row <- data.frame( + class_name = class_name_fb, # Using class_name as the identifier here + parameter = paste0(raster_name, "_mean"), + value = mean_val_for_class), + ) TRUE), + class_stats <- rbind(class_stats, stats_row) sd = sd(values[,2], na.rm = TRUE), + } min = min(values[,2], na.rm = TRUE), + } + } ) + } + class_stats <- rbind(class_stats, stats) + # Save the statistics (if any were generated) } + if(nrow(class_stats) > 0) { + # Reshape class_stats from long to wide for consistency if needed, or save as is. + # For now, save as long format. + stats_file <- file.path(diagnostic_dir, "class_spectral_stats_simple_mean_long.csv") + write.csv(class_stats, stats_file, row.names = FALSE) stats_file <- file.path(diagnostic_dir, "class_spectral_stats_simple.csv") + safe_log(paste("Saved simple MEAN (long format) spectral statistics by class to:", stats_file)) write.csv(class_stats, stats_file, row.names = FALSE) + } else {e spectral statistics by class to:", stats_file)) + safe_log("No statistics generated by fallback method.", "WARNING") + } + }ve RMarkdown generation + + # Remove RMarkdown generation + # safe_log("RMarkdown report generation has been removed as per user request.") + NING") + } else {} + safe_log("No classification polygons file (classes.geojson) found. Skipping spectral analysis.", "WARNING")}, error = function(e) { + }cessing or spectral analysis:", e$message), "ERROR") +}, error = function(e) {}) + safe_log(paste("Error in classification polygon processing or spectral analysis:", e$message), "ERROR") +}) detection analysis script finished.") + +safe_log("Cloud detection analysis script finished.")# Clean up workspace +rm(list = ls()) +# Clean up workspace +rm(list = ls()) + + + + + + + + + diff --git a/r_app/experiments/delete_cloud_exploratoin.R b/r_app/experiments/delete_cloud_exploratoin.R new file mode 100644 index 0000000..356258e --- /dev/null +++ b/r_app/experiments/delete_cloud_exploratoin.R @@ -0,0 +1,191 @@ +```r +# Cloud detection analysis script + +# Load necessary libraries +library(terra) +library(exactextractr) +library(sf) +library(dplyr) +library(ggplot2) +library(tidyr) +library(reshape2) + +# Define file paths (these should be set to your actual file locations) +classes_file <- "path/to/classes.geojson" +rasters_dir <- "path/to/rasters" +diagnostic_dir <- "path/to/diagnostics" + +# Helper function for logging +safe_log <- function(message, level = "INFO") { + timestamp <- format(Sys.time(), "%Y-%m-%d %H:%M:%S") + cat(paste0("[", timestamp, "] [", level, "] ", message, "\n")) +} + +# Main processing block +# Load classification polygons +safe_log(paste("Loading classification polygons from:", classes_file)) +classifications <- sf::st_read(classes_file, quiet = TRUE) +# Ensure the CRS is set (assuming WGS84 here, adjust if necessary) +safe_log("No CRS found for the classifications. Setting to WGS84 (EPSG:4326).", "WARNING") +sf::st_crs(classifications) <- 4326 +# List all raster files in the directory +raster_files <- list.files(rasters_dir, pattern = "\\.tif$", full.names = TRUE) +# Create a named vector for extraction_rasters based on base names +extraction_rasters <- setNames(raster_files, tools::file_path_sans_ext(basename(raster_files))) +# Create a stack of all rasters +extraction_stack <- terra::rast(extraction_rasters) +# User-provided simplified extraction for mean statistics per polygon +safe_log("Extracting mean statistics per polygon using exactextractr...") +all_stats <- cbind( + classifications, + round(exactextractr::exact_extract(extraction_stack, classifications, fun = "mean", progress = FALSE), 2) +) %>% + sf::st_drop_geometry() # Ensures all_stats is a data frame +# Ensure 'class_name' column exists, if not, use 'class' as 'class_name' +all_stats$class_name <- all_stats$class + +# Save the extracted statistics to a CSV file +stats_file <- file.path(diagnostic_dir, "polygon_mean_spectral_stats.csv") +write.csv(all_stats, stats_file, row.names = FALSE) + + + +safe_log(paste("Saved mean spectral statistics per polygon to:", stats_file)) +# Calculate optimized thresholds for cloud/shadow detection +threshold_results <- data.frame( + parameter = character(), + best_threshold = numeric(), + direction = character(), + target_class = character(), + vs_class = character(), + accuracy = numeric(), + stringsAsFactors = FALSE +) +class_pairs <- list( + c("cloud", "crop"), + c("cloud", "bare_soil_dry"), + c("cloud", "bare_soil_wet"), + c("shadow_over_crop", "crop"), + c("shadow_over_bare_soil", "bare_soil_dry"), + c("shadow_over_bare_soil", "bare_soil_wet") +) +cloud_detection_params_for_threshold <- intersect( + c("mean.brightness", "mean.very_bright_pixels", "mean.blue_dominant", "mean.low_ndvi", "mean.green_dominant_nir", "mean.high_ndwi", "mean.blue_ratio", "mean.ndvi"), + colnames(all_stats) +) +shadow_detection_params_for_threshold <- intersect( + c("mean.brightness", "mean.dark_pixels", "mean.very_dark_pixels", "mean.low_nir", "mean.shadow_ndvi", "mean.low_red_to_blue", "mean.high_blue_to_nir_ratio", "mean.blue_nir_ratio_raw", "mean.red_blue_ratio_raw"), + colnames(all_stats) +) +for (pair in class_pairs) { + target_class <- pair[1] + vs_class <- pair[2] + params_to_check <- c(cloud_detection_params_for_threshold, shadow_detection_params_for_threshold) + for (param in params_to_check) { + target_values <- all_stats[all_stats$class_name == target_class, param] + vs_values <- all_stats[all_stats$class_name == vs_class, param] + target_values <- target_values[!is.na(target_values)] + vs_values <- vs_values[!is.na(vs_values)] + # Only proceed if both groups have at least one value + if (length(target_values) > 0 && length(vs_values) > 0) { + target_mean <- mean(target_values) + target_sd <- sd(target_values) + vs_mean <- mean(vs_values) + vs_sd <- sd(vs_values) + target_sd[is.na(target_sd)] <- 0 + vs_sd[is.na(vs_sd)] <- 0 + direction <- ifelse(target_mean > vs_mean, ">", "<") + all_values <- c(target_values, vs_values) + min_val <- min(all_values) + max_val <- max(all_values) + # Only proceed if min and max are finite and not equal + if (is.finite(min_val) && is.finite(max_val) && min_val != max_val) { + potential_thresholds <- seq(min_val, max_val, length.out = 20) + best_accuracy <- -1 + best_threshold <- ifelse(direction == ">", min(potential_thresholds), max(potential_thresholds)) + for (threshold in potential_thresholds) { + if (direction == ">") { + correct_target <- sum(target_values > threshold) + correct_vs <- sum(vs_values <= threshold) + } else { + correct_target <- sum(target_values < threshold) + correct_vs <- sum(vs_values >= threshold) + } + accuracy <- (correct_target + correct_vs) / (length(target_values) + length(vs_values)) + if (accuracy > best_accuracy) { + best_accuracy <- accuracy + best_threshold <- threshold + } + } + threshold_results <- rbind(threshold_results, data.frame( + parameter = param, + best_threshold = best_threshold, + direction = direction, + target_class = target_class, + vs_class = vs_class, + accuracy = best_accuracy, + stringsAsFactors = FALSE + )) + } + } + } +} + +thresholds_file <- file.path(diagnostic_dir, "optimal_thresholds.csv") +write.csv(threshold_results, thresholds_file, row.names = FALSE) + +safe_log(paste("Saved optimal threshold recommendations to:", thresholds_file)) + +# Fix: get plot_measure_cols by matching raster base names to all_stats columns with 'mean.' prefix +plot_measure_cols <- intersect(names(extraction_rasters), gsub('^mean\\.', '', colnames(all_stats))) +plot_data <- reshape2::melt( + all_stats, + id.vars = c("class", "class_name"), + measure.vars = paste0("mean.", plot_measure_cols), + variable.name = "parameter", + value.name = "value" +) +# Remove 'mean.' prefix from parameter column for clarity +plot_data$parameter <- sub("^mean\\.", "", plot_data$parameter) + +plots_dir <- file.path(diagnostic_dir, "class_plots") +dir.create(plots_dir, showWarnings = FALSE, recursive = TRUE) +key_params_for_plot_list <- c("brightness", "ndvi", "blue_ratio", "ndwi", + "blue_nir_ratio_raw", "red_blue_ratio_raw") +key_params_to_plot <- intersect(key_params_for_plot_list, plot_measure_cols) +for (param_to_plot in key_params_to_plot) { + param_data_subset <- plot_data[plot_data$parameter == param_to_plot, ] + p <- ggplot2::ggplot(param_data_subset, ggplot2::aes(x = class_name, y = value, fill = class_name)) + + ggplot2::geom_boxplot() + + ggplot2::theme_minimal() + + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, hjust = 1)) + + ggplot2::labs( + title = paste("Distribution of", param_to_plot, "by Land Cover Class"), + x = "Class", + y = param_to_plot, + fill = "Class" + ) + plot_file <- file.path(plots_dir, paste0("boxplot_", param_to_plot, ".png")) + ggplot2::ggsave(plot_file, p, width = 10, height = 6, dpi = 150) +} +summary_params_for_plot_list <- c("brightness", "ndvi", + "blue_nir_ratio_raw", "red_blue_ratio_raw") +summary_params_to_plot <- intersect(summary_params_for_plot_list, plot_measure_cols) +summary_data_subset <- plot_data[plot_data$parameter %in% summary_params_to_plot,] +p_summary <- ggplot2::ggplot(summary_data_subset, ggplot2::aes(x = class_name, y = value, fill = class_name)) + + ggplot2::geom_boxplot() + + ggplot2::facet_wrap(~parameter, scales = "free_y") + + ggplot2::theme_minimal() + + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, hjust = 1), + strip.text = ggplot2::element_text(size = 8)) + + ggplot2::labs( + title = "Summary of Key Spectral Parameters by Land Cover Class", + x = "Class", + y = "Value", + fill = "Class" + ) +summary_file <- file.path(plots_dir, "spectral_parameters_summary.png") +ggplot2::ggsave(summary_file, p_summary, width = 12, height = 8, dpi = 150) +safe_log(paste("Generated spectral parameter plots in:", plots_dir)) +safe_log("Cloud detection analysis script finished.") +``` \ No newline at end of file diff --git a/r_app/experiments/executive_summary/CI_report_executive_summary.Rmd b/r_app/experiments/executive_summary/CI_report_executive_summary.Rmd new file mode 100644 index 0000000..2d4c014 --- /dev/null +++ b/r_app/experiments/executive_summary/CI_report_executive_summary.Rmd @@ -0,0 +1,718 @@ +--- +params: + ref: "word-styles-reference-var1.docx" + output_file: CI_report.docx + report_date: "2024-08-28" + data_dir: "Chemba" + mail_day: "Wednesday" + borders: TRUE + use_breaks: FALSE +output: + # html_document: + # toc: yes + # df_print: paged + word_document: + reference_docx: !expr file.path("word-styles-reference-var1.docx") + toc: yes +editor_options: + chunk_output_type: console +--- + +```{r setup_parameters, include=FALSE} +# Set up basic report parameters from input values +report_date <- params$report_date +mail_day <- params$mail_day +borders <- params$borders +use_breaks <- params$use_breaks # Whether to use breaks or continuous spectrum in visualizations + +# Environment setup notes (commented out) +# # Activeer de renv omgeving +# renv::activate() +# renv::deactivate() +# # Optioneel: Herstel de omgeving als dat nodig is +# # Je kunt dit commentaar geven als je het normaal niet wilt uitvoeren +# renv::restore() +``` + +```{r load_libraries, message=FALSE, warning=FALSE, include=FALSE} +# Configure knitr options +knitr::opts_chunk$set(warning = FALSE, message = FALSE) + +# Path management +library(here) + +# Spatial data libraries +library(sf) +library(terra) +library(exactextractr) +# library(raster) - Removed as it's no longer maintained + +# Data manipulation and visualization +library(tidyverse) # Includes dplyr, ggplot2, etc. +library(tmap) +library(lubridate) +library(zoo) + +# Machine learning +library(rsample) +library(caret) +library(randomForest) +library(CAST) + +# Load custom utility functions +tryCatch({ + source("report_utils.R") +}, error = function(e) { + message(paste("Error loading report_utils.R:", e$message)) + # Try alternative path if the first one fails + tryCatch({ + source(here::here("r_app", "report_utils.R")) + }, error = function(e) { + stop("Could not load report_utils.R from either location: ", e$message) + }) +}) + +# Load executive report utilities +tryCatch({ + source("executive_report_utils.R") +}, error = function(e) { + message(paste("Error loading executive_report_utils.R:", e$message)) + # Try alternative path if the first one fails + tryCatch({ + source(here::here("r_app", "executive_report_utils.R")) + }, error = function(e) { + stop("Could not load executive_report_utils.R from either location: ", e$message) + }) +}) + +safe_log("Successfully loaded utility functions") +``` + +```{r initialize_project_config, message=FALSE, warning=FALSE, include=FALSE} +# Set the project directory from parameters +project_dir <- params$data_dir + +# Source project parameters with error handling +tryCatch({ + source(here::here("r_app", "parameters_project.R")) +}, error = function(e) { + stop("Error loading parameters_project.R: ", e$message) +}) + +# Log initial configuration +safe_log("Starting the R Markdown script") +safe_log(paste("mail_day params:", params$mail_day)) +safe_log(paste("report_date params:", params$report_date)) +safe_log(paste("mail_day variable:", mail_day)) +``` + +```{r calculate_dates_and_weeks, message=FALSE, warning=FALSE, include=FALSE} +# Set locale for consistent date formatting +Sys.setlocale("LC_TIME", "C") + +# Initialize date variables from parameters +today <- as.character(report_date) +mail_day_as_character <- as.character(mail_day) + +# Calculate week days +report_date_as_week_day <- weekdays(lubridate::ymd(today)) +days_of_week <- c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") + +# Calculate initial week number +week <- lubridate::week(today) +safe_log(paste("Initial week calculation:", week, "today:", today)) + +# Calculate previous dates for comparisons +today_minus_1 <- as.character(lubridate::ymd(today) - 7) +today_minus_2 <- as.character(lubridate::ymd(today) - 14) +today_minus_3 <- as.character(lubridate::ymd(today) - 21) + +# Log the weekday calculations for debugging +safe_log(paste("Report date weekday:", report_date_as_week_day)) +safe_log(paste("Weekday index:", which(days_of_week == report_date_as_week_day))) +safe_log(paste("Mail day:", mail_day_as_character)) +safe_log(paste("Mail day index:", which(days_of_week == mail_day_as_character))) + +# Adjust week calculation based on mail day +if (which(days_of_week == report_date_as_week_day) > which(days_of_week == mail_day_as_character)) { + safe_log("Adjusting weeks because of mail day") + week <- lubridate::week(today) + 1 + today_minus_1 <- as.character(lubridate::ymd(today)) + today_minus_2 <- as.character(lubridate::ymd(today) - 7) + today_minus_3 <- as.character(lubridate::ymd(today) - 14) +} + +# Generate subtitle for report +subtitle_var <- paste("Report generated on", Sys.Date()) + +# Calculate week numbers for previous weeks +week_minus_1 <- week - 1 +week_minus_2 <- week - 2 +week_minus_3 <- week - 3 + +# Format current week with leading zeros +week <- sprintf("%02d", week) + +# Get years for each date +year <- lubridate::year(today) +year_1 <- lubridate::year(today_minus_1) +year_2 <- lubridate::year(today_minus_2) +year_3 <- lubridate::year(today_minus_3) +``` + +```{r data, message=TRUE, warning=TRUE, include=FALSE} +# Load CI index data with error handling +tryCatch({ + CI_quadrant <- readRDS(here::here(cumulative_CI_vals_dir, "All_pivots_Cumulative_CI_quadrant_year_v2.rds")) + safe_log("Successfully loaded CI quadrant data") +}, error = function(e) { + stop("Error loading CI quadrant data: ", e$message) +}) + +# Get file paths for different weeks using the utility function +tryCatch({ + path_to_week_current = get_week_path(weekly_CI_mosaic, today, 0) + path_to_week_minus_1 = get_week_path(weekly_CI_mosaic, today, -1) + path_to_week_minus_2 = get_week_path(weekly_CI_mosaic, today, -2) + path_to_week_minus_3 = get_week_path(weekly_CI_mosaic, today, -3) + + # Log the calculated paths + safe_log("Required mosaic paths:") + safe_log(paste("Path to current week:", path_to_week_current)) + safe_log(paste("Path to week minus 1:", path_to_week_minus_1)) + safe_log(paste("Path to week minus 2:", path_to_week_minus_2)) + safe_log(paste("Path to week minus 3:", path_to_week_minus_3)) + + # Validate that files exist + if (!file.exists(path_to_week_current)) warning("Current week mosaic file does not exist: ", path_to_week_current) + if (!file.exists(path_to_week_minus_1)) warning("Week minus 1 mosaic file does not exist: ", path_to_week_minus_1) + if (!file.exists(path_to_week_minus_2)) warning("Week minus 2 mosaic file does not exist: ", path_to_week_minus_2) + if (!file.exists(path_to_week_minus_3)) warning("Week minus 3 mosaic file does not exist: ", path_to_week_minus_3) + + # Load raster data with terra functions + CI <- terra::rast(path_to_week_current)$CI + CI_m1 <- terra::rast(path_to_week_minus_1)$CI + CI_m2 <- terra::rast(path_to_week_minus_2)$CI + CI_m3 <- terra::rast(path_to_week_minus_3)$CI + +}, error = function(e) { + stop("Error loading raster data: ", e$message) +}) +``` + +```{r calculate_difference_rasters, message=TRUE, warning=TRUE, include=FALSE} +# Calculate difference rasters for comparisons +tryCatch({ + # Calculate weekly difference + last_week_dif_raster_abs <- (CI - CI_m1) + safe_log("Calculated weekly difference raster") + + # Calculate three-week difference + three_week_dif_raster_abs <- (CI - CI_m3) + safe_log("Calculated three-week difference raster") +}, error = function(e) { + safe_log(paste("Error calculating difference rasters:", e$message), "ERROR") + # Create placeholder rasters if calculations fail + if (!exists("last_week_dif_raster_abs")) { + last_week_dif_raster_abs <- CI * 0 + } + if (!exists("three_week_dif_raster_abs")) { + three_week_dif_raster_abs <- CI * 0 + } +}) +``` + +```{r load_field_boundaries, message=TRUE, warning=TRUE, include=FALSE} +# Load field boundaries from parameters +tryCatch({ + AllPivots0 <- field_boundaries_sf + safe_log("Successfully loaded field boundaries") +}, error = function(e) { + stop("Error loading field boundaries: ", e$message) +}) +``` + +```{r create_farm_health_data, message=FALSE, warning=FALSE, include=FALSE} +# Create farm health summary data from scratch +tryCatch({ + # Ensure we have the required data + if (!exists("AllPivots0") || !exists("CI") || !exists("CI_m1") || !exists("harvesting_data")) { + stop("Required input data (field boundaries, CI data, or harvesting data) not available") + } + + safe_log("Starting to calculate farm health data") + + # Get unique field names + fields <- unique(AllPivots0$field) + safe_log(paste("Found", length(fields), "unique fields")) + + # Initialize result dataframe + farm_health_data <- data.frame( + field = character(), + mean_ci = numeric(), + ci_change = numeric(), + ci_uniformity = numeric(), + status = character(), + anomaly_type = character(), + priority_level = numeric(), + age_weeks = numeric(), + harvest_readiness = character(), + stringsAsFactors = FALSE + ) + + # Process each field with robust error handling + for (field_name in fields) { + tryCatch({ + safe_log(paste("Processing field:", field_name)) + + # Get field boundary + field_shape <- AllPivots0 %>% dplyr::filter(field == field_name) + + # Skip if field shape is empty + if (nrow(field_shape) == 0) { + safe_log(paste("Empty field shape for", field_name), "WARNING") + next + } + + # Get field age from harvesting data - use direct filtering to avoid dplyr errors + field_age_data <- NULL + if (exists("harvesting_data") && !is.null(harvesting_data) && nrow(harvesting_data) > 0) { + field_age_data <- harvesting_data[harvesting_data$field == field_name, ] + if (nrow(field_age_data) > 0) { + field_age_data <- field_age_data[order(field_age_data$season_start, decreasing = TRUE), ][1, ] + } + } + + # Default age if not available + field_age_weeks <- if (!is.null(field_age_data) && nrow(field_age_data) > 0 && !is.na(field_age_data$age)) { + field_age_data$age + } else { + 10 # Default age + } + + # Extract CI values using terra's extract function which is more robust + ci_values <- terra::extract(CI, field_shape) + ci_prev_values <- terra::extract(CI_m1, field_shape) + + # Check if we got valid data + if (nrow(ci_values) == 0 || nrow(ci_prev_values) == 0) { + safe_log(paste("No CI data extracted for field", field_name), "WARNING") + # Add a placeholder row with Unknown status + farm_health_data <- rbind(farm_health_data, data.frame( + field = field_name, + mean_ci = NA, + ci_change = NA, + ci_uniformity = NA, + status = "Unknown", + anomaly_type = "Unknown", + priority_level = 5, # Low priority + age_weeks = field_age_weeks, + harvest_readiness = "Unknown", + stringsAsFactors = FALSE + )) + next + } + + # Calculate metrics - Handle NA values properly + ci_column <- if ("CI" %in% names(ci_values)) "CI" else colnames(ci_values)[1] + ci_prev_column <- if ("CI" %in% names(ci_prev_values)) "CI" else colnames(ci_prev_values)[1] + + mean_ci <- mean(ci_values[[ci_column]], na.rm=TRUE) + mean_ci_prev <- mean(ci_prev_values[[ci_prev_column]], na.rm=TRUE) + ci_change <- mean_ci - mean_ci_prev + ci_sd <- sd(ci_values[[ci_column]], na.rm=TRUE) + ci_uniformity <- ci_sd / max(0.1, mean_ci) # Avoid division by zero + + # Handle NaN or Inf results + if (is.na(mean_ci) || is.na(ci_change) || is.na(ci_uniformity) || + is.nan(mean_ci) || is.nan(ci_change) || is.nan(ci_uniformity) || + is.infinite(mean_ci) || is.infinite(ci_change) || is.infinite(ci_uniformity)) { + safe_log(paste("Invalid calculation results for field", field_name), "WARNING") + # Add a placeholder row with Unknown status + farm_health_data <- rbind(farm_health_data, data.frame( + field = field_name, + mean_ci = NA, + ci_change = NA, + ci_uniformity = NA, + status = "Unknown", + anomaly_type = "Unknown", + priority_level = 5, # Low priority + age_weeks = field_age_weeks, + harvest_readiness = "Unknown", + stringsAsFactors = FALSE + )) + next + } + + # Determine field status + status <- dplyr::case_when( + mean_ci >= 5 ~ "Excellent", + mean_ci >= 3.5 ~ "Good", + mean_ci >= 2 ~ "Fair", + mean_ci >= 1 ~ "Poor", + TRUE ~ "Critical" + ) + + # Determine anomaly type + anomaly_type <- dplyr::case_when( + ci_change > 2 ~ "Potential Weed Growth", + ci_change < -2 ~ "Potential Weeding/Harvesting", + ci_uniformity > 0.5 ~ "High Variability", + mean_ci < 1 ~ "Low Vigor", + TRUE ~ "None" + ) + + # Calculate priority level (1-5, with 1 being highest priority) + priority_score <- dplyr::case_when( + mean_ci < 1 ~ 1, # Critical - highest priority + anomaly_type == "Potential Weed Growth" ~ 2, + anomaly_type == "High Variability" ~ 3, + ci_change < -1 ~ 4, + TRUE ~ 5 # No urgent issues + ) + + # Determine harvest readiness + harvest_readiness <- dplyr::case_when( + field_age_weeks >= 52 & mean_ci >= 4 ~ "Ready for harvest", + field_age_weeks >= 48 & mean_ci >= 3.5 ~ "Approaching harvest", + field_age_weeks >= 40 & mean_ci >= 3 ~ "Mid-maturity", + field_age_weeks >= 12 ~ "Growing", + TRUE ~ "Early stage" + ) + + # Add to summary data + farm_health_data <- rbind(farm_health_data, data.frame( + field = field_name, + mean_ci = round(mean_ci, 2), + ci_change = round(ci_change, 2), + ci_uniformity = round(ci_uniformity, 2), + status = status, + anomaly_type = anomaly_type, + priority_level = priority_score, + age_weeks = field_age_weeks, + harvest_readiness = harvest_readiness, + stringsAsFactors = FALSE + )) + + }, error = function(e) { + safe_log(paste("Error processing field", field_name, ":", e$message), "ERROR") + # Add a placeholder row with Error status + farm_health_data <<- rbind(farm_health_data, data.frame( + field = field_name, + mean_ci = NA, + ci_change = NA, + ci_uniformity = NA, + status = "Unknown", + anomaly_type = "Unknown", + priority_level = 5, # Low priority since we don't know the status + age_weeks = NA, + harvest_readiness = "Unknown", + stringsAsFactors = FALSE + )) + }) + } + + # Make sure we have data for all fields + if (nrow(farm_health_data) == 0) { + safe_log("No farm health data was created", "ERROR") + stop("Failed to create farm health data") + } + + # Sort by priority level + farm_health_data <- farm_health_data %>% dplyr::arrange(priority_level, field) + + safe_log(paste("Successfully created farm health data for", nrow(farm_health_data), "fields")) + +}, error = function(e) { + safe_log(paste("Error creating farm health data:", e$message), "ERROR") + # Create an empty dataframe that can be filled by the verification chunk +}) +``` + +```{r verify_farm_health_data, message=FALSE, warning=FALSE, include=FALSE} +# Verify farm_health_data exists and has content +if (!exists("farm_health_data") || nrow(farm_health_data) == 0) { + safe_log("farm_health_data not found or empty, generating default data", "WARNING") + + # Create minimal fallback data + tryCatch({ + # Get fields from boundaries + fields <- unique(AllPivots0$field) + + # Create basic data frame with just field names + farm_health_data <- data.frame( + field = fields, + mean_ci = rep(NA, length(fields)), + ci_change = rep(NA, length(fields)), + ci_uniformity = rep(NA, length(fields)), + status = rep("Unknown", length(fields)), + anomaly_type = rep("Unknown", length(fields)), + priority_level = rep(5, length(fields)), # Low priority + age_weeks = rep(NA, length(fields)), + harvest_readiness = rep("Unknown", length(fields)), + stringsAsFactors = FALSE + ) + + safe_log("Created fallback farm_health_data with basic field information") + }, error = function(e) { + safe_log(paste("Error creating fallback farm_health_data:", e$message), "ERROR") + farm_health_data <<- data.frame( + field = character(), + mean_ci = numeric(), + ci_change = numeric(), + ci_uniformity = numeric(), + status = character(), + anomaly_type = character(), + priority_level = numeric(), + age_weeks = numeric(), + harvest_readiness = character(), + stringsAsFactors = FALSE + ) + }) +} +``` + +```{r calculate_farm_health, message=FALSE, warning=FALSE, include=FALSE} +# Calculate farm health summary metrics +tryCatch({ + # Generate farm health summary data + farm_health_data <- generate_farm_health_summary( + field_boundaries = AllPivots0, + ci_current = CI, + ci_previous = CI_m1, + harvesting_data = harvesting_data + ) + + # Log the summary data + safe_log(paste("Generated farm health summary with", nrow(farm_health_data), "fields")) + +}, error = function(e) { + safe_log(paste("Error in farm health calculation:", e$message), "ERROR") + # Create empty dataframe if calculation failed + farm_health_data <- data.frame( + field = character(), + mean_ci = numeric(), + ci_change = numeric(), + ci_uniformity = numeric(), + status = character(), + anomaly_type = character(), + priority_level = numeric(), + age_weeks = numeric(), + harvest_readiness = character(), + stringsAsFactors = FALSE + ) +}) +``` + +```{r advanced_analytics_functions, message=FALSE, warning=FALSE, include=FALSE} +# ADVANCED ANALYTICS FUNCTIONS +# Note: These functions are now imported from executive_report_utils.R +# The utility file contains functions for velocity/acceleration indicators, +# anomaly timeline creation, age cohort mapping, and cohort performance charts +safe_log("Using analytics functions from executive_report_utils.R") +``` + +\pagebreak +# Advanced Analytics + +## Field Health Velocity and Acceleration + +This visualization shows the rate of change in field health (velocity) and whether that change is speeding up or slowing down (acceleration). These metrics help identify if farm conditions are improving, stable, or deteriorating. + +**How to interpret:** +- **Velocity gauge:** Shows the average weekly change in CI values across all fields + - Positive values (green/right side): Farm health improving week-to-week + - Negative values (red/left side): Farm health declining week-to-week + +- **Acceleration gauge:** Shows whether the rate of change is increasing or decreasing + - Positive values (green/right side): Change is accelerating or improving faster + - Negative values (red/left side): Change is decelerating or slowing down + +- **4-Week Trend:** Shows the overall CI value trajectory for the past month + +```{r render_velocity_acceleration, echo=FALSE, fig.height=8, fig.width=10, message=FALSE, warning=FALSE} +# Render the velocity and acceleration indicators +tryCatch({ + # Create and display the indicators using the imported utility function + velocity_plot <- create_velocity_acceleration_indicator( + health_data = farm_health_data, + ci_current = CI, + ci_prev1 = CI_m1, + ci_prev2 = CI_m2, + ci_prev3 = CI_m3, + field_boundaries = AllPivots0 + ) + + # Print the visualization + print(velocity_plot) + + # Create a table of fields with significant velocity changes + field_ci_metrics <- list() + + # Process each field to get metrics + fields <- unique(AllPivots0$field) + for (field_name in fields) { + tryCatch({ + # Get field boundary + field_shape <- AllPivots0 %>% dplyr::filter(field == field_name) + if (nrow(field_shape) == 0) next + + # Extract CI values + ci_curr_values <- terra::extract(CI, field_shape) + ci_prev1_values <- terra::extract(CI_m1, field_shape) + + # Calculate metrics + mean_ci_curr <- mean(ci_curr_values$CI, na.rm = TRUE) + mean_ci_prev1 <- mean(ci_prev1_values$CI, na.rm = TRUE) + velocity <- mean_ci_curr - mean_ci_prev1 + + # Store in list + field_ci_metrics[[field_name]] <- list( + field = field_name, + ci_current = mean_ci_curr, + ci_prev1 = mean_ci_prev1, + velocity = velocity + ) + + }, error = function(e) { + safe_log(paste("Error processing field", field_name, "for velocity table:", e$message), "WARNING") + }) + } + + # Convert list to data frame + velocity_df <- do.call(rbind, lapply(field_ci_metrics, function(x) { + data.frame( + field = x$field, + ci_current = round(x$ci_current, 2), + ci_prev1 = round(x$ci_prev1, 2), + velocity = round(x$velocity, 2), + direction = ifelse(x$velocity >= 0, "Improving", "Declining") + ) + })) + + # Select top 5 positive and top 5 negative velocity fields + top_positive <- velocity_df %>% + dplyr::filter(velocity > 0) %>% + dplyr::arrange(desc(velocity)) %>% + dplyr::slice_head(n = 5) + + top_negative <- velocity_df %>% + dplyr::filter(velocity < 0) %>% + dplyr::arrange(velocity) %>% + dplyr::slice_head(n = 5) + + # Display the tables if we have data + if (nrow(top_positive) > 0) { + cat("

Fields with Fastest Improvement

") + knitr::kable(top_positive %>% + dplyr::select(Field = field, + `Current CI` = ci_current, + `Previous CI` = ci_prev1, + `Weekly Change` = velocity)) + } + + if (nrow(top_negative) > 0) { + cat("

Fields with Fastest Decline

") + knitr::kable(top_negative %>% + dplyr::select(Field = field, + `Current CI` = ci_current, + `Previous CI` = ci_prev1, + `Weekly Change` = velocity)) + } + +}, error = function(e) { + safe_log(paste("Error rendering velocity visualization:", e$message), "ERROR") + cat("
Error generating velocity visualization.
") +}) +``` + +\pagebreak +## Field Anomaly Timeline + +This visualization shows the history of detected anomalies in fields across the monitoring period. It helps identify persistent issues or improvements over time. + +**How to interpret:** +- **X-axis**: Dates of satellite observations +- **Y-axis**: Fields grouped by similar characteristics +- **Colors**: Red indicates negative anomalies, green indicates positive anomalies +- **Size**: Larger markers indicate stronger anomalies + +```{r anomaly_timeline, echo=FALSE, fig.height=8, fig.width=10, message=FALSE, warning=FALSE} +# Generate anomaly timeline visualization +tryCatch({ + # Use the imported function to create the anomaly timeline + anomaly_timeline <- create_anomaly_timeline( + field_boundaries = AllPivots0, + ci_data = CI_quadrant, + days_to_include = 90 # Show last 90 days of data + ) + + # Display the timeline + print(anomaly_timeline) + +}, error = function(e) { + safe_log(paste("Error generating anomaly timeline:", e$message), "ERROR") + cat("
Error generating anomaly timeline visualization.
") +}) +``` + +\pagebreak +## Field Age Cohorts Map + +This map shows fields grouped by their crop age (weeks since planting). Understanding the distribution of crop ages helps interpret performance metrics and plan harvest scheduling. + +**How to interpret:** +- **Colors**: Different colors represent different age groups (in weeks since planting) +- **Labels**: Each field is labeled with its name for easy reference +- **Legend**: Shows the age ranges in weeks and their corresponding colors + +```{r age_cohort_map, echo=FALSE, fig.height=8, fig.width=10, message=FALSE, warning=FALSE} +# Generate age cohort map +tryCatch({ + # Use the imported function to create the age cohort map + age_cohort_map <- create_age_cohort_map( + field_boundaries = AllPivots0, + harvesting_data = harvesting_data + ) + + # Display the map + print(age_cohort_map) + +}, error = function(e) { + safe_log(paste("Error generating age cohort map:", e$message), "ERROR") + cat("
Error generating age cohort map visualization.
") +}) +``` + +\pagebreak +## Cohort Performance Comparison + +This visualization compares chlorophyll index (CI) performance across different age groups of fields. This helps identify if certain age groups are performing better or worse than expected. + +**How to interpret:** +- **X-axis**: Field age groups in weeks since planting +- **Y-axis**: Average CI value for fields in that age group +- **Box plots**: Show the distribution of CI values within each age group +- **Line**: Shows the expected CI trajectory based on historical data + +```{r cohort_performance_chart, echo=FALSE, fig.height=8, fig.width=10, message=FALSE, warning=FALSE} +# Generate cohort performance comparison chart +tryCatch({ + # Use the imported function to create the cohort performance chart + cohort_chart <- create_cohort_performance_chart( + field_boundaries = AllPivots0, + ci_current = CI, + harvesting_data = harvesting_data + ) + + # Display the chart + print(cohort_chart) + +}, error = function(e) { + safe_log(paste("Error generating cohort performance chart:", e$message), "ERROR") + cat("
Error generating cohort performance visualization.
") +}) +``` + + + diff --git a/r_app/experiments/executive_summary/CI_report_executive_summary_v2.Rmd b/r_app/experiments/executive_summary/CI_report_executive_summary_v2.Rmd new file mode 100644 index 0000000..6e33804 --- /dev/null +++ b/r_app/experiments/executive_summary/CI_report_executive_summary_v2.Rmd @@ -0,0 +1,1531 @@ +--- +params: + ref: "word-styles-reference-var1.docx" + output_file: CI_report.docx + report_date: "2025-06-16" + data_dir: "simba" + mail_day: "Wednesday" + borders: TRUE + use_breaks: FALSE +output: + # html_document: + # toc: yes + # df_print: paged + word_document: + reference_docx: !expr file.path("word-styles-reference-var1.docx") + toc: yes +editor_options: + chunk_output_type: console +--- + +```{r setup_parameters, include=FALSE} +# Set up basic report parameters from input values +report_date <- params$report_date +mail_day <- params$mail_day +borders <- params$borders +use_breaks <- params$use_breaks # Whether to use breaks or continuous spectrum in visualizations + +# Environment setup notes (commented out) +# # Activeer de renv omgeving +# renv::activate() +# renv::deactivate() +# # Optioneel: Herstel de omgeving als dat nodig is +# # Je kunt dit commentaar geven als je het normaal niet wilt uitvoeren +# renv::restore() +``` + +```{r load_libraries, message=FALSE, warning=FALSE, include=FALSE} +# Configure knitr options +knitr::opts_chunk$set(warning = FALSE, message = FALSE) + +# Path management +library(here) + +# Spatial data libraries +library(sf) +library(terra) +library(exactextractr) +# library(raster) - Removed as it's no longer maintained + +# Data manipulation and visualization +library(tidyverse) # Includes dplyr, ggplot2, etc. +library(tmap) +library(lubridate) +library(zoo) + +# Machine learning +library(rsample) +library(caret) +library(randomForest) +library(CAST) + +# Load custom utility functions +# tryCatch({ +# source("report_utils.R") +# }, error = function(e) { +# message(paste("Error loading report_utils.R:", e$message)) +# # Try alternative path if the first one fails +# tryCatch({ + source(here::here("r_app", "report_utils.R")) +# }, error = function(e) { +# stop("Could not load report_utils.R from either location: ", e$message) +# }) +# }) + +# Load executive report utilities +# tryCatch({ +# source("executive_report_utils.R") +# }, error = function(e) { +# message(paste("Error loading executive_report_utils.R:", e$message)) +# # Try alternative path if the first one fails +# tryCatch({ + source(here::here("r_app", "exec_dashboard", "executive_report_utils.R")) +# }, error = function(e) { +# stop("Could not load executive_report_utils.R from either location: ", e$message) +# }) +# }) +``` + +```{r initialize_project_config, message=FALSE, warning=FALSE, include=FALSE} +# Set the project directory from parameters +project_dir <- params$data_dir + +# Source project parameters with error handling +# tryCatch({ + source(here::here("r_app", "parameters_project.R")) +# }, error = function(e) { +# stop("Error loading parameters_project.R: ", e$message) +# }) + +# Log initial configuration +safe_log("Starting the R Markdown script") +safe_log(paste("mail_day params:", params$mail_day)) +safe_log(paste("report_date params:", params$report_date)) +safe_log(paste("mail_day variable:", mail_day)) +``` + +```{r calculate_dates_and_weeks, message=FALSE, warning=FALSE, include=FALSE} +# Set locale for consistent date formatting +Sys.setlocale("LC_TIME", "C") + +# Initialize date variables from parameters +today <- as.character(report_date) +mail_day_as_character <- as.character(mail_day) + +# Calculate week days +report_date_as_week_day <- weekdays(lubridate::ymd(today)) +days_of_week <- c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") + +# Calculate initial week number +week <- lubridate::week(today) +safe_log(paste("Initial week calculation:", week, "today:", today)) + +# Calculate previous dates for comparisons +today_minus_1 <- as.character(lubridate::ymd(today) - 7) +today_minus_2 <- as.character(lubridate::ymd(today) - 14) +today_minus_3 <- as.character(lubridate::ymd(today) - 21) + +# Log the weekday calculations for debugging +safe_log(paste("Report date weekday:", report_date_as_week_day)) +safe_log(paste("Weekday index:", which(days_of_week == report_date_as_week_day))) +safe_log(paste("Mail day:", mail_day_as_character)) +safe_log(paste("Mail day index:", which(days_of_week == mail_day_as_character))) + +# Adjust week calculation based on mail day +if (which(days_of_week == report_date_as_week_day) > which(days_of_week == mail_day_as_character)) { + safe_log("Adjusting weeks because of mail day") + week <- lubridate::week(today) + 1 + today_minus_1 <- as.character(lubridate::ymd(today)) + today_minus_2 <- as.character(lubridate::ymd(today) - 7) + today_minus_3 <- as.character(lubridate::ymd(today) - 14) +} + +# Generate subtitle for report +subtitle_var <- paste("Report generated on", Sys.Date()) + +# Calculate week numbers for previous weeks +week_minus_1 <- week - 1 +week_minus_2 <- week - 2 +week_minus_3 <- week - 3 + +# Format current week with leading zeros +week <- sprintf("%02d", week) + +# Get years for each date +year <- lubridate::year(today) +year_1 <- lubridate::year(today_minus_1) +year_2 <- lubridate::year(today_minus_2) +year_3 <- lubridate::year(today_minus_3) +``` + +```{r data, message=TRUE, warning=TRUE, include=FALSE} +# Load CI index data with error handling +tryCatch({ + CI_quadrant <- readRDS(here::here(cumulative_CI_vals_dir, "All_pivots_Cumulative_CI_quadrant_year_v2.rds")) + safe_log("Successfully loaded CI quadrant data") +}, error = function(e) { + stop("Error loading CI quadrant data: ", e$message) +}) + +# Get file paths for different weeks using the utility function +tryCatch({ + path_to_week_current = get_week_path(weekly_CI_mosaic, today, 0) + path_to_week_minus_1 = get_week_path(weekly_CI_mosaic, today, -1) + path_to_week_minus_2 = get_week_path(weekly_CI_mosaic, today, -2) + path_to_week_minus_3 = get_week_path(weekly_CI_mosaic, today, -3) + + # Log the calculated paths + safe_log("Required mosaic paths:") + safe_log(paste("Path to current week:", path_to_week_current)) + safe_log(paste("Path to week minus 1:", path_to_week_minus_1)) + safe_log(paste("Path to week minus 2:", path_to_week_minus_2)) + safe_log(paste("Path to week minus 3:", path_to_week_minus_3)) + + # Validate that files exist + if (!file.exists(path_to_week_current)) warning("Current week mosaic file does not exist: ", path_to_week_current) + if (!file.exists(path_to_week_minus_1)) warning("Week minus 1 mosaic file does not exist: ", path_to_week_minus_1) + if (!file.exists(path_to_week_minus_2)) warning("Week minus 2 mosaic file does not exist: ", path_to_week_minus_2) + if (!file.exists(path_to_week_minus_3)) warning("Week minus 3 mosaic file does not exist: ", path_to_week_minus_3) + + # Load raster data with terra functions + CI <- terra::rast(path_to_week_current)$CI + CI_m1 <- terra::rast(path_to_week_minus_1)$CI + CI_m2 <- terra::rast(path_to_week_minus_2)$CI + CI_m3 <- terra::rast(path_to_week_minus_3)$CI + +}, error = function(e) { + stop("Error loading raster data: ", e$message) +}) +``` + +```{r calculate_difference_rasters, message=TRUE, warning=TRUE, include=FALSE} +# Calculate difference rasters for comparisons +tryCatch({ + # Calculate weekly difference + last_week_dif_raster_abs <- (CI - CI_m1) + safe_log("Calculated weekly difference raster") + + # Calculate three-week difference + three_week_dif_raster_abs <- (CI - CI_m3) + safe_log("Calculated three-week difference raster") +}, error = function(e) { + safe_log(paste("Error calculating difference rasters:", e$message), "ERROR") + # Create placeholder rasters if calculations fail + if (!exists("last_week_dif_raster_abs")) { + last_week_dif_raster_abs <- CI * 0 + } + if (!exists("three_week_dif_raster_abs")) { + three_week_dif_raster_abs <- CI * 0 + } +}) +``` + +```{r load_field_boundaries, message=TRUE, warning=TRUE, include=FALSE} +# Load field boundaries from parameters +tryCatch({ + AllPivots0 <- field_boundaries_sf + safe_log("Successfully loaded field boundaries") +}, error = function(e) { + stop("Error loading field boundaries: ", e$message) +}) +``` + +```{r create_farm_health_data, message=FALSE, warning=FALSE, include=FALSE} +# Create farm health summary data from scratch +tryCatch({ + # Ensure we have the required data + if (!exists("AllPivots0") || !exists("CI") || !exists("CI_m1") || !exists("harvesting_data")) { + stop("Required input data (field boundaries, CI data, or harvesting data) not available") + } + + safe_log("Starting to calculate farm health data") + + # Get unique field names + fields <- unique(AllPivots0$field) + safe_log(paste("Found", length(fields), "unique fields")) + + # Initialize result dataframe + farm_health_data <- data.frame( + field = character(), + mean_ci = numeric(), + ci_change = numeric(), + ci_uniformity = numeric(), + status = character(), + anomaly_type = character(), + priority_level = numeric(), + age_weeks = numeric(), + harvest_readiness = character(), + stringsAsFactors = FALSE + ) + + # Process each field with robust error handling + for (field_name in fields) { + tryCatch({ + safe_log(paste("Processing field:", field_name)) + + # Get field boundary + field_shape <- AllPivots0 %>% dplyr::filter(field == field_name) + + # Skip if field shape is empty + if (nrow(field_shape) == 0) { + safe_log(paste("Empty field shape for", field_name), "WARNING") + next + } + + # Get field age from harvesting data - use direct filtering to avoid dplyr errors + field_age_data <- NULL + if (exists("harvesting_data") && !is.null(harvesting_data) && nrow(harvesting_data) > 0) { + field_age_data <- harvesting_data[harvesting_data$field == field_name, ] + if (nrow(field_age_data) > 0) { + field_age_data <- field_age_data[order(field_age_data$season_start, decreasing = TRUE), ][1, ] + } + } + + # Default age if not available + field_age_weeks <- if (!is.null(field_age_data) && nrow(field_age_data) > 0 && !is.na(field_age_data$age)) { + field_age_data$age + } else { + 10 # Default age + } + + # Extract CI values using terra's extract function which is more robust + ci_values <- terra::extract(CI, field_shape) + ci_prev_values <- terra::extract(CI_m1, field_shape) + + # Check if we got valid data + if (nrow(ci_values) == 0 || nrow(ci_prev_values) == 0) { + safe_log(paste("No CI data extracted for field", field_name), "WARNING") + # Add a placeholder row with Unknown status + farm_health_data <- rbind(farm_health_data, data.frame( + field = field_name, + mean_ci = NA, + ci_change = NA, + ci_uniformity = NA, + status = "Unknown", + anomaly_type = "Unknown", + priority_level = 5, # Low priority + age_weeks = field_age_weeks, + harvest_readiness = "Unknown", + stringsAsFactors = FALSE + )) + next + } + + # Calculate metrics - Handle NA values properly + ci_column <- if ("CI" %in% names(ci_values)) "CI" else colnames(ci_values)[1] + ci_prev_column <- if ("CI" %in% names(ci_prev_values)) "CI" else colnames(ci_prev_values)[1] + + mean_ci <- mean(ci_values[[ci_column]], na.rm=TRUE) + mean_ci_prev <- mean(ci_prev_values[[ci_prev_column]], na.rm=TRUE) + ci_change <- mean_ci - mean_ci_prev + ci_sd <- sd(ci_values[[ci_column]], na.rm=TRUE) + ci_uniformity <- ci_sd / max(0.1, mean_ci) # Avoid division by zero + + # Handle NaN or Inf results + if (is.na(mean_ci) || is.na(ci_change) || is.na(ci_uniformity) || + is.nan(mean_ci) || is.nan(ci_change) || is.nan(ci_uniformity) || + is.infinite(mean_ci) || is.infinite(ci_change) || is.infinite(ci_uniformity)) { + safe_log(paste("Invalid calculation results for field", field_name), "WARNING") + # Add a placeholder row with Unknown status + farm_health_data <- rbind(farm_health_data, data.frame( + field = field_name, + mean_ci = NA, + ci_change = NA, + ci_uniformity = NA, + status = "Unknown", + anomaly_type = "Unknown", + priority_level = 5, # Low priority + age_weeks = field_age_weeks, + harvest_readiness = "Unknown", + stringsAsFactors = FALSE + )) + next + } + + # Determine field status + status <- dplyr::case_when( + mean_ci >= 5 ~ "Excellent", + mean_ci >= 3.5 ~ "Good", + mean_ci >= 2 ~ "Fair", + mean_ci >= 1 ~ "Poor", + TRUE ~ "Critical" + ) + + # Determine anomaly type + anomaly_type <- dplyr::case_when( + ci_change > 2 ~ "Potential Weed Growth", + ci_change < -2 ~ "Potential Weeding/Harvesting", + ci_uniformity > 0.5 ~ "High Variability", + mean_ci < 1 ~ "Low Vigor", + TRUE ~ "None" + ) + + # Calculate priority level (1-5, with 1 being highest priority) + priority_score <- dplyr::case_when( + mean_ci < 1 ~ 1, # Critical - highest priority + anomaly_type == "Potential Weed Growth" ~ 2, + anomaly_type == "High Variability" ~ 3, + ci_change < -1 ~ 4, + TRUE ~ 5 # No urgent issues + ) + + # Determine harvest readiness + harvest_readiness <- dplyr::case_when( + field_age_weeks >= 52 & mean_ci >= 4 ~ "Ready for harvest", + field_age_weeks >= 48 & mean_ci >= 3.5 ~ "Approaching harvest", + field_age_weeks >= 40 & mean_ci >= 3 ~ "Mid-maturity", + field_age_weeks >= 12 ~ "Growing", + TRUE ~ "Early stage" + ) + + # Add to summary data + farm_health_data <- rbind(farm_health_data, data.frame( + field = field_name, + mean_ci = round(mean_ci, 2), + ci_change = round(ci_change, 2), + ci_uniformity = round(ci_uniformity, 2), + status = status, + anomaly_type = anomaly_type, + priority_level = priority_score, + age_weeks = field_age_weeks, + harvest_readiness = harvest_readiness, + stringsAsFactors = FALSE + )) + + }, error = function(e) { + safe_log(paste("Error processing field", field_name, ":", e$message), "ERROR") + # Add a placeholder row with Error status + farm_health_data <<- rbind(farm_health_data, data.frame( + field = field_name, + mean_ci = NA, + ci_change = NA, + ci_uniformity = NA, + status = "Unknown", + anomaly_type = "Unknown", + priority_level = 5, # Low priority since we don't know the status + age_weeks = NA, + harvest_readiness = "Unknown", + stringsAsFactors = FALSE + )) + }) + } + + # Make sure we have data for all fields + if (nrow(farm_health_data) == 0) { + safe_log("No farm health data was created", "ERROR") + stop("Failed to create farm health data") + } + + # Sort by priority level + farm_health_data <- farm_health_data %>% dplyr::arrange(priority_level, field) + + safe_log(paste("Successfully created farm health data for", nrow(farm_health_data), "fields")) + +}, error = function(e) { + safe_log(paste("Error creating farm health data:", e$message), "ERROR") + # Create an empty dataframe that can be filled by the verification chunk +}) +``` + +```{r verify_farm_health_data, message=FALSE, warning=FALSE, include=FALSE} +# Verify farm_health_data exists and has content +if (!exists("farm_health_data") || nrow(farm_health_data) == 0) { + safe_log("farm_health_data not found or empty, generating default data", "WARNING") + + # Create minimal fallback data + tryCatch({ + # Get fields from boundaries + fields <- unique(AllPivots0$field) + + # Create basic data frame with just field names + farm_health_data <- data.frame( + field = fields, + mean_ci = rep(NA, length(fields)), + ci_change = rep(NA, length(fields)), + ci_uniformity = rep(NA, length(fields)), + status = rep("Unknown", length(fields)), + anomaly_type = rep("Unknown", length(fields)), + priority_level = rep(5, length(fields)), # Low priority + age_weeks = rep(NA, length(fields)), + harvest_readiness = rep("Unknown", length(fields)), + stringsAsFactors = FALSE + ) + + safe_log("Created fallback farm_health_data with basic field information") + }, error = function(e) { + safe_log(paste("Error creating fallback farm_health_data:", e$message), "ERROR") + farm_health_data <<- data.frame( + field = character(), + mean_ci = numeric(), + ci_change = numeric(), + ci_uniformity = numeric(), + status = character(), + anomaly_type = character(), + priority_level = numeric(), + age_weeks = numeric(), + harvest_readiness = character(), + stringsAsFactors = FALSE + ) + }) +} +``` + +```{r calculate_farm_health, message=FALSE, warning=FALSE, include=FALSE} +# Calculate farm health summary metrics +tryCatch({ + # Generate farm health summary data + farm_health_data <- generate_farm_health_summary( + field_boundaries = AllPivots0, + ci_current = CI, + ci_previous = CI_m1, + harvesting_data = harvesting_data + ) + + # Log the summary data + safe_log(paste("Generated farm health summary with", nrow(farm_health_data), "fields")) + +}, error = function(e) { + safe_log(paste("Error in farm health calculation:", e$message), "ERROR") + # Create empty dataframe if calculation failed + farm_health_data <- data.frame( + field = character(), + mean_ci = numeric(), + ci_change = numeric(), + ci_uniformity = numeric(), + status = character(), + anomaly_type = character(), + priority_level = numeric(), + age_weeks = numeric(), + harvest_readiness = character(), + stringsAsFactors = FALSE + ) +}) +``` + +```{r executive_summary_functions, message=FALSE, warning=FALSE, include=FALSE} +# EXECUTIVE SUMMARY HELPER FUNCTIONS + +#' Generate a summary of farm health status +#' +#' @param field_boundaries Field boundaries spatial data (sf object) +#' @param ci_current Current CI raster +#' @param ci_previous Previous week's CI raster +#' @param harvesting_data Data frame with harvesting information +#' @return A data frame with farm status summary metrics +#' +generate_farm_health_summary <- function(field_boundaries, ci_current, ci_previous, harvesting_data) { + # Generate a summary data frame of farm health by field + tryCatch({ + # Get unique field names + fields <- unique(field_boundaries$field) + + # Initialize result dataframe + summary_data <- data.frame( + field = character(), + mean_ci = numeric(), + ci_change = numeric(), + ci_uniformity = numeric(), + status = character(), + anomaly_type = character(), + priority_level = numeric(), + age_weeks = numeric(), + harvest_readiness = character(), + stringsAsFactors = FALSE + ) + + # Process each field with better error handling + for (field_name in fields) { + tryCatch({ + # Get field boundary + field_shape <- field_boundaries %>% dplyr::filter(field == field_name) + + # Skip if field shape is empty + if (nrow(field_shape) == 0) { + safe_log(paste("Empty field shape for", field_name), "WARNING") + next + } + + # Get field age from harvesting data + field_age_data <- harvesting_data %>% + dplyr::filter(field == field_name) %>% + dplyr::arrange(desc(season_start)) %>% + dplyr::slice(1) + + # Default age if not available + field_age_weeks <- if (nrow(field_age_data) > 0 && !is.na(field_age_data$age)) { + field_age_data$age + } else { + 10 # Default age + } + + # Extract CI values for this field using extract instead of crop/mask to avoid pointer issues + # This is more robust than the crop+mask approach + field_bbox <- sf::st_bbox(field_shape) + extent_vec <- c(field_bbox$xmin, field_bbox$xmax, field_bbox$ymin, field_bbox$ymax) + + # Use terra extract function instead of crop+mask + ci_values <- terra::extract(ci_current, field_shape) + ci_prev_values <- terra::extract(ci_previous, field_shape) + + # Calculate metrics + mean_ci <- mean(ci_values$CI, na.rm=TRUE) + mean_ci_prev <- mean(ci_prev_values$CI, na.rm=TRUE) + ci_change <- mean_ci - mean_ci_prev + ci_sd <- sd(ci_values$CI, na.rm=TRUE) + ci_uniformity <- ci_sd / max(0.1, mean_ci) # Avoid division by zero + + # Determine field status + status <- dplyr::case_when( + mean_ci >= 5 ~ "Excellent", + mean_ci >= 3.5 ~ "Good", + mean_ci >= 2 ~ "Fair", + mean_ci >= 1 ~ "Poor", + TRUE ~ "Critical" + ) + + # Determine anomaly type + anomaly_type <- dplyr::case_when( + ci_change > 2 ~ "Potential Weed Growth", + ci_change < -2 ~ "Potential Weeding/Harvesting", + ci_uniformity > 0.5 ~ "High Variability", + mean_ci < 1 ~ "Low Vigor", + TRUE ~ "None" + ) + + # Calculate priority level (1-5, with 1 being highest priority) + priority_score <- dplyr::case_when( + mean_ci < 1 ~ 1, # Critical - highest priority + anomaly_type == "Potential Weed Growth" ~ 2, + anomaly_type == "High Variability" ~ 3, + ci_change < -1 ~ 4, + TRUE ~ 5 # No urgent issues + ) + + # Determine harvest readiness + harvest_readiness <- dplyr::case_when( + field_age_weeks >= 52 & mean_ci >= 4 ~ "Ready for harvest", + field_age_weeks >= 48 & mean_ci >= 3.5 ~ "Approaching harvest", + field_age_weeks >= 40 & mean_ci >= 3 ~ "Mid-maturity", + field_age_weeks >= 12 ~ "Growing", + TRUE ~ "Early stage" + ) + + # Add to summary data + summary_data <- rbind(summary_data, data.frame( + field = field_name, + mean_ci = round(mean_ci, 2), + ci_change = round(ci_change, 2), + ci_uniformity = round(ci_uniformity, 2), + status = status, + anomaly_type = anomaly_type, + priority_level = priority_score, + age_weeks = field_age_weeks, + harvest_readiness = harvest_readiness, + stringsAsFactors = FALSE + )) + + }, error = function(e) { + safe_log(paste("Error calculating health score for field", field_name, ":", e$message), "ERROR") + # Add a row with NA values for this field to ensure it still appears in outputs + summary_data <- rbind(summary_data, data.frame( + field = field_name, + mean_ci = NA, + ci_change = NA, + ci_uniformity = NA, + status = "Error", + anomaly_type = "Error", + priority_level = 1, # High priority because it needs investigation + age_weeks = NA, + harvest_readiness = "Unknown", + stringsAsFactors = FALSE + )) + }) + } + + # Sort by priority level + summary_data <- summary_data %>% dplyr::arrange(priority_level, field) + + return(summary_data) + + }, error = function(e) { + safe_log(paste("Error in generate_farm_health_summary:", e$message), "ERROR") + return(data.frame( + field = character(), + mean_ci = numeric(), + ci_change = numeric(), + ci_uniformity = numeric(), + status = character(), + anomaly_type = character(), + priority_level = numeric(), + age_weeks = numeric(), + harvest_readiness = character(), + stringsAsFactors = FALSE + )) }) +} + +#' Create a raster-based CI map showing pixel values +#' +#' @param ci_raster CI raster data +#' @param field_boundaries Field boundaries spatial data (sf object) for overlay +#' @param title Map title +#' @param legend_title Legend title +#' @return A tmap object with raster visualization +#' +create_ci_raster_map <- function(ci_raster, field_boundaries, + title = "Chlorophyll Index (CI) - Pixel Values", + legend_title = "CI Value") { + tryCatch({ + # Create raster map + map <- tm_shape(ci_raster) + + tm_raster( + palette = "RdYlGn", + title = legend_title, + style = "cont" + # n = 10, + # alpha = 0.8 + ) + + # Add field boundaries as overlay + tm_shape(field_boundaries) + + tm_borders(col = "black", lwd = 0.5, alpha = 0.7) + + tm_text("field", size = 0.6, col = "black", alpha = 0.8) + + tm_layout( + main.title = title, + legend.outside = TRUE, + legend.outside.position = "bottom" + ) + + tm_scale_bar(position = tm_pos_out("right", "bottom")) + + return(map) + + }, error = function(e) { + safe_log(paste("Error in create_ci_raster_map:", e$message), "ERROR") + return(NULL) + }) +} + +#' Create a farm-wide anomaly detection map +#' +#' @param ci_current Current CI raster +#' @param ci_previous Previous week's CI raster +#' @param field_boundaries Field boundaries spatial data (sf object) +#' @return A tmap object with anomaly visualization +#' +create_anomaly_map <- function(ci_current, ci_previous, field_boundaries) { + tryCatch({ + # Calculate difference raster + ci_diff <- ci_current - ci_previous + + # Create a categorical raster for anomalies + anomaly_raster <- ci_current * 0 # Initialize with same extent/resolution + + # Extract values to manipulate + diff_values <- terra::values(ci_diff) + curr_values <- terra::values(ci_current) + + # Define anomaly categories: + # 4: Significant growth (potential weeds) - CI increase > 2 + # 3: Moderate growth - CI increase 1-2 + # 2: Stable - CI change between -1 and 1 + # 1: Moderate decline - CI decrease 1-2 + # 0: Significant decline (potential weeding/harvesting) - CI decrease > 2 + + # Apply classification + anomaly_values <- rep(NA, length(diff_values)) + + # Significant growth (potential weeds) + sig_growth <- which(diff_values > 2 & !is.na(diff_values)) + anomaly_values[sig_growth] <- 4 + + # Moderate growth + mod_growth <- which(diff_values > 1 & diff_values <= 2 & !is.na(diff_values)) + anomaly_values[mod_growth] <- 3 + + # Stable + stable <- which(diff_values >= -1 & diff_values <= 1 & !is.na(diff_values)) + anomaly_values[stable] <- 2 + + # Moderate decline + mod_decline <- which(diff_values < -1 & diff_values >= -2 & !is.na(diff_values)) + anomaly_values[mod_decline] <- 1 + + # Significant decline (potential weeding) + sig_decline <- which(diff_values < -2 & !is.na(diff_values)) + anomaly_values[sig_decline] <- 0 + + # Set values in raster + terra::values(anomaly_raster) <- anomaly_values + + # Create anomaly map + map <- tm_shape(anomaly_raster) + + tm_raster( + style = "cat", + palette = c("#d73027", "#fc8d59", "#ffffbf", "#91cf60", "#1a9850"), + labels = c("Significant Decline", "Moderate Decline", "Stable", "Moderate Growth", "Significant Growth"), + title = "Weekly CI Change" + ) + + tm_shape(field_boundaries) + + tm_borders(col = "black", lwd = 1.5) + + tm_text("field", size = 0.6) + + tm_layout( + main.title = "Farm-Wide Anomaly Detection", + legend.outside = TRUE, + legend.outside.position = "bottom" + ) + + tm_scale_bar(position = tm_pos_out("right", "bottom")) + + return(map) + + }, error = function(e) { + safe_log(paste("Error in create_anomaly_map:", e$message), "ERROR") + return(NULL) + }) +} + +#' Create a choropleth map of field health status +#' +#' @param field_boundaries Field boundaries with health data +#' @param attribute Field to visualize (e.g., "priority_level", "mean_ci") +#' @param title Map title +#' @param palette Color palette to use +#' @param legend_title Legend title +#' @return A tmap object +#' +create_field_status_map <- function(field_boundaries, health_data, attribute, + title = "Field Status Overview", + legend_title = "Status") { + tryCatch({ + # Join health data to field boundaries + field_data <- field_boundaries %>% + dplyr::left_join(health_data, by = "field") + + # Create style based on attribute type + if (attribute == "status") { + # Categorical styling for status + map <- tm_shape(field_data) + + tm_fill( + col = attribute, + palette = c("Excellent" = "#1a9850", "Good" = "#91cf60", + "Fair" = "#ffffbf", "Poor" = "#fc8d59", "Critical" = "#d73027", + "Error" = "#999999"), # Added Error category + title = legend_title + ) + } else if (attribute == "priority_level") { + # Numeric with custom breaks for priority (5 to 1, with 1 being highest priority) + map <- tm_shape(field_data) + + tm_fill( + col = attribute, + palette = "-RdYlGn", # Reversed so red is high priority + breaks = c(0.5, 1.5, 2.5, 3.5, 4.5, 5.5), + labels = c("Critical", "High", "Medium", "Low", "Minimal"), + title = legend_title + ) + } else if (attribute == "anomaly_type") { + # Categorical styling for anomalies + map <- tm_shape(field_data) + + tm_fill( + col = attribute, + palette = c("Potential Weed Growth" = "#d73027", + "Potential Weeding/Harvesting" = "#4575b4", + "High Variability" = "#f46d43", + "Low Vigor" = "#fee090", + "None" = "#91cf60", + "Error" = "#999999"), # Added Error category + title = legend_title + ) + } else if (attribute == "harvest_readiness") { + # Categorical styling for harvest readiness + map <- tm_shape(field_data) + + tm_fill( + col = attribute, + palette = c("Ready for harvest" = "#1a9850", + "Approaching harvest" = "#91cf60", + "Mid-maturity" = "#ffffbf", + "Growing" = "#fc8d59", + "Early stage" = "#d73027", "Unknown" = "#999999"), # Added Unknown category + title = legend_title + ) + } else { + # Default numerical styling + map <- tm_shape(field_data) + + tm_fill( + col = attribute, + palette = "RdYlGn", + title = legend_title, + style = "cont", + na.color = "#999999" # Color for NA values + ) + } + + # Complete the map with borders and labels + map <- map + + tm_borders(col = "black", lwd = 1) + + tm_text("field", size = 0.7) + + tm_layout( + main.title = title, + legend.outside = TRUE, + legend.outside.position = "bottom" + ) + + tm_scale_bar(position = tm_pos_out("right", "bottom")) + + return(map) + + }, error = function(e) { + safe_log(paste("Error in create_field_status_map:", e$message), "ERROR") + return(NULL) + }) +} + +#' Create a summary statistics visualization +#' +#' @param health_data Farm health summary data +#' @return A ggplot2 object +#' +create_summary_stats <- function(health_data) { + tryCatch({ + # Handle empty dataframe case + if (nrow(health_data) == 0) { + return(ggplot2::ggplot() + + ggplot2::annotate("text", x = 0, y = 0, label = "No field data available") + + ggplot2::theme_void()) + } + + # Count fields by status + status_counts <- health_data %>% + dplyr::group_by(status) %>% + dplyr::summarise(count = n()) %>% + dplyr::mutate(status = factor(status, levels = c("Excellent", "Good", "Fair", "Poor", "Critical", "Error"))) + + # Create colors for status categories + status_colors <- c( + "Excellent" = "#1a9850", + "Good" = "#91cf60", + "Fair" = "#ffffbf", + "Poor" = "#fc8d59", + "Critical" = "#d73027", + "Error" = "#999999" + ) + + # Create bar chart + p <- ggplot2::ggplot(status_counts, ggplot2::aes(x = status, y = count, fill = status)) + + ggplot2::geom_bar(stat = "identity") + + ggplot2::scale_fill_manual(values = status_colors) + + ggplot2::labs( + title = "Field Status Summary", + x = "Status", + y = "Number of Fields", + fill = "Field Status" + ) + + ggplot2::theme_minimal() + + ggplot2::theme( + axis.text.x = ggplot2::element_text(angle = 45, hjust = 1), + legend.position = "bottom" + ) + + return(p) + + }, error = function(e) { + safe_log(paste("Error in create_summary_stats:", e$message), "ERROR") + return(ggplot2::ggplot() + + ggplot2::annotate("text", x = 0, y = 0, label = paste("Error:", e$message)) + + ggplot2::theme_void()) + }) +} + +#' Create a bar chart of fields requiring attention +#' +#' @param health_data Farm health summary data +#' @param max_fields Maximum number of fields to display +#' @return A ggplot2 object +#' +create_priority_fields_chart <- function(health_data, max_fields = 10) { + tryCatch({ + # Handle empty dataframe case + if (nrow(health_data) == 0) { + return(ggplot2::ggplot() + + ggplot2::annotate("text", x = 0, y = 0, label = "No field data available") + + ggplot2::theme_void()) + } + + # Filter for fields that need attention (priority 1-3) + priority_fields <- health_data %>% + dplyr::filter(priority_level <= 3) %>% + dplyr::arrange(priority_level) %>% + dplyr::slice_head(n = max_fields) + + # If no priority fields, return message + if (nrow(priority_fields) == 0) { + return(ggplot2::ggplot() + + ggplot2::annotate("text", x = 0, y = 0, label = "No priority fields requiring attention") + + ggplot2::theme_void()) + } + + # Create priority labels + priority_fields$priority_label <- factor( + dplyr::case_when( + priority_fields$priority_level == 1 ~ "Critical", + priority_fields$priority_level == 2 ~ "High", + priority_fields$priority_level == 3 ~ "Medium", + TRUE ~ "Low" + ), + levels = c("Critical", "High", "Medium", "Low") + ) + + # Priority colors + priority_colors <- c( + "Critical" = "#d73027", + "High" = "#fc8d59", + "Medium" = "#fee090", + "Low" = "#91cf60" + ) + + # Create chart + p <- ggplot2::ggplot(priority_fields, + ggplot2::aes(x = reorder(field, -priority_level), + y = mean_ci, + fill = priority_label)) + + ggplot2::geom_bar(stat = "identity") + + ggplot2::geom_text(ggplot2::aes(label = anomaly_type), + position = ggplot2::position_stack(vjust = 0.5), + size = 3, angle = 90, hjust = 0) + + ggplot2::scale_fill_manual(values = priority_colors) + + ggplot2::labs( + title = "Priority Fields Requiring Attention", + subtitle = "With anomaly types and CI values", + x = "Field", + y = "Chlorophyll Index (CI)", + fill = "Priority" + ) + + ggplot2::theme_minimal() + + ggplot2::theme( + axis.text.x = ggplot2::element_text(angle = 45, hjust = 1), + legend.position = "bottom" + ) + + return(p) + + }, error = function(e) { + safe_log(paste("Error in create_priority_fields_chart:", e$message), "ERROR") + return(ggplot2::ggplot() + + ggplot2::annotate("text", x = 0, y = 0, label = paste("Error:", e$message)) + + ggplot2::theme_void()) + }) +} + +#' Creates a harvest readiness visualization +#' +#' @param health_data Farm health summary data +#' @return A ggplot2 object +create_harvest_readiness_chart <- function(health_data) { + tryCatch({ + # Handle empty dataframe case + if (nrow(health_data) == 0) { + return(ggplot2::ggplot() + + ggplot2::annotate("text", x = 0, y = 0, label = "No field data available") + + ggplot2::theme_void()) + } + + # Count fields by harvest readiness + harvest_counts <- health_data %>% + dplyr::group_by(harvest_readiness) %>% + dplyr::summarise(count = n()) + + # Order factor levels + harvest_order <- c("Ready for harvest", "Approaching harvest", "Mid-maturity", "Growing", "Early stage", "Unknown") + harvest_counts$harvest_readiness <- factor(harvest_counts$harvest_readiness, levels = harvest_order) + + # Create colors for harvest readiness categories + harvest_colors <- c( + "Ready for harvest" = "#1a9850", + "Approaching harvest" = "#91cf60", + "Mid-maturity" = "#ffffbf", + "Growing" = "#fc8d59", + "Early stage" = "#d73027", + "Unknown" = "#999999" + ) + + # Create pie chart + p <- ggplot2::ggplot(harvest_counts, ggplot2::aes(x="", y=count, fill=harvest_readiness)) + + ggplot2::geom_bar(stat="identity", width=1) + + ggplot2::coord_polar("y", start=0) + + ggplot2::scale_fill_manual(values = harvest_colors) + + ggplot2::labs( + title = "Harvest Readiness Overview", + fill = "Harvest Stage" + ) + + ggplot2::theme_minimal() + + ggplot2::theme( + axis.title.x = ggplot2::element_blank(), + axis.title.y = ggplot2::element_blank(), + panel.border = ggplot2::element_blank(), + panel.grid = ggplot2::element_blank(), + axis.ticks = ggplot2::element_blank(), + axis.text = ggplot2::element_blank(), + plot.title = ggplot2::element_text(size=14, face="bold") + ) + + return(p) + + }, error = function(e) { + safe_log(paste("Error in create_harvest_readiness_chart:", e$message), "ERROR") + return(ggplot2::ggplot() + + ggplot2::annotate("text", x = 0, y = 0, label = paste("Error:", e$message)) + + ggplot2::theme_void()) + }) +} + +#' Generate recommendations based on farm health +#' +#' @param health_data Farm health summary data +#' @return HTML formatted recommendations +generate_executive_recommendations <- function(health_data) { + tryCatch({ + # Handle empty dataframe case + if (nrow(health_data) == 0) { + return("

Executive Recommendations

No field data available to generate recommendations.

") + } + + # Count fields by priority level + priority_counts <- health_data %>% + dplyr::group_by(priority_level) %>% + dplyr::summarise(count = n()) + + # Get critical and high priority fields + critical_fields <- health_data %>% + dplyr::filter(priority_level == 1) %>% + dplyr::pull(field) + + high_priority_fields <- health_data %>% + dplyr::filter(priority_level == 2) %>% + dplyr::pull(field) + + # Count harvest-ready fields + harvest_ready <- health_data %>% + dplyr::filter(harvest_readiness == "Ready for harvest") %>% + dplyr::pull(field) + + approaching_harvest <- health_data %>% + dplyr::filter(harvest_readiness == "Approaching harvest") %>% + dplyr::pull(field) + + # Count anomalies by type + anomaly_counts <- health_data %>% + dplyr::filter(anomaly_type != "None" & anomaly_type != "Error") %>% + dplyr::group_by(anomaly_type) %>% + dplyr::summarise(count = n()) + + # Generate HTML recommendations + html_output <- "
" + html_output <- paste0(html_output, "

Executive Recommendations

") + + # Priority recommendations + html_output <- paste0(html_output, "

Priority Actions:

    ") + + if (length(critical_fields) > 0) { + html_output <- paste0(html_output, + sprintf("
  • Critical attention needed for fields: %s
  • ", + paste(critical_fields, collapse = ", "))) + } + + if (length(high_priority_fields) > 0) { + html_output <- paste0(html_output, + sprintf("
  • High priority inspection for fields: %s
  • ", + paste(high_priority_fields, collapse = ", "))) + } + + if (length(harvest_ready) > 0) { + html_output <- paste0(html_output, + sprintf("
  • Ready for harvest: %s
  • ", + paste(harvest_ready, collapse = ", "))) + } + + if (length(approaching_harvest) > 0) { + html_output <- paste0(html_output, + sprintf("
  • Approaching harvest readiness: %s
  • ", + paste(approaching_harvest, collapse = ", "))) + } + + # If no specific recommendations, add general one + if (length(critical_fields) == 0 && length(high_priority_fields) == 0 && + length(harvest_ready) == 0 && length(approaching_harvest) == 0) { + html_output <- paste0(html_output, "
  • No urgent actions required this week.
  • ") + } + + html_output <- paste0(html_output, "
") + + # Anomaly notifications + if (nrow(anomaly_counts) > 0) { + html_output <- paste0(html_output, "

Anomaly Notifications:

    ") + + for (i in 1:nrow(anomaly_counts)) { + html_output <- paste0(html_output, + sprintf("
  • %s detected in %d fields
  • ", + anomaly_counts$anomaly_type[i], anomaly_counts$count[i])) + } + + html_output <- paste0(html_output, "
") + } + + # Farm status summary + html_output <- paste0(html_output, "

Farm Status Overview:

    ") + + status_counts <- health_data %>% + dplyr::filter(status != "Error") %>% + dplyr::group_by(status) %>% + dplyr::summarise(count = n()) + + for (i in 1:nrow(status_counts)) { + html_output <- paste0(html_output, + sprintf("
  • %s: %d fields
  • ", + status_counts$status[i], status_counts$count[i])) + } + + html_output <- paste0(html_output, "
") + + return(html_output) + + }, error = function(e) { + safe_log(paste("Error in generate_executive_recommendations:", e$message), "ERROR") + return("

Error generating recommendations.

") + }) +} +``` + +`r subtitle_var` + +\pagebreak +# Explanation of the Report + +This report provides a detailed analysis of your sugarcane fields based on satellite imagery, helping you monitor crop health and development throughout the growing season. The data is processed weekly to give you timely insights for optimal farm management decisions. + +## What is the Chlorophyll Index (CI)? + +The **Chlorophyll Index (CI)** is a vegetation index that measures the relative amount of chlorophyll in plant leaves. Chlorophyll is the green pigment responsible for photosynthesis in plants. Higher CI values indicate: + +* Greater photosynthetic activity +* Healthier plant tissue +* Better nitrogen uptake +* More vigorous crop growth + +CI values typically range from 0 (bare soil or severely stressed vegetation) to 7+ (very healthy, dense vegetation). For sugarcane, values between 3-7 generally indicate good crop health, depending on the growth stage. + +# Executive Dashboard + +## Farm Health Status + +The map below shows the overall health status of all fields based on current Chlorophyll Index values. This provides a quick overview of which areas of your farm are performing well and which might need intervention. + +**How it works:** Field health status is determined by the average Chlorophyll Index (CI) value across each field: +- **Excellent** (dark green): CI ≥ 5.0 +- **Good** (light green): CI 3.5-4.99 +- **Fair** (yellow): CI 2.0-3.49 +- **Poor** (orange): CI 1.0-1.99 +- **Critical** (red): CI < 1.0 + +Fields with higher CI values indicate better crop vigor and photosynthetic activity, which typically correlate with healthier plants. + +```{r render_ci_continuous_map, echo=FALSE, fig.height=6, fig.width=9, message=FALSE, warning=FALSE} +# Create CI continuous raster map +tryCatch({ + # Create and display the CI raster map with pixel values + ci_raster_map <- create_ci_raster_map( + ci_raster = CI, + field_boundaries = AllPivots0, + title = "Chlorophyll Index (CI) - Pixel Values", + legend_title = "CI Value" + ) + + # Print the map + print(ci_raster_map) +}, error = function(e) { + safe_log(paste("Error creating CI raster map:", e$message), "ERROR") + plot(1, type="n", axes=FALSE, xlab="", ylab="") + text(1, 1, "Error creating CI raster map", cex=1.5) +}) +``` + +```{r render_field_status_map, echo=FALSE, fig.height=6, fig.width=9, message=FALSE, warning=FALSE} +# Create field status map +tryCatch({ + # Create and display the field status map + field_status_map <- create_field_status_map( + field_boundaries = AllPivots0, + health_data = farm_health_data, + attribute = "status", + title = "Field Health Status Overview", + legend_title = "Health Status" + ) + + # Print the map + print(field_status_map) +}, error = function(e) { + safe_log(paste("Error creating field status map:", e$message), "ERROR") + plot(1, type="n", axes=FALSE, xlab="", ylab="") + text(1, 1, "Error creating field status map", cex=1.5) +}) +``` + +## Management Priorities + +This map highlights which fields require priority management attention based on current health indicators and trends. Fields in red require immediate attention, while green fields are performing well with minimal intervention needed. + +**How it works:** Priority levels are calculated based on a combination of factors: +- **Critical Priority** (dark red): Fields with CI < 1.0 or critical health issues +- **High Priority** (red): Fields with potential weed growth (CI increase > 2) +- **Medium Priority** (orange): Fields with high internal variability +- **Low Priority** (light green): Fields with moderate decline in CI +- **Minimal Priority** (dark green): Stable, healthy fields + +The priority algorithm considers both absolute CI values and week-to-week changes to identify fields that need immediate management attention. + +```{r render_priority_map, echo=FALSE, fig.height=6, fig.width=9, message=FALSE, warning=FALSE} +# Create priority management map +tryCatch({ + # Fix the priority mapping so red = high priority, green = low priority + # Reverse the priority levels before mapping (1=critical becomes 5, 5=minimal becomes 1) + farm_health_data$display_priority <- 6 - farm_health_data$priority_level + + # Create and display the priority map with corrected priority levels + priority_map <- tm_shape(AllPivots0 %>% dplyr::left_join(farm_health_data, by = "field")) + + tm_fill( + col = "display_priority", + palette = "-RdYlGn", # Now properly oriented: red = high priority, green = low priority + breaks = c(0.5, 1.5, 2.5, 3.5, 4.5, 5.5), + labels = c("Minimal", "Low", "Medium", "High", "Critical"), + title = "Priority Level" + ) + + tm_borders(col = "black", lwd = 1) + + tm_text("field", size = 0.7) + + tm_layout( + main.title = "Field Management Priority", + legend.outside = TRUE, + legend.outside.position = "bottom" + ) + + tm_scale_bar(position = tm_pos_out("right", "bottom")) + + # Print the map + print(priority_map) +}, error = function(e) { + safe_log(paste("Error creating priority map:", e$message), "ERROR") + plot(1, type="n", axes=FALSE, xlab="", ylab="") + text(1, 1, "Error creating priority map", cex=1.5) +}) +``` + +\pagebreak +## Crop Anomaly Detection + +The map below highlights potential anomalies in your fields that may require investigation. Areas with sudden changes in CI values could indicate weeding activities, rapid weed growth, or other management interventions. + +**How it works:** This map compares current week's CI values with those from the previous week: +- **Significant Growth** (dark green): CI increase > 2 units (potential weed growth) +- **Moderate Growth** (light green): CI increase of 1-2 units +- **Stable** (yellow): CI change between -1 and +1 units +- **Moderate Decline** (orange): CI decrease of 1-2 units +- **Significant Decline** (red): CI decrease > 2 units (potential weeding/harvesting activities) + +Areas with significant growth (dark green) may indicate rapid weed growth that requires monitoring, while significant declines (red) often indicate recent management activities like weeding or harvesting. + +```{r render_anomaly_map, echo=FALSE, fig.height=6, fig.width=9, message=FALSE, warning=FALSE} +# Create anomaly detection map +tryCatch({ + # Create and display the anomaly map + anomaly_map <- create_anomaly_map( + ci_current = CI, + ci_previous = CI_m1, + field_boundaries = AllPivots0 + ) + + # Print the map + print(anomaly_map) +}, error = function(e) { + safe_log(paste("Error creating anomaly map:", e$message), "ERROR") + plot(1, type="n", axes=FALSE, xlab="", ylab="") + text(1, 1, "Error creating anomaly map", cex=1.5) +}) +``` + +\pagebreak +## Harvest Planning + +This map shows the harvest readiness status of all fields, helping you plan harvest operations and logistics. Fields in dark green are ready for harvest, while those in yellow through red are at earlier growth stages. + +**How it works:** Harvest readiness is determined by combining field age and CI values: +- **Ready for harvest** (dark green): Fields ≥52 weeks old with CI ≥4.0 +- **Approaching harvest** (light green): Fields ≥48 weeks old with CI ≥3.5 +- **Mid-maturity** (yellow): Fields ≥40 weeks old with CI ≥3.0 +- **Growing** (orange): Fields ≥12 weeks old +- **Early stage** (red): Fields <12 weeks old + +This classification helps prioritize harvesting operations and logistical planning by identifying fields that are at optimal maturity for maximum sugar content. + +```{r render_harvest_map, echo=FALSE, fig.height=6, fig.width=9, message=FALSE, warning=FALSE} +# Create harvest planning map +tryCatch({ + # Create and display the harvest readiness map + harvest_map <- create_field_status_map( + field_boundaries = AllPivots0, + health_data = farm_health_data, + attribute = "harvest_readiness", + title = "Harvest Readiness Status", + legend_title = "Harvest Status" + ) + + # Print the map + print(harvest_map) +}, error = function(e) { + safe_log(paste("Error creating harvest map:", e$message), "ERROR") + plot(1, type="n", axes=FALSE, xlab="", ylab="") + text(1, 1, "Error creating harvest map", cex=1.5) +}) +``` + +\pagebreak +## Field Status Summary + +The charts below provide an overview of your farm's health and harvest readiness status, showing the distribution of fields across different health categories and maturity stages. + +**How the Field Status Chart works:** This bar chart displays the count of fields in each health status category, based on the same CI thresholds described in the Farm Health Status section: +- **Excellent** (dark green): CI ≥ 5.0 +- **Good** (light green): CI 3.5-4.99 +- **Fair** (yellow): CI 2.0-3.49 +- **Poor** (orange): CI 1.0-1.99 +- **Critical** (red): CI < 1.0 + +**How the Harvest Readiness Chart works:** This pie chart shows the distribution of fields by harvest readiness, allowing you to see at a glance how many fields are in each stage of development. Fields are categorized based on both age and CI values as described in the Harvest Planning section above. + +```{r render_status_charts, echo=FALSE, fig.height=5, fig.width=10, message=FALSE, warning=FALSE} +# Create field status summary visualization +tryCatch({ + # Create field status charts + status_chart <- create_summary_stats(farm_health_data) + + # Print the chart + print(status_chart) + + # Create a second row with harvest readiness chart + harvest_chart <- create_harvest_readiness_chart(farm_health_data) + + # Print the chart + print(harvest_chart) +}, error = function(e) { + safe_log(paste("Error creating status summary charts:", e$message), "ERROR") + plot(1, type="n", axes=FALSE, xlab="", ylab="") + text(1, 1, "Error creating status summary charts", cex=1.5) +}) +``` + +## Priority Fields Requiring Attention + +The chart below highlights fields that require immediate management attention based on their health scores and anomaly detection. These should be prioritized for field inspections. + +**How it works:** This chart shows fields with priority levels 1-3 (critical, high, and medium): +- Fields are ordered by priority level, with the most critical fields on the left +- Bar height represents the Chlorophyll Index (CI) value +- Bar colors indicate priority level: red (critical), orange (high), yellow (medium) +- Text labels show the detected anomaly type for each field + +The table below the chart provides detailed metrics for these priority fields, including CI values, weekly changes, anomaly types, and harvest status. Only fields requiring management attention (priority levels 1-3) are included. + +```{r render_priority_fields_chart, echo=FALSE, fig.height=5, fig.width=10, message=FALSE, warning=FALSE} +# Create priority fields chart +tryCatch({ + # Create and display priority fields chart + priority_chart <- create_priority_fields_chart(farm_health_data) + + # Print the chart + print(priority_chart) + + # Create a table of priority fields + priority_table <- farm_health_data %>% + dplyr::filter(priority_level <= 3) %>% + dplyr::arrange(priority_level, field) %>% + dplyr::select( + Field = field, + Status = status, + `CI Value` = mean_ci, + `Weekly Change` = ci_change, + `Anomaly Type` = anomaly_type, + `Age (Weeks)` = age_weeks, + `Harvest Status` = harvest_readiness + ) + + # Display the table if there are priority fields + if (nrow(priority_table) > 0) { + knitr::kable(priority_table, caption = "Priority Fields Requiring Management Attention") + } else { + cat("No priority fields requiring immediate attention this week.") + } + +}, error = function(e) { + safe_log(paste("Error creating priority fields chart:", e$message), "ERROR") + cat("Error generating priority fields visualization. See log for details.") +}) +``` + +\pagebreak +## Management Recommendations + +```{r render_recommendations, echo=FALSE, results='asis', message=FALSE, warning=FALSE} +# Generate executive recommendations +tryCatch({ + # Create and display recommendations + recommendations_html <- generate_executive_recommendations(farm_health_data) + + # Print the HTML recommendations + cat(recommendations_html) +}, error = function(e) { + safe_log(paste("Error creating recommendations:", e$message), "ERROR") + cat("

Error generating recommendations. Please see system administrator.

") +}) +``` + +## Yield Prediction Overview + +This section provides yield predictions for mature fields (over 300 days old) based on their Chlorophyll Index values and growth patterns. These predictions can help with harvest planning and yield forecasting. + +```{r render_yield_summary, echo=FALSE, fig.height=5, fig.width=10, message=FALSE, warning=FALSE} +# Create yield summary +tryCatch({ + if (exists("pred_rf_current_season") && nrow(pred_rf_current_season) > 0) { + # Calculate total estimated production + total_yield <- sum(pred_rf_current_season$predicted_Tcha, na.rm = TRUE) + + # Create summary box + cat("
") + cat("

Yield Summary

") + cat("
    ") + cat(sprintf("
  • Total estimated production: %s tonnes/ha
  • ", + format(round(total_yield, 0), big.mark=","))) + cat(sprintf("
  • Number of harvest-ready fields: %d
  • ", + nrow(pred_rf_current_season))) + cat(sprintf("
  • Average predicted yield: %s tonnes/ha
  • ", + format(round(mean(pred_rf_current_season$predicted_Tcha, na.rm=TRUE), 1), big.mark=","))) + cat("
") + cat("
") + + # Display yield prediction table + harvest_ready_fields <- pred_rf_current_season %>% + dplyr::arrange(desc(predicted_Tcha)) %>% + dplyr::select( + Field = field, + `Sub Field` = sub_field, + `Age (Days)` = Age_days, + `Cumulative CI` = total_CI, + `Predicted Yield (Tonnes/ha)` = predicted_Tcha + ) + + knitr::kable(harvest_ready_fields, + caption = "Predicted Yields for Harvest-Ready Fields", + digits = 1) + } else { + cat("
") + cat("

Yield Summary

") + cat("

No fields currently meet harvest readiness criteria (>300 days) for yield prediction.

") + cat("
") + } +}, error = function(e) { + safe_log(paste("Error creating yield summary:", e$message), "ERROR") + cat("

Error generating yield summary. Please see system administrator.

") +}) +``` + diff --git a/r_app/experiments/executive_summary/executive_report_utils.R b/r_app/experiments/executive_summary/executive_report_utils.R new file mode 100644 index 0000000..398249c --- /dev/null +++ b/r_app/experiments/executive_summary/executive_report_utils.R @@ -0,0 +1,437 @@ +# EXECUTIVE REPORT UTILITIES +# This file contains functions for creating advanced visualizations for the executive summary report + +#' Create a velocity and acceleration indicator for CI change +#' +#' @param health_data Current farm health data +#' @param ci_current Current CI raster +#' @param ci_prev1 CI raster from 1 week ago +#' @param ci_prev2 CI raster from 2 weeks ago +#' @param ci_prev3 CI raster from 3 weeks ago +#' @param field_boundaries Field boundaries spatial data (sf object) +#' @return A ggplot2 object with velocity and acceleration gauges +#' +create_velocity_acceleration_indicator <- function(health_data, ci_current, ci_prev1, ci_prev2, ci_prev3, field_boundaries) { + tryCatch({ + # Calculate farm-wide metrics for multiple weeks + mean_ci_current <- mean(health_data$mean_ci, na.rm = TRUE) + + # Calculate previous week metrics + # Extract CI values for previous weeks + field_ci_metrics <- data.frame(field = character(), + week_current = numeric(), + week_minus_1 = numeric(), + week_minus_2 = numeric(), + week_minus_3 = numeric(), + stringsAsFactors = FALSE) + + # Process each field + fields <- unique(field_boundaries$field) + for (field_name in fields) { + tryCatch({ + # Get field boundary + field_shape <- field_boundaries %>% dplyr::filter(field == field_name) + if (nrow(field_shape) == 0) next + + # Extract CI values for all weeks + ci_curr_values <- terra::extract(ci_current, field_shape) + ci_prev1_values <- terra::extract(ci_prev1, field_shape) + ci_prev2_values <- terra::extract(ci_prev2, field_shape) + ci_prev3_values <- terra::extract(ci_prev3, field_shape) + + # Calculate mean CI for each week + mean_ci_curr <- mean(ci_curr_values$CI, na.rm = TRUE) + mean_ci_prev1 <- mean(ci_prev1_values$CI, na.rm = TRUE) + mean_ci_prev2 <- mean(ci_prev2_values$CI, na.rm = TRUE) + mean_ci_prev3 <- mean(ci_prev3_values$CI, na.rm = TRUE) + + # Add to metrics table + field_ci_metrics <- rbind(field_ci_metrics, data.frame( + field = field_name, + week_current = mean_ci_curr, + week_minus_1 = mean_ci_prev1, + week_minus_2 = mean_ci_prev2, + week_minus_3 = mean_ci_prev3, + stringsAsFactors = FALSE + )) + }, error = function(e) { + message(paste("Error processing field", field_name, "for velocity indicator:", e$message)) + }) + } + + # Calculate farm-wide averages + farm_avg <- colMeans(field_ci_metrics[, c("week_current", "week_minus_1", "week_minus_2", "week_minus_3")], na.rm = TRUE) + + # Calculate velocity (rate of change) - current week compared to last week + velocity <- farm_avg["week_current"] - farm_avg["week_minus_1"] + + # Calculate previous velocity (last week compared to two weeks ago) + prev_velocity <- farm_avg["week_minus_1"] - farm_avg["week_minus_2"] + + # Calculate acceleration (change in velocity) + acceleration <- velocity - prev_velocity + + # Prepare data for velocity gauge + velocity_data <- data.frame( + label = "Weekly CI Change", + value = velocity + ) + + # Prepare data for acceleration gauge + acceleration_data <- data.frame( + label = "Change Acceleration", + value = acceleration + ) + + # Create velocity trend data + trend_data <- data.frame( + week = c(-3, -2, -1, 0), + ci_value = c(farm_avg["week_minus_3"], farm_avg["week_minus_2"], + farm_avg["week_minus_1"], farm_avg["week_current"]) + ) + + # Create layout grid for the visualizations + layout_matrix <- matrix(c(1, 1, 2, 2, 3, 3), nrow = 2, byrow = TRUE) + + # Create velocity gauge + velocity_gauge <- ggplot2::ggplot(velocity_data, ggplot2::aes(x = 0, y = 0)) + + ggplot2::geom_arc_bar(ggplot2::aes( + x0 = 0, y0 = 0, + r0 = 0.5, r = 1, + start = -pi/2, end = pi/2, + fill = "background" + ), fill = "#f0f0f0") + + ggplot2::geom_arc_bar(ggplot2::aes( + x0 = 0, y0 = 0, + r0 = 0.5, r = 1, + start = -pi/2, + end = -pi/2 + (pi * (0.5 + (velocity / 2))), # Scale to range -1 to +1 + fill = "velocity" + ), fill = ifelse(velocity >= 0, "#1a9850", "#d73027")) + + ggplot2::geom_text(ggplot2::aes(label = sprintf("%.2f", velocity)), + size = 8, fontface = "bold") + + ggplot2::geom_text(ggplot2::aes(label = "Velocity"), y = -0.3, size = 4) + + ggplot2::coord_fixed() + + ggplot2::theme_void() + + ggplot2::scale_fill_manual(values = c("background" = "#f0f0f0", "velocity" = "steelblue"), + guide = "none") + + ggplot2::annotate("text", x = -0.85, y = 0, label = "Declining", + angle = 90, size = 3.5) + + ggplot2::annotate("text", x = 0.85, y = 0, label = "Improving", + angle = -90, size = 3.5) + + ggplot2::labs(title = "Farm Health Velocity", + subtitle = "CI change per week") + + ggplot2::theme(plot.title = ggplot2::element_text(hjust = 0.5, size = 14, face = "bold"), + plot.subtitle = ggplot2::element_text(hjust = 0.5, size = 12)) + + # Create acceleration gauge + acceleration_gauge <- ggplot2::ggplot(acceleration_data, ggplot2::aes(x = 0, y = 0)) + + ggplot2::geom_arc_bar(ggplot2::aes( + x0 = 0, y0 = 0, + r0 = 0.5, r = 1, + start = -pi/2, end = pi/2, + fill = "background" + ), fill = "#f0f0f0") + + ggplot2::geom_arc_bar(ggplot2::aes( + x0 = 0, y0 = 0, + r0 = 0.5, r = 1, + start = -pi/2, + end = -pi/2 + (pi * (0.5 + (acceleration / 1))), # Scale to range -0.5 to +0.5 + fill = "acceleration" + ), fill = ifelse(acceleration >= 0, "#1a9850", "#d73027")) + + ggplot2::geom_text(ggplot2::aes(label = sprintf("%.2f", acceleration)), + size = 8, fontface = "bold") + + ggplot2::geom_text(ggplot2::aes(label = "Acceleration"), y = -0.3, size = 4) + + ggplot2::coord_fixed() + + ggplot2::theme_void() + + ggplot2::scale_fill_manual(values = c("background" = "#f0f0f0", "acceleration" = "steelblue"), + guide = "none") + + ggplot2::annotate("text", x = -0.85, y = 0, label = "Slowing", + angle = 90, size = 3.5) + + ggplot2::annotate("text", x = 0.85, y = 0, label = "Accelerating", + angle = -90, size = 3.5) + + ggplot2::labs(title = "Change Acceleration", + subtitle = "Increasing or decreasing trend") + + ggplot2::theme(plot.title = ggplot2::element_text(hjust = 0.5, size = 14, face = "bold"), + plot.subtitle = ggplot2::element_text(hjust = 0.5, size = 12)) + + # Create trend chart + trend_chart <- ggplot2::ggplot(trend_data, ggplot2::aes(x = week, y = ci_value)) + + ggplot2::geom_line(size = 1.5, color = "steelblue") + + ggplot2::geom_point(size = 3, color = "steelblue") + + ggplot2::geom_hline(yintercept = trend_data$ci_value[1], linetype = "dashed", color = "gray50") + + ggplot2::labs( + title = "4-Week CI Trend", + x = "Weeks from current", + y = "Average CI Value" + ) + + ggplot2::theme_minimal() + + ggplot2::scale_x_continuous(breaks = c(-3, -2, -1, 0)) + + # Create table of top velocity changes + field_ci_metrics$velocity <- field_ci_metrics$week_current - field_ci_metrics$week_minus_1 + top_velocity_fields <- field_ci_metrics %>% + dplyr::arrange(desc(abs(velocity))) %>% + dplyr::slice_head(n = 5) %>% + dplyr::select(field, velocity) %>% + dplyr::mutate(direction = ifelse(velocity >= 0, "Improving", "Declining")) + + # Combine into multi-panel figure + main_plot <- gridExtra::grid.arrange( + gridExtra::grid.arrange(velocity_gauge, acceleration_gauge, ncol = 2), + trend_chart, + heights = c(1.5, 1), + nrow = 2 + ) + + return(main_plot) + + }, error = function(e) { + message(paste("Error in create_velocity_acceleration_indicator:", e$message)) + return(ggplot2::ggplot() + + ggplot2::annotate("text", x = 0, y = 0, label = paste("Error creating velocity indicator:", e$message)) + + ggplot2::theme_void()) + }) +} + +#' Generate a field health score based on CI values and trends +#' +#' @param ci_current Current CI raster +#' @param ci_change CI change raster +#' @param field_age_weeks Field age in weeks +#' @return List containing score, status, and component scores +#' +generate_field_health_score <- function(ci_current, ci_change, field_age_weeks) { + # Get mean CI value for the field + mean_ci <- terra::global(ci_current, "mean", na.rm=TRUE)[[1]] + + # Get mean CI change + mean_change <- terra::global(ci_change, "mean", na.rm=TRUE)[[1]] + + # Get CI uniformity (coefficient of variation) + ci_sd <- terra::global(ci_current, "sd", na.rm=TRUE)[[1]] + ci_uniformity <- ifelse(mean_ci > 0, ci_sd / mean_ci, 1) + + # Calculate base score from current CI (scale 0-5) + # Adjusted for crop age - expectations increase with age + expected_ci <- min(5, field_age_weeks / 10) # Simple linear model + ci_score <- max(0, min(5, 5 - 2 * abs(mean_ci - expected_ci))) + + # Add points for positive change (scale 0-3) + change_score <- max(0, min(3, 1 + mean_change)) + + # Add points for uniformity (scale 0-2) + uniformity_score <- max(0, min(2, 2 * (1 - ci_uniformity))) + + # Calculate total score (0-10) + total_score <- ci_score + change_score + uniformity_score + + # Create status label + status <- dplyr::case_when( + total_score >= 8 ~ "Excellent", + total_score >= 6 ~ "Good", + total_score >= 4 ~ "Fair", + total_score >= 2 ~ "Needs Attention", + TRUE ~ "Critical" + ) + + # Return results + return(list( + score = round(total_score, 1), + status = status, + components = list( + ci = round(ci_score, 1), + change = round(change_score, 1), + uniformity = round(uniformity_score, 1) + ) + )) +} + +#' Create an irrigation recommendation map +#' +#' @param ci_current Current CI raster +#' @param ci_change CI change raster +#' @param field_shape Field boundary shape +#' @param title Map title +#' @return A tmap object with irrigation recommendations +#' +create_irrigation_map <- function(ci_current, ci_change, field_shape, title = "Irrigation Priority Zones") { + # Create a new raster for irrigation recommendations + irrigation_priority <- ci_current * 0 + + # Extract values for processing + ci_values <- terra::values(ci_current) + change_values <- terra::values(ci_change) + + # Create priority zones: + # 3 = High priority (low CI, negative trend) + # 2 = Medium priority (low CI but stable, or good CI with negative trend) + # 1 = Low priority (watch, good CI with slight decline) + # 0 = No action needed (good CI, stable/positive trend) + priority_values <- rep(NA, length(ci_values)) + + # High priority: Low CI (< 2) and negative change (< 0) + high_priority <- which(ci_values < 2 & change_values < 0 & !is.na(ci_values) & !is.na(change_values)) + priority_values[high_priority] <- 3 + + # Medium priority: Low CI (< 2) with stable/positive change, or moderate CI (2-4) with significant negative change (< -1) + medium_priority <- which( + (ci_values < 2 & change_values >= 0 & !is.na(ci_values) & !is.na(change_values)) | + (ci_values >= 2 & ci_values < 4 & change_values < -1 & !is.na(ci_values) & !is.na(change_values)) + ) + priority_values[medium_priority] <- 2 + + # Low priority (watch): Moderate/good CI (>= 2) with mild negative change (-1 to 0) + low_priority <- which( + ci_values >= 2 & change_values < 0 & change_values >= -1 & !is.na(ci_values) & !is.na(change_values) + ) + priority_values[low_priority] <- 1 + + # No action needed: Good CI (>= 2) with stable/positive change (>= 0) + no_action <- which(ci_values >= 2 & change_values >= 0 & !is.na(ci_values) & !is.na(change_values)) + priority_values[no_action] <- 0 + + # Set values in the irrigation priority raster + terra::values(irrigation_priority) <- priority_values + + # Create the map + tm_shape(irrigation_priority) + + tm_raster( + style = "cat", + palette = c("#1a9850", "#91cf60", "#fc8d59", "#d73027"), + labels = c("No Action", "Watch", "Medium Priority", "High Priority"), + title = "Irrigation Need" + ) + + tm_shape(field_shape) + + tm_borders(lwd = 2) + + tm_layout( + main.title = title, + legend.outside = FALSE, + legend.position = c("left", "bottom") + ) +} + +#' Simple mock function to get weather data for a field +#' In a real implementation, this would fetch data from a weather API +#' +#' @param start_date Start date for weather data +#' @param end_date End date for weather data +#' @param lat Latitude of the field center +#' @param lon Longitude of the field center +#' @return A data frame of weather data +#' +get_weather_data <- function(start_date, end_date, lat = -16.1, lon = 34.7) { + # This is a mock implementation - in production, you'd replace with actual API call + # to a service like OpenWeatherMap, NOAA, or other weather data provider + + # Create date sequence + dates <- seq.Date(from = as.Date(start_date), to = as.Date(end_date), by = "day") + n_days <- length(dates) + + # Generate some random but realistic weather data with seasonal patterns + # More rain in summer, less in winter (Southern hemisphere) + month_nums <- as.numeric(format(dates, "%m")) + + # Simplified seasonal patterns - adjust for your local climate + is_rainy_season <- month_nums %in% c(11, 12, 1, 2, 3, 4) + + # Generate rainfall - more in rainy season, occasional heavy rainfall + rainfall <- numeric(n_days) + rainfall[is_rainy_season] <- pmax(0, rnorm(sum(is_rainy_season), mean = 4, sd = 8)) + rainfall[!is_rainy_season] <- pmax(0, rnorm(sum(!is_rainy_season), mean = 0.5, sd = 2)) + + # Add some rare heavy rainfall events + heavy_rain_days <- sample(which(is_rainy_season), size = max(1, round(sum(is_rainy_season) * 0.1))) + rainfall[heavy_rain_days] <- rainfall[heavy_rain_days] + runif(length(heavy_rain_days), 20, 50) + + # Generate temperatures - seasonal variation + temp_mean <- 18 + 8 * sin((month_nums - 1) * pi/6) # Peak in January (month 1) + temp_max <- temp_mean + rnorm(n_days, mean = 5, sd = 1) + temp_min <- temp_mean - rnorm(n_days, mean = 5, sd = 1) + + # Create weather data frame + weather_data <- data.frame( + date = dates, + rainfall_mm = round(rainfall, 1), + temp_max_c = round(temp_max, 1), + temp_min_c = round(temp_min, 1), + temp_mean_c = round((temp_max + temp_min) / 2, 1) + ) + + return(weather_data) +} + +#' Creates a weather summary visualization integrated with CI data +#' +#' @param pivotName Name of the pivot field +#' @param ci_data CI quadrant data +#' @param days_to_show Number of days of weather to show +#' @return ggplot object +#' +create_weather_ci_plot <- function(pivotName, ci_data = CI_quadrant, days_to_show = 30) { + # Get field data + field_data <- ci_data %>% + dplyr::filter(field == pivotName) %>% + dplyr::arrange(Date) %>% + dplyr::filter(!is.na(value)) + + if (nrow(field_data) == 0) { + return(ggplot() + + annotate("text", x = 0, y = 0, label = "No data available") + + theme_void()) + } + + # Get the latest date and 30 days before + latest_date <- max(field_data$Date, na.rm = TRUE) + start_date <- latest_date - days_to_show + + # Filter for recent data only + recent_field_data <- field_data %>% + dplyr::filter(Date >= start_date) + + # Get center point coordinates for the field (would be calculated from geometry in production) + # This is mocked for simplicity + lat <- -16.1 # Mock latitude + lon <- 34.7 # Mock longitude + + # Get weather data + weather_data <- get_weather_data(start_date, latest_date, lat, lon) + + # Aggregate CI data to daily mean across subfields if needed + daily_ci <- recent_field_data %>% + dplyr::group_by(Date) %>% + dplyr::summarize(mean_ci = mean(value, na.rm = TRUE)) + + # Create combined plot with dual y-axis + g <- ggplot() + + # Rainfall as bars + geom_col(data = weather_data, aes(x = date, y = rainfall_mm), + fill = "#1565C0", alpha = 0.7, width = 0.7) + + # CI as a line + geom_line(data = daily_ci, aes(x = Date, y = mean_ci * 10), + color = "#2E7D32", size = 1) + + geom_point(data = daily_ci, aes(x = Date, y = mean_ci * 10), + color = "#2E7D32", size = 2) + + # Temperature range as ribbon + geom_ribbon(data = weather_data, + aes(x = date, ymin = temp_min_c, ymax = temp_max_c), + fill = "#FF9800", alpha = 0.2) + + # Primary y-axis (rainfall) + scale_y_continuous( + name = "Rainfall (mm)", + sec.axis = sec_axis(~./10, name = "Chlorophyll Index & Temperature (°C)") + ) + + labs( + title = paste("Field", pivotName, "- Weather and CI Relationship"), + subtitle = paste("Last", days_to_show, "days"), + x = "Date" + ) + + theme_minimal() + + theme( + axis.title.y.left = element_text(color = "#1565C0"), + axis.title.y.right = element_text(color = "#2E7D32"), + legend.position = "bottom" + ) + + return(g) +} \ No newline at end of file diff --git a/r_app/max_ci_field.r b/r_app/experiments/max_ci_field.r similarity index 100% rename from r_app/max_ci_field.r rename to r_app/experiments/max_ci_field.r diff --git a/r_app/experiments/mosaic_creation_fixed.R b/r_app/experiments/mosaic_creation_fixed.R new file mode 100644 index 0000000..e69de29 diff --git a/r_app/experiments/optimal_ci_analysis.R b/r_app/experiments/optimal_ci_analysis.R new file mode 100644 index 0000000..d353274 --- /dev/null +++ b/r_app/experiments/optimal_ci_analysis.R @@ -0,0 +1,421 @@ +# Optimal CI Analysis - Day 30 CI values with quadratic fitting +# Author: SmartCane Analysis Team +# Date: 2025-06-12 + +# Load required libraries +library(ggplot2) +library(dplyr) +library(readr) + +# Set file path +rds_file_path <- "C:/Users/timon/Resilience BV/4020 SCane ESA DEMO - Documenten/General/4020 SCDEMO Team/4020 TechnicalData/WP3/smartcane/laravel_app/storage/app/chemba/Data/extracted_ci/cumulative_vals/All_pivots_Cumulative_CI_quadrant_year_v2.rds" + +# Check if file exists +if (!file.exists(rds_file_path)) { + stop("RDS file not found at specified path: ", rds_file_path) +} + +# Load the data +cat("Loading RDS file...\n") +ci_data <- readRDS(rds_file_path) + +# Display structure of the data to understand it better +cat("Data structure:\n") +str(ci_data) +cat("\nFirst few rows:\n") +head(ci_data) +cat("\nColumn names:\n") +print(colnames(ci_data)) + +# Filter data based on requirements +cat("\nApplying data filters...\n") + +# 1. Filter out models that don't reach at least DOY 300 +model_doy_max <- ci_data %>% + group_by(model) %>% + summarise(max_doy = max(DOY, na.rm = TRUE), .groups = 'drop') + +valid_models <- model_doy_max %>% + filter(max_doy >= 300) %>% + pull(model) + +cat(paste("Models before filtering:", n_distinct(ci_data$model), "\n")) +cat(paste("Models reaching at least DOY 300:", length(valid_models), "\n")) + +ci_data <- ci_data %>% + filter(model %in% valid_models) + +# 2. Apply IQR filtering per DOY (remove outliers outside IQR) +cat("Applying IQR filtering per DOY...\n") +original_rows <- nrow(ci_data) + +ci_data <- ci_data %>% + group_by(DOY) %>% + mutate( + Q1 = quantile(FitData, 0.25, na.rm = TRUE), + Q3 = quantile(FitData, 0.75, na.rm = TRUE), + IQR = Q3 - Q1, + lower_bound = Q1 - 1.5 * IQR, + upper_bound = Q3 + 1.5 * IQR + ) %>% + filter(FitData >= lower_bound & FitData <= upper_bound) %>% + select(-Q1, -Q3, -IQR, -lower_bound, -upper_bound) %>% + ungroup() + +filtered_rows <- nrow(ci_data) +cat(paste("Rows before IQR filtering:", original_rows, "\n")) +cat(paste("Rows after IQR filtering:", filtered_rows, "\n")) +cat(paste("Removed", original_rows - filtered_rows, "outliers (", + round(100 * (original_rows - filtered_rows) / original_rows, 1), "%)\n")) + +# Check what day values are available after filtering +if ("DOY" %in% colnames(ci_data)) { + cat("\nUnique DOY values after filtering:\n") + print(sort(unique(ci_data$DOY))) +} else { + cat("\nNo 'DOY' column found. Available columns:\n") + print(colnames(ci_data)) +} + +# Extract CI values at day 30 for each field +cat("\nExtracting day 30 CI values...\n") + +# Set column names based on known structure +day_col <- "DOY" +ci_col <- "FitData" +field_col <- "model" + +# Try different possible field column name combinations +if ("field" %in% colnames(ci_data)) { + field_col <- "field" +} else if ("Field" %in% colnames(ci_data)) { + field_col <- "Field" +} else if ("pivot" %in% colnames(ci_data)) { + field_col <- "pivot" +} else if ("Pivot" %in% colnames(ci_data)) { + field_col <- "Pivot" +} else if ("field_id" %in% colnames(ci_data)) { + field_col <- "field_id" +} else if ("Field_ID" %in% colnames(ci_data)) { + field_col <- "Field_ID" +} + +# Check if we found the required columns +if (!("DOY" %in% colnames(ci_data))) { + stop("DOY column not found in data") +} +if (!("FitData" %in% colnames(ci_data))) { + stop("FitData column not found in data") +} +if (is.null(field_col)) { + cat("Could not automatically identify field column. Please check column names.\n") + cat("Available columns: ", paste(colnames(ci_data), collapse = ", "), "\n") + stop("Manual field column identification required") +} + +cat(paste("Using columns - DOY:", day_col, "Field:", field_col, "FitData:", ci_col, "\n")) + +# Extract day 30 data +day_30_data <- ci_data %>% + filter(DOY %% 30 == 0) %>% + select(field = !!sym(field_col), ci = !!sym(ci_col), DOY) %>% + na.omit() %>% + arrange(field) + +cat(paste("Found", nrow(day_30_data), "fields with day 30 CI values\n")) + +if (nrow(day_30_data) == 0) { + stop("No data found for day 30. Check if day 30 exists in the dataset.") +} + +# Display summary of day 30 data +cat("\nSummary of day 30 CI values:\n") +print(summary(day_30_data)) + +# Add field index for plotting (assuming fields represent some spatial or sequential order) +#day_30_data$field_index <- 1:nrow(day_30_data) + +# Create scatter plot +p1 <- ggplot(day_30_data, aes(x = DOY, y = ci)) + + geom_point(color = "blue", size = 3, alpha = 0.7) + + labs( + title = "CI Values at Day 30 for All Fields", + x = "Day of Year (DOY)", + y = "CI Value", + subtitle = paste("Total fields:", nrow(day_30_data)) + ) + + theme_minimal() + + theme( + plot.title = element_text(size = 14, face = "bold"), + axis.title = element_text(size = 12), + axis.text = element_text(size = 10) + ) + +print(p1) + +# Try multiple curve fitting approaches +cat("\nTrying different curve fitting approaches...\n") + +# Aggregate data by DOY (take mean CI for each DOY to reduce noise) +aggregated_data <- day_30_data %>% + group_by(DOY) %>% + summarise( + mean_ci = mean(ci, na.rm = TRUE), + median_ci = median(ci, na.rm = TRUE), + count = n(), + .groups = 'drop' + ) %>% + filter(count >= 5) # Only keep DOY values with sufficient data points + +cat(paste("Aggregated to", nrow(aggregated_data), "DOY points with sufficient data\n")) + +# Create prediction data for smooth curves +x_smooth <- seq(min(aggregated_data$DOY), max(aggregated_data$DOY), length.out = 100) + +# 1. Quadratic model (as requested) +cat("\n1. Fitting quadratic model...\n") +quad_model <- lm(mean_ci ~ poly(DOY, 2, raw = TRUE), data = aggregated_data) +quad_pred <- predict(quad_model, newdata = data.frame(DOY = x_smooth)) +quad_r2 <- summary(quad_model)$r.squared +cat(paste("Quadratic R² =", round(quad_r2, 3), "\n")) + +# 2. Logistic growth model: y = K / (1 + exp(-r*(x-x0))) - biologically realistic +cat("\n2. Fitting logistic growth model...\n") +tryCatch({ + # Estimate starting values + K_start <- max(aggregated_data$mean_ci) * 1.1 # Carrying capacity + r_start <- 0.05 # Growth rate + x0_start <- mean(aggregated_data$DOY) # Inflection point + + logistic_model <- nls(mean_ci ~ K / (1 + exp(-r * (DOY - x0))), + data = aggregated_data, + start = list(K = K_start, r = r_start, x0 = x0_start), + control = nls.control(maxiter = 1000)) + + logistic_pred <- predict(logistic_model, newdata = data.frame(DOY = x_smooth)) + logistic_r2 <- 1 - sum(residuals(logistic_model)^2) / sum((aggregated_data$mean_ci - mean(aggregated_data$mean_ci))^2) + cat(paste("Logistic growth R² =", round(logistic_r2, 3), "\n")) +}, error = function(e) { + cat("Logistic growth model failed to converge\n") + logistic_model <- NULL + logistic_pred <- NULL + logistic_r2 <- NA +}) + +# 3. Beta function model: good for crop growth curves with clear peak +cat("\n3. Fitting Beta function model...\n") +tryCatch({ + # Normalize DOY to 0-1 range for Beta function + doy_min <- min(aggregated_data$DOY) + doy_max <- max(aggregated_data$DOY) + aggregated_data$doy_norm <- (aggregated_data$DOY - doy_min) / (doy_max - doy_min) + + # Beta function: y = a * (x^(p-1)) * ((1-x)^(q-1)) + c + beta_model <- nls(mean_ci ~ a * (doy_norm^(p-1)) * ((1-doy_norm)^(q-1)) + c, + data = aggregated_data, + start = list(a = max(aggregated_data$mean_ci) * 20, p = 2, q = 3, c = min(aggregated_data$mean_ci)), + control = nls.control(maxiter = 1000)) + + # Predict on normalized scale then convert back + x_smooth_norm <- (x_smooth - doy_min) / (doy_max - doy_min) + beta_pred <- predict(beta_model, newdata = data.frame(doy_norm = x_smooth_norm)) + beta_r2 <- 1 - sum(residuals(beta_model)^2) / sum((aggregated_data$mean_ci - mean(aggregated_data$mean_ci))^2) + cat(paste("Beta function R² =", round(beta_r2, 3), "\n")) +}, error = function(e) { + cat("Beta function model failed to converge\n") + beta_model <- NULL + beta_pred <- NULL + beta_r2 <- NA +}) + +# 4. Gaussian (normal) curve: good for symmetric growth patterns +cat("\n4. Fitting Gaussian curve...\n") +tryCatch({ + # Gaussian: y = a * exp(-((x-mu)^2)/(2*sigma^2)) + c + gaussian_model <- nls(mean_ci ~ a * exp(-((DOY - mu)^2)/(2 * sigma^2)) + c, + data = aggregated_data, + start = list(a = max(aggregated_data$mean_ci), + mu = aggregated_data$DOY[which.max(aggregated_data$mean_ci)], + sigma = 50, + c = min(aggregated_data$mean_ci)), + control = nls.control(maxiter = 1000)) + + gaussian_pred <- predict(gaussian_model, newdata = data.frame(DOY = x_smooth)) + gaussian_r2 <- 1 - sum(residuals(gaussian_model)^2) / sum((aggregated_data$mean_ci - mean(aggregated_data$mean_ci))^2) + cat(paste("Gaussian R² =", round(gaussian_r2, 3), "\n")) +}, error = function(e) { + cat("Gaussian model failed to converge\n") + gaussian_model <- NULL + gaussian_pred <- NULL + gaussian_r2 <- NA +}) + +# 5. LOESS (local regression) - for comparison +cat("\n5. Fitting LOESS smoothing...\n") +loess_model <- loess(mean_ci ~ DOY, data = aggregated_data, span = 0.5) +loess_pred <- predict(loess_model, newdata = data.frame(DOY = x_smooth)) +loess_r2 <- 1 - sum(residuals(loess_model)^2) / sum((aggregated_data$mean_ci - mean(aggregated_data$mean_ci))^2) +cat(paste("LOESS R² =", round(loess_r2, 3), "\n")) + +# Calculate confidence intervals for both models +cat("\nCalculating confidence intervals...\n") + +# Function to calculate confidence intervals using residual-based method +calculate_ci <- function(model, data, newdata, alpha = 0.5) { + # Get model predictions + pred_vals <- predict(model, newdata = newdata) + + # For parametric models (lm), use built-in prediction intervals + if(class(model)[1] == "lm") { + pred_intervals <- predict(model, newdata = newdata, interval = "confidence", level = 1 - alpha) + return(list( + lower = pred_intervals[, "lwr"], + upper = pred_intervals[, "upr"] + )) + } + + # For LOESS, calculate confidence intervals using residual bootstrap + if(class(model)[1] == "loess") { + # Calculate residuals from the original model + fitted_vals <- fitted(model) + residuals_vals <- residuals(model) + residual_sd <- sd(residuals_vals, na.rm = TRUE) + + # Use normal approximation for confidence intervals + # For 50% CI, use 67% quantile (approximately 0.67 standard deviations) + margin <- qnorm(1 - alpha/2) * residual_sd + + return(list( + lower = pred_vals - margin, + upper = pred_vals + margin + )) + } + + # Fallback method + residual_sd <- sd(residuals(model), na.rm = TRUE) + margin <- qnorm(1 - alpha/2) * residual_sd + return(list( + lower = pred_vals - margin, + upper = pred_vals + margin + )) +}# Calculate CIs for quadratic model using aggregated data (same as model fitting) +quad_ci <- calculate_ci(quad_model, aggregated_data, data.frame(DOY = x_smooth)) + +# Calculate CIs for LOESS model using aggregated data (same as model fitting) +loess_ci <- calculate_ci(loess_model, aggregated_data, data.frame(DOY = x_smooth)) + +# Create separate plots for LOESS and Quadratic models +cat("\nCreating LOESS plot with confidence intervals...\n") + +# LOESS plot +p_loess <- ggplot(day_30_data, aes(x = DOY, y = ci)) + + geom_point(color = "lightblue", size = 1.5, alpha = 0.4) + + geom_point(data = aggregated_data, aes(x = DOY, y = mean_ci), + color = "darkblue", size = 3, alpha = 0.8) + + geom_ribbon(data = data.frame(DOY = x_smooth, + lower = loess_ci$lower, + upper = loess_ci$upper), + aes(x = DOY, ymin = lower, ymax = upper), + alpha = 0.3, fill = "purple", inherit.aes = FALSE) + + geom_line(data = data.frame(DOY = x_smooth, loess = loess_pred), + aes(x = DOY, y = loess), + color = "purple", size = 1.5) + + labs( + title = "LOESS Model - CI Values Over Growing Season", + x = "Day of Year (DOY)", + y = "CI Value", + subtitle = paste("LOESS R² =", round(loess_r2, 3), "| 50% Confidence Interval") + ) + + theme_minimal() + + theme( + plot.title = element_text(size = 14, face = "bold"), + axis.title = element_text(size = 12), + axis.text = element_text(size = 10) + ) + +# Find optimal point for LOESS +loess_max_idx <- which.max(loess_pred) +loess_optimal_doy <- x_smooth[loess_max_idx] +loess_optimal_ci <- loess_pred[loess_max_idx] + +p_loess <- p_loess + + geom_point(aes(x = loess_optimal_doy, y = loess_optimal_ci), + color = "red", size = 5, shape = 8) + + annotate("text", + x = loess_optimal_doy + 30, + y = loess_optimal_ci, + label = paste("Optimal: DOY", round(loess_optimal_doy, 1), "\nCI =", round(loess_optimal_ci, 3)), + color = "red", size = 4, fontface = "bold") + +print(p_loess) + +cat("\nCreating Quadratic plot with confidence intervals...\n") + +# Quadratic plot +p_quadratic <- ggplot(day_30_data, aes(x = DOY, y = ci)) + + geom_point(color = "lightcoral", size = 1.5, alpha = 0.4) + + geom_point(data = aggregated_data, aes(x = DOY, y = mean_ci), + color = "darkred", size = 3, alpha = 0.8) + + geom_ribbon(data = data.frame(DOY = x_smooth, + lower = quad_ci$lower, + upper = quad_ci$upper), + aes(x = DOY, ymin = lower, ymax = upper), + alpha = 0.3, fill = "red", inherit.aes = FALSE) + + geom_line(data = data.frame(DOY = x_smooth, quadratic = quad_pred), + aes(x = DOY, y = quadratic), + color = "red", size = 1.5) + + labs( + title = "Quadratic Model - CI Values Over Growing Season", + x = "Day of Year (DOY)", + y = "CI Value", + subtitle = paste("Quadratic R² =", round(quad_r2, 3), "| 50% Confidence Interval") + ) + + theme_minimal() + + theme( + plot.title = element_text(size = 14, face = "bold"), + axis.title = element_text(size = 12), + axis.text = element_text(size = 10) + ) + +# Find optimal point for Quadratic +quad_coeffs <- coef(quad_model) +a <- quad_coeffs[3] +b <- quad_coeffs[2] + +if(a != 0) { + quad_optimal_doy <- -b / (2*a) + doy_range <- range(aggregated_data$DOY) + if(quad_optimal_doy >= doy_range[1] && quad_optimal_doy <= doy_range[2]) { + quad_optimal_ci <- predict(quad_model, newdata = data.frame(DOY = quad_optimal_doy)) + } else { + quad_optimal_doy <- x_smooth[which.max(quad_pred)] + quad_optimal_ci <- max(quad_pred) + } +} else { + quad_optimal_doy <- x_smooth[which.max(quad_pred)] + quad_optimal_ci <- max(quad_pred) +} + +p_quadratic <- p_quadratic + + geom_point(aes(x = quad_optimal_doy, y = quad_optimal_ci), + color = "darkred", size = 5, shape = 8) + + annotate("text", + x = quad_optimal_doy + 30, + y = quad_optimal_ci, + label = paste("Optimal: DOY", round(quad_optimal_doy, 1), "\nCI =", round(quad_optimal_ci, 3)), + color = "darkred", size = 4, fontface = "bold") + +print(p_quadratic) +print(p_loess) + +# Print results summary +cat("\n=== RESULTS SUMMARY ===\n") +cat(paste("LOESS Model - R² =", round(loess_r2, 3), "\n")) +cat(paste(" Optimal DOY:", round(loess_optimal_doy, 1), "\n")) +cat(paste(" Optimal CI:", round(loess_optimal_ci, 4), "\n\n")) + +cat(paste("Quadratic Model - R² =", round(quad_r2, 3), "\n")) +cat(paste(" Optimal DOY:", round(quad_optimal_doy, 1), "\n")) +cat(paste(" Optimal CI:", round(quad_optimal_ci, 4), "\n")) + + diff --git a/r_app/plot_testing.R b/r_app/experiments/plot_testing.R similarity index 100% rename from r_app/plot_testing.R rename to r_app/experiments/plot_testing.R diff --git a/r_app/run_tests.R b/r_app/experiments/run_tests.R similarity index 100% rename from r_app/run_tests.R rename to r_app/experiments/run_tests.R diff --git a/r_app/utils_3.R b/r_app/experiments/utils_3.R similarity index 100% rename from r_app/utils_3.R rename to r_app/experiments/utils_3.R diff --git a/r_app/installPackages.R b/r_app/installPackages.R index 75b5e9e..c8d1a2f 100644 --- a/r_app/installPackages.R +++ b/r_app/installPackages.R @@ -1,15 +1,40 @@ -install.packages('CAST') -install.packages("packages/CIprep_0.1.4.tar.gz",repos=NULL, type="source") -install.packages('caret') -install.packages('exactextractr') -install.packages('googledrive') -install.packages('here') -install.packages('lubridate') -install.packages('raster') -install.packages('readxl') -install.packages('rsample') -install.packages('sf') -install.packages('terra') -install.packages('tidyverse') -install.packages('tmap') -install.packages('zoo') +# Install required packages for SmartCane project +# This script installs all packages needed to run the CI report dashboard + +# List of required packages +required_packages <- c( + # Core packages + "here", "tidyverse", "sf", "terra", "tmap", "lubridate", + + # Additional data manipulation + "zoo", "readxl", "knitr", "rmarkdown", "dplyr", "purrr", "stringr", + + # Spatial analysis + "exactextractr", + + # Machine learning and statistics + "rsample", "caret", "randomForest", "CAST" +) + +# Function to install missing packages +install_if_missing <- function(pkg) { + if (!requireNamespace(pkg, quietly = TRUE)) { + message(paste("Installing package:", pkg)) + install.packages(pkg, repos = "https://cloud.r-project.org") + } else { + message(paste("Package already installed:", pkg)) + } +} + +# Install missing packages +for (pkg in required_packages) { + install_if_missing(pkg) +} + +# Load core packages to verify installation +library(here) +library(tidyverse) +library(sf) +library(terra) + +message("All required packages have been installed!") diff --git a/r_app/interpolate_growth_model.R b/r_app/interpolate_growth_model.R index d55dd1e..189f4f4 100644 --- a/r_app/interpolate_growth_model.R +++ b/r_app/interpolate_growth_model.R @@ -32,15 +32,20 @@ main <- function() { message("No project_dir provided. Using default:", project_dir) } + # Make project_dir available globally so parameters_project.R can use it + assign("project_dir", project_dir, envir = .GlobalEnv) + # Initialize project configuration and load utility functions tryCatch({ source("parameters_project.R") - source("ci_extraction_utils.R") + source("growth_model_utils.R") }, error = function(e) { warning("Default source files not found. Attempting to source from 'r_app' directory.") tryCatch({ - source("r_app/parameters_project.R") - source("r_app/ci_extraction_utils.R") + source(here::here("r_app", "parameters_project.R")) + source(here::here("r_app", "growth_model_utils.R")) + warning(paste("Successfully sourced files from 'r_app' directory.")) + }, error = function(e) { stop("Failed to source required files from both default and 'r_app' directories.") }) @@ -92,5 +97,6 @@ main <- function() { }) } -# Run the main function if the script is executed directly -main() +if (sys.nframe() == 0) { + main() +} diff --git a/r_app/mosaic_creation.R b/r_app/mosaic_creation.R index ed20ba2..7f92d9f 100644 --- a/r_app/mosaic_creation.R +++ b/r_app/mosaic_creation.R @@ -28,19 +28,31 @@ main <- function() { # Capture command line arguments args <- commandArgs(trailingOnly = TRUE) + # Process project_dir argument with default + if (length(args) >= 3 && !is.na(args[3])) { + project_dir <- as.character(args[3]) + } else { + # Default project directory + project_dir <- "chemba" + message("No project_dir provided. Using default:", project_dir) + } + + # Make project_dir available globally so parameters_project.R can use it + assign("project_dir", project_dir, envir = .GlobalEnv) + # Process end_date argument with default if (length(args) >= 1 && !is.na(args[1])) { end_date <- as.Date(args[1]) if (is.na(end_date)) { message("Invalid end_date provided. Using current date.") - #end_date <- Sys.Date() - end_date <- "2023-10-01" # Default date for testing + end_date <- Sys.Date() + #end_date <- "2024-08-25" # Default date for testing } } else { # Default to current date if no argument is provided - #end_date <- Sys.Date() - end_date <- "2023-10-01" # Default date for testing - message("No end_date provided. Using current date:", format(end_date)) + end_date <- Sys.Date() + #end_date <- "2024-08-25" # Default date for testing + message("No end_date provided. Using current date: ", format(end_date)) } # Process offset argument with default @@ -56,25 +68,20 @@ main <- function() { message("No offset provided. Using default:", offset, "days") } - # Process project_dir argument with default - if (length(args) >= 3 && !is.na(args[3])) { - project_dir <- as.character(args[3]) - } else { - # Default project directory - project_dir <- "chemba" - message("No project_dir provided. Using default:", project_dir) - } + # 3. Initialize project configuration # -------------------------------- tryCatch({ source("parameters_project.R") - source("ci_extraction_utils.R") + source("mosaic_creation_utils.R") + safe_log(paste("Successfully sourced files from default directory.")) }, error = function(e) { warning("Default source files not found. Attempting to source from 'r_app' directory.") tryCatch({ - source("r_app/parameters_project.R") - source("r_app/ci_extraction_utils.R") + source(here::here("r_app", "parameters_project.R")) + source(here::here("r_app", "mosaic_creation_utils.R")) + warning(paste("Successfully sourced files from 'r_app' directory.")) }, error = function(e) { stop("Failed to source required files from both default and 'r_app' directories.") }) @@ -82,8 +89,8 @@ main <- function() { # 4. Generate date range for processing # --------------------------------- - dates <- date_list(end_date, offset) - log_message(paste("Processing data for week", dates$week, "of", dates$year)) + dates <- date_list(end_date, offset) + safe_log(paste("Processing data for week", dates$week, "of", dates$year)) # Create output filename file_name_tif <- if (length(args) >= 4 && !is.na(args[4])) { @@ -92,7 +99,7 @@ main <- function() { paste0("week_", sprintf("%02d", dates$week), "_", dates$year, ".tif") } - log_message(paste("Output will be saved as:", file_name_tif)) + safe_log(paste("Output will be saved as:", file_name_tif)) # 5. Create weekly mosaic using the function from utils # ------------------------------------------------- @@ -107,5 +114,6 @@ main <- function() { ) } -# Run the main function if the script is executed directly -main() +if (sys.nframe() == 0) { + main() +} diff --git a/r_app/mosaic_creation_utils.R b/r_app/mosaic_creation_utils.R index 2e92030..5891cc6 100644 --- a/r_app/mosaic_creation_utils.R +++ b/r_app/mosaic_creation_utils.R @@ -3,8 +3,7 @@ # Utility functions for creating weekly mosaics from daily satellite imagery. # These functions support cloud cover assessment, date handling, and mosaic creation. -#' Safe logging function that works whether log_message exists or not -#' +#' Safe logging function #' @param message The message to log #' @param level The log level (default: "INFO") #' @return NULL (used for side effects) @@ -158,34 +157,46 @@ count_cloud_coverage <- function(vrt_list, field_boundaries) { tryCatch({ # Calculate total pixel area using the first VRT file - total_pix_area <- terra::rast(vrt_list[1]) %>% - terra::subset(1) %>% - terra::setValues(1) %>% - terra::crop(field_boundaries, mask = TRUE) %>% + total_pix_area <- terra::rast(vrt_list[1]) |> + terra::subset(1) |> + terra::setValues(1) |> + terra::crop(field_boundaries, mask = TRUE) |> terra::global(fun = "notNA") - # Extract layer 1 from all rasters (for cloud detection) - layer_5_list <- purrr::map(vrt_list, function(file) { - terra::rast(file) %>% terra::subset(1) - }) %>% terra::rast() + # Process each raster to detect clouds and shadows + processed_rasters <- list() + cloud_masks <- list() + + # Create data frame for missing pixels count + missing_pixels_df <- data.frame( + filename = vrt_list, + notNA = numeric(length(vrt_list)), + total_pixels = numeric(length(vrt_list)), + missing_pixels_percentage = numeric(length(vrt_list)), + thres_5perc = numeric(length(vrt_list)), + thres_40perc = numeric(length(vrt_list)) + ) + # Fill in the data frame with missing pixel statistics + for (i in seq_along(processed_rasters)) { + notna_count <- terra::global(processed_rasters[[i]][[1]], fun = "notNA")$notNA + missing_pixels_df$notNA[i] <- notna_count + missing_pixels_df$total_pixels[i] <- total_pix_area$notNA + missing_pixels_df$missing_pixels_percentage[i] <- round(100 - ((notna_count / total_pix_area$notNA) * 100)) + missing_pixels_df$thres_5perc[i] <- as.integer(missing_pixels_df$missing_pixels_percentage[i] < 5) + missing_pixels_df$thres_40perc[i] <- as.integer(missing_pixels_df$missing_pixels_percentage[i] < 45) + } - # Calculate percentage of missing pixels (clouds) - missing_pixels_count <- terra::global(layer_5_list, fun = "notNA") %>% - dplyr::mutate( - total_pixels = total_pix_area$notNA, - missing_pixels_percentage = round(100 - ((notNA / total_pix_area$notNA) * 100)), - thres_5perc = as.integer(missing_pixels_percentage < 5), - thres_40perc = as.integer(missing_pixels_percentage < 45) - ) + # Store processed rasters and cloud masks as attributes + attr(missing_pixels_df, "cloud_masks") <- cloud_masks + attr(missing_pixels_df, "processed_rasters") <- processed_rasters # Log results safe_log(paste( "Cloud cover assessment completed for", length(vrt_list), "files.", - sum(missing_pixels_count$thres_5perc), "files with <5% cloud cover,", - sum(missing_pixels_count$thres_40perc), "files with <45% cloud cover" + sum(missing_pixels_df$thres_5perc), "files with <5% cloud cover,", + sum(missing_pixels_df$thres_40perc), "files with <45% cloud cover" )) - - return(missing_pixels_count) + return(missing_pixels_df) }, error = function(e) { warning("Error in cloud coverage calculation: ", e$message) return(NULL) @@ -209,8 +220,8 @@ create_mosaic <- function(vrt_list, missing_pixels_count, field_boundaries = NUL safe_log("No images available for this period, creating empty mosaic", "WARNING") - x <- terra::rast(raster_files_final[1]) %>% - terra::setValues(0) %>% + x <- terra::rast(raster_files_final[1]) |> + terra::setValues(0) |> terra::crop(field_boundaries, mask = TRUE) names(x) <- c("Red", "Green", "Blue", "NIR", "CI") @@ -227,40 +238,111 @@ create_mosaic <- function(vrt_list, missing_pixels_count, field_boundaries = NUL return(x) } - # Determine best rasters to use based on cloud coverage - index_5perc <- which(missing_pixels_count$thres_5perc == max(missing_pixels_count$thres_5perc)) - index_40perc <- which(missing_pixels_count$thres_40perc == max(missing_pixels_count$thres_40perc)) + # Check if we have processed rasters from cloud detection + processed_rasters <- attr(missing_pixels_count, "processed_rasters") + cloud_masks <- attr(missing_pixels_count, "cloud_masks") - # Create mosaic based on available cloud-free images - if (sum(missing_pixels_count$thres_5perc) > 1) { - safe_log("Creating max composite from multiple cloud-free images (<5% clouds)") + if (!is.null(processed_rasters) && length(processed_rasters) > 0) { + safe_log("Using cloud-masked rasters for mosaic creation") - cloudy_rasters_list <- vrt_list[index_5perc] - rsrc <- terra::sprc(cloudy_rasters_list) - x <- terra::mosaic(rsrc, fun = "max") - - } else if (sum(missing_pixels_count$thres_5perc) == 1) { - safe_log("Using single cloud-free image (<5% clouds)") - - x <- terra::rast(vrt_list[index_5perc[1]]) - - } else if (sum(missing_pixels_count$thres_40perc) > 1) { - safe_log("Creating max composite from partially cloudy images (<40% clouds)", "WARNING") - - cloudy_rasters_list <- vrt_list[index_40perc] - rsrc <- terra::sprc(cloudy_rasters_list) - x <- terra::mosaic(rsrc, fun = "max") - - } else if (sum(missing_pixels_count$thres_40perc) == 1) { - safe_log("Using single partially cloudy image (<40% clouds)", "WARNING") - - x <- terra::rast(vrt_list[index_40perc[1]]) + # Determine best rasters to use based on cloud coverage + index_5perc <- which(missing_pixels_count$thres_5perc == max(missing_pixels_count$thres_5perc)) + index_40perc <- which(missing_pixels_count$thres_40perc == max(missing_pixels_count$thres_40perc)) + # Create mosaic based on available cloud-free images + if (sum(missing_pixels_count$thres_5perc) > 1) { + safe_log("Creating max composite from multiple cloud-free images (<5% clouds)") + + # Use the cloud-masked rasters instead of original files + cloudy_rasters_list <- processed_rasters[index_5perc] + rsrc <- terra::sprc(cloudy_rasters_list) + x <- terra::mosaic(rsrc, fun = "max") + + # Also create a composite mask showing where data is valid + mask_list <- cloud_masks[index_5perc] + mask_rsrc <- terra::sprc(mask_list) + mask_composite <- terra::mosaic(mask_rsrc, fun = "max") + attr(x, "cloud_mask") <- mask_composite + + } else if (sum(missing_pixels_count$thres_5perc) == 1) { + safe_log("Using single cloud-free image (<5% clouds)") + + # Use the cloud-masked raster + x <- processed_rasters[[index_5perc[1]]] + attr(x, "cloud_mask") <- cloud_masks[[index_5perc[1]]] + + } else if (sum(missing_pixels_count$thres_40perc) > 1) { + safe_log("Creating max composite from partially cloudy images (<40% clouds)", "WARNING") + + # Use the cloud-masked rasters + cloudy_rasters_list <- processed_rasters[index_40perc] + rsrc <- terra::sprc(cloudy_rasters_list) + x <- terra::mosaic(rsrc, fun = "max") + + # Also create a composite mask + mask_list <- cloud_masks[index_40perc] + mask_rsrc <- terra::sprc(mask_list) + mask_composite <- terra::mosaic(mask_rsrc, fun = "max") + attr(x, "cloud_mask") <- mask_composite + + } else if (sum(missing_pixels_count$thres_40perc) == 1) { + safe_log("Using single partially cloudy image (<40% clouds)", "WARNING") + + # Use the cloud-masked raster + x <- processed_rasters[[index_40perc[1]]] + attr(x, "cloud_mask") <- cloud_masks[[index_40perc[1]]] + + } else { + safe_log("No cloud-free images available, using all cloud-masked images", "WARNING") + + # Use all cloud-masked rasters + rsrc <- terra::sprc(processed_rasters) + x <- terra::mosaic(rsrc, fun = "max") + + # Also create a composite mask + mask_rsrc <- terra::sprc(cloud_masks) + mask_composite <- terra::mosaic(mask_rsrc, fun = "max") + attr(x, "cloud_mask") <- mask_composite + } } else { - safe_log("No cloud-free images available, using all images", "WARNING") + # Fall back to original behavior if no cloud-masked rasters available + safe_log("No cloud-masked rasters available, using original images", "WARNING") - rsrc <- terra::sprc(vrt_list) - x <- terra::mosaic(rsrc, fun = "max") + # Determine best rasters to use based on cloud coverage + index_5perc <- which(missing_pixels_count$thres_5perc == max(missing_pixels_count$thres_5perc)) + index_40perc <- which(missing_pixels_count$thres_40perc == max(missing_pixels_count$thres_40perc)) + + # Create mosaic based on available cloud-free images + if (sum(missing_pixels_count$thres_5perc) > 1) { + safe_log("Creating max composite from multiple cloud-free images (<5% clouds)") + + cloudy_rasters_list <- vrt_list[index_5perc] + rsrc <- terra::sprc(cloudy_rasters_list) + x <- terra::mosaic(rsrc, fun = "max") + + } else if (sum(missing_pixels_count$thres_5perc) == 1) { + safe_log("Using single cloud-free image (<5% clouds)") + + x <- terra::rast(vrt_list[index_5perc[1]]) + + } else if (sum(missing_pixels_count$thres_40perc) > 1) { + safe_log("Creating max composite from partially cloudy images (<40% clouds)", "WARNING") + + cloudy_rasters_list <- vrt_list[index_40perc] + rsrc <- terra::sprc(cloudy_rasters_list) + x <- terra::mosaic(rsrc, fun = "max") + + } else if (sum(missing_pixels_count$thres_40perc) == 1) { + safe_log("Using single partially cloudy image (<40% clouds)", "WARNING") + + x <- terra::rast(vrt_list[index_40perc[1]]) + + } else { + safe_log("No cloud-free images available, using all images", "WARNING") + + rsrc <- terra::sprc(vrt_list) + x <- terra::mosaic(rsrc, fun = "max") + } } # Set consistent layer names @@ -288,18 +370,51 @@ save_mosaic <- function(mosaic_raster, output_dir, file_name, plot_result = FALS # Create full file path file_path <- here::here(output_dir, file_name) + # Get cloud mask if it exists + cloud_mask <- attr(mosaic_raster, "cloud_mask") + # Save raster terra::writeRaster(mosaic_raster, file_path, overwrite = TRUE) + # Save cloud mask if available + if (!is.null(cloud_mask)) { + # Create mask filename by adding _mask before extension + mask_file_name <- gsub("\\.(tif|TIF)$", "_mask.\\1", file_name) + mask_file_path <- here::here(output_dir, mask_file_name) + + # Save the mask + terra::writeRaster(cloud_mask, mask_file_path, overwrite = TRUE) + safe_log(paste("Cloud/shadow mask saved to:", mask_file_path)) + } + # Create plots if requested if (plot_result) { + # Plot the CI band if ("CI" %in% names(mosaic_raster)) { terra::plot(mosaic_raster$CI, main = paste("CI map", file_name)) } + # Plot RGB image if (all(c("Red", "Green", "Blue") %in% names(mosaic_raster))) { terra::plotRGB(mosaic_raster, main = paste("RGB map", file_name)) } + + # Plot cloud mask if available + if (!is.null(cloud_mask)) { + terra::plot(cloud_mask, main = paste("Cloud/shadow mask", file_name), + col = c("red", "green")) + } + + # If we have both RGB and cloud mask, create a side-by-side comparison + if (all(c("Red", "Green", "Blue") %in% names(mosaic_raster)) && !is.null(cloud_mask)) { + old_par <- par(mfrow = c(1, 2)) + terra::plotRGB(mosaic_raster, main = "RGB Image") + + # Create a colored mask for visualization (red = cloud/shadow, green = clear) + mask_plot <- cloud_mask + terra::plot(mask_plot, main = "Cloud/Shadow Mask", col = c("red", "green")) + par(old_par) + } } # Log save completion diff --git a/r_app/report_utils.R b/r_app/report_utils.R index 76a5a94..8ed131b 100644 --- a/r_app/report_utils.R +++ b/r_app/report_utils.R @@ -55,10 +55,9 @@ subchunkify <- function(g, fig_height=7, fig_width=5) { #' @param week Week number to display in the title #' @param age Age of the crop in weeks #' @param borders Whether to display field borders (default: FALSE) -#' @param use_breaks Whether to use breaks or continuous spectrum for the raster (default: TRUE) #' @return A tmap object with the CI map #' -create_CI_map <- function(pivot_raster, pivot_shape, pivot_spans, show_legend = F, legend_is_portrait = F, week, age, borders = FALSE, use_breaks = TRUE){ +create_CI_map <- function(pivot_raster, pivot_shape, pivot_spans, show_legend = F, legend_is_portrait = F, week, age, borders = FALSE){ # Input validation if (missing(pivot_raster) || is.null(pivot_raster)) { stop("pivot_raster is required") @@ -75,34 +74,17 @@ create_CI_map <- function(pivot_raster, pivot_shape, pivot_spans, show_legend = if (missing(age) || is.null(age)) { stop("age parameter is required") } - - # Create the base map - map <- tm_shape(pivot_raster, unit = "m") - - # Add raster with either breaks or continuous spectrum based on parameter - if (use_breaks) { - map <- map + tm_raster(breaks = c(0,0.5,1,2,3,4,5,6,7,Inf), - palette = "RdYlGn", - legend.is.portrait = legend_is_portrait, - midpoint = NA, - title = "CI") - } else { - map <- map + tm_raster(palette = "RdYlGn", - legend.is.portrait = legend_is_portrait, - style = "cont", # Use continuous spectrum - title = "CI") - } - - # Add layout elements + # Create the base map + map <- tm_shape(pivot_raster, unit = "m") # Add raster with continuous spectrum (fixed scale 1-8 for consistent comparison) + map <- map + tm_raster(col.scale = tm_scale_continuous(values = "brewer.rd_yl_gn", + limits = c(1, 8)), + col.legend = tm_legend(title = "CI", + orientation = if(legend_is_portrait) "portrait" else "landscape", + show = show_legend, + position = c("left", "bottom"))) + # Add layout elements map <- map + tm_layout(main.title = paste0("Max CI week ", week,"\n", age, " weeks old"), - main.title.size = 0.7, - legend.show = show_legend, - legend.position = c("left", "bottom"), - # legend.width = 0.5, - # legend.height = 0.5, - # legend.text.size = 0.8, - # legend.title.size = 0.9, - legend.outside = FALSE) + main.title.size = 0.7) # Add borders if requested if (borders) { @@ -128,10 +110,9 @@ create_CI_map <- function(pivot_raster, pivot_shape, pivot_spans, show_legend = #' @param week_2 Second week number for comparison #' @param age Age of the crop in weeks #' @param borders Whether to display field borders (default: TRUE) -#' @param use_breaks Whether to use breaks or continuous spectrum for the raster (default: TRUE) #' @return A tmap object with the CI difference map #' -create_CI_diff_map <- function(pivot_raster, pivot_shape, pivot_spans, show_legend = F, legend_is_portrait = F, week_1, week_2, age, borders = TRUE, use_breaks = TRUE){ +create_CI_diff_map <- function(pivot_raster, pivot_shape, pivot_spans, show_legend = F, legend_is_portrait = F, week_1, week_2, age, borders = TRUE){ # Input validation if (missing(pivot_raster) || is.null(pivot_raster)) { stop("pivot_raster is required") @@ -148,35 +129,18 @@ create_CI_diff_map <- function(pivot_raster, pivot_shape, pivot_spans, show_lege if (missing(age) || is.null(age)) { stop("age parameter is required") } - - # Create the base map - map <- tm_shape(pivot_raster, unit = "m") - - # Add raster with either breaks or continuous spectrum based on parameter - if (use_breaks) { - map <- map + tm_raster(breaks = c(-3,-2,-1,0,1,2,3), - palette = "RdYlGn", - legend.is.portrait = legend_is_portrait, - midpoint = 0, - title = "CI difference") - } else { - map <- map + tm_raster(palette = "RdYlGn", - legend.is.portrait = legend_is_portrait, - style = "cont", # Use continuous spectrum - midpoint = 0, - title = "CI difference") - } - - # Add layout elements + # Create the base map + map <- tm_shape(pivot_raster, unit = "m") # Add raster with continuous spectrum (centered at 0 for difference maps, fixed scale) + map <- map + tm_raster(col.scale = tm_scale_continuous(values = "brewer.rd_yl_gn", + midpoint = 0, + limits = c(-3, 3)), + col.legend = tm_legend(title = "CI difference", + orientation = if(legend_is_portrait) "portrait" else "landscape", + show = show_legend, + position = c("left", "bottom"))) + # Add layout elements map <- map + tm_layout(main.title = paste0("CI change week ", week_1, " - week ", week_2, "\n", age, " weeks old"), - main.title.size = 0.7, - legend.show = show_legend, - legend.position = c("left", "bottom"), - # legend.width = 0.5, - # legend.height = 0.5, - # legend.text.size = 0.8, - # legend.title.size = 0.9, - legend.outside = FALSE) + main.title.size = 0.7) # Add borders if requested if (borders) { @@ -205,7 +169,6 @@ create_CI_diff_map <- function(pivot_raster, pivot_shape, pivot_spans, show_lege #' @param week_minus_1 Previous week number #' @param week_minus_2 Two weeks ago week number #' @param week_minus_3 Three weeks ago week number -#' @param use_breaks Whether to use discrete breaks or continuous spectrum (default: TRUE) #' @param borders Whether to display field borders (default: TRUE) #' @return NULL (adds output directly to R Markdown document) #' @@ -221,7 +184,6 @@ ci_plot <- function(pivotName, week_minus_1 = week_minus_1, week_minus_2 = week_minus_2, week_minus_3 = week_minus_3, - use_breaks = TRUE, borders = TRUE){ # Input validation if (missing(pivotName) || is.null(pivotName) || pivotName == "") { @@ -282,35 +244,28 @@ ci_plot <- function(pivotName, # Create spans for borders joined_spans2 <- field_boundaries %>% - sf::st_transform(sf::st_crs(pivotShape)) %>% - dplyr::filter(field %in% pivotName) + sf::st_transform(sf::st_crs(pivotShape)) %>% dplyr::filter(field %in% pivotName) # Create the maps for different timepoints CImap_m2 <- create_CI_map(singlePivot_m2, AllPivots2, joined_spans2, show_legend = TRUE, legend_is_portrait = TRUE, - week = week_minus_2, age = age - 2, borders = borders, - use_breaks = use_breaks) + week = week_minus_2, age = age - 2, borders = borders) CImap_m1 <- create_CI_map(singlePivot_m1, AllPivots2, joined_spans2, show_legend = FALSE, legend_is_portrait = FALSE, - week = week_minus_1, age = age - 1, borders = borders, - use_breaks = use_breaks) + week = week_minus_1, age = age - 1, borders = borders) CImap <- create_CI_map(singlePivot, AllPivots2, joined_spans2, show_legend = FALSE, legend_is_portrait = FALSE, - week = week, age = age, borders = borders, - use_breaks = use_breaks) - - # Create difference maps - only show legend on the second one to avoid redundancy + week = week, age = age, borders = borders) + # Create difference maps - only show legend on the second one to avoid redundancy CI_max_abs_last_week <- create_CI_diff_map(abs_CI_last_week, AllPivots2, joined_spans2, - show_legend = FALSE, legend_is_portrait = TRUE, - week_1 = week, week_2 = week_minus_1, age = age, borders = borders, - use_breaks = use_breaks) + show_legend = FALSE, legend_is_portrait = FALSE, + week_1 = week, week_2 = week_minus_1, age = age, borders = borders) CI_max_abs_three_week <- create_CI_diff_map(abs_CI_three_week, AllPivots2, joined_spans2, show_legend = TRUE, legend_is_portrait = TRUE, - week_1 = week, week_2 = week_minus_3, age = age, borders = borders, - use_breaks = use_breaks) + week_1 = week, week_2 = week_minus_3, age = age, borders = borders) # Arrange the maps tst <- tmap_arrange(CImap_m2, CImap_m1, CImap, CI_max_abs_last_week, CI_max_abs_three_week, nrow = 1) diff --git a/r_app/system_architecture.md b/r_app/system_architecture.md new file mode 100644 index 0000000..cf4775b --- /dev/null +++ b/r_app/system_architecture.md @@ -0,0 +1,409 @@ + +# SmartCane System Architecture + +## Overview + +The SmartCane system is a comprehensive agricultural intelligence platform that processes satellite imagery and farm data to provide agronomic insights for sugarcane farmers. The system architecture follows a modular, layered approach with clear separation of concerns between data acquisition, processing, and presentation. + +## Architectural Layers + +The SmartCane system follows a layered architecture pattern, which is a standard approach in software engineering for organizing complex systems. This architecture divides the system into distinct functional layers, each with specific responsibilities. While these layers aren't explicitly shown as separate visual elements in the diagrams, they help conceptualize how components are organized by their function: + + + +### 1. Data Acquisition Layer +- **Role**: Responsible for fetching raw data from external sources and user inputs +- **Components**: Manual Sentinel Hub Requests, Python API Downloader, User Input Interface +- **Functions**: Manual request setup on Sentinel Hub Requests Builder for specific client fields, connects to satellite data providers, downloads imagery, manages API credentials, performs preliminary data validation + +### 2. Processing Layer (SmartCane Engine) +- **Role**: Core analytical engine that transforms raw data into actionable insights +- **Components**: Python API Downloader (pre-processing), R Processing Engine (analytics) +- **Functions**: Image processing, cloud masking, crop index calculation, field boundary processing, statistical analysis, report generation + +### 3. Presentation Layer +- **Role**: Delivers insights to end users in accessible formats +- **Components**: Laravel Web App, Email Delivery System +- **Functions**: Interactive dashboards, visualization, report delivery, user management, project scheduling + +### 4. Data Storage Layer +- **Role**: Persists system data across processing cycles +- **Components**: File System, Database +- **Functions**: Stores raw imagery, processed rasters, analytical results, user data, configuration + +## Key Subsystems + +### 1. Python API Downloader +- **Role**: Acquires and pre-processes satellite imagery +- **Inputs**: API credentials, field boundaries, date parameters, evaluation scripts +- **Outputs**: Raw satellite images, merged GeoTIFFs, virtual rasters +- **Interfaces**: External satellite APIs (Planet via Sentinel Hub), file system +- **Orchestration**: Triggered by shell scripts from the Laravel application + +### 2. R Processing Engine +- **Role**: Performs advanced analytics and generates insights +- **Inputs**: Processed satellite imagery, field boundaries, harvest data, project parameters +- **Outputs**: Crop indices, mosaics, RDS data files, agronomic reports +- **Interfaces**: File system, report templates +- **Orchestration**: Triggered by shell scripts from the Laravel application + +### 3. Laravel Web Application +- **Role**: Provides operator interface and orchestrates the overall system +- **Inputs**: User data, configuration settings +- **Outputs**: Web interface, scheduling, report delivery +- **Interfaces**: Users, database, file system +- **Orchestration**: Controls execution of the SmartCane Engine via shell scripts + +### 4. Shell Script Orchestration +- **Role**: Bridges between web application and processing components +- **Functions**: Triggers processing workflows, manages execution environment, handles errors +- **Examples**: runcane.sh, runpython.sh, build_mosaic.sh, build_report.sh + +## Data Flow + +1. **Input Stage**: + - Operators (internal team) manually prepare and submit requests on Sentinel Hub Requests Builder for the specific fields of a client. + - Operators (internal team) provide farm data (field boundaries, harvest data) via the Laravel Web App. + - System schedules data acquisition for specific dates/regions + +2. **Acquisition Stage**: + - Laravel triggers Python API Downloader via shell scripts + - Python connects to satellite data providers and downloads raw imagery + - Downloaded data is stored in the file system + +3. **Processing Stage**: + - Laravel triggers R Processing Engine via shell scripts + - R scripts read satellite imagery and farm data + - Processing produces crop indices, analytics, and reports + - Results are stored in the file system + +4. **Output Stage**: + - Laravel Web App accesses processed results + - Reports are delivered to users via email + +## System Integration Points + +- **Python-R Integration**: Data handover via file system (GeoTIFF, virtual rasters) +- **Engine-Laravel Integration**: Orchestration via shell scripts, data exchange via file system and database +- **User-System Integration**: Web interface, file uploads, email notifications + +## Developed/Customized Elements + +- **Custom Cloud Masking Algorithm**: Specialized for agricultural applications in tropical regions +- **Crop Index Extraction Pipeline**: Tailored to sugarcane spectral characteristics +- **Reporting Templates**: Designed for agronomic decision support +- **Shell Script Orchestration**: Custom workflow management for the system's components + +## Strategic Role of Satellite Data + +Satellite data is central to the SmartCane system, providing: +- Regular, non-invasive field monitoring +- Detection of spatial patterns not visible from ground level +- Historical analysis of crop performance +- Early warning of crop stress or disease +- Quantification of field variability for precision agriculture + +## Pilot Utilization Sites + +The SmartCane system is currently operational in Mozambique, Kenya, and Tanzania. Future pilot deployments and expansions are planned for Uganda, Colombia, Mexico, Guatemala, South Africa, and Zambia. + +--- + +## System Architecture Diagrams + +Below are diagrams illustrating the system architecture from different perspectives. + +### Overall System Architecture + +This diagram provides a high-level overview of the complete SmartCane system, showing how major components interact. It focuses on the system boundaries and main data flows between the Python API Downloader, R Processing Engine, Laravel Web App, and data storage components. This view helps understand how the system works as a whole. + +```mermaid +graph TD + A["fa:fa-satellite External Satellite Data Providers API"] --> PyDL["fa:fa-download Python API Downloader"]; + C["fa:fa-users Users: Farm Data Input e.g., GeoJSON, Excel"] --> D{"fa:fa-laptop-code Laravel Web App"}; + + subgraph SmartCane System + PyDL --> G["fa:fa-folder-open File System: Raw Satellite Imagery, Rasters, RDS, Reports, Boundaries"]; + E["fa:fa-cogs R Processing Engine"] -- Reads --> G; + E -- Writes --> G; + + D -- Manages/Triggers --> F["fa:fa-terminal Shell Script Orchestration"]; + F -- Executes --> PyDL; + F -- Executes --> E; + + D -- Manages/Accesses --> G; + D -- Reads/Writes --> H["fa:fa-database Database: Project Metadata, Users, Schedules"]; + + E -- Generates --> I["fa:fa-file-alt Agronomic Reports: DOCX, HTML"]; + D -- Accesses/Delivers --> I; + end + + D --> J["fa:fa-desktop Users: Web Interface (future)"]; + I -- Via Email (SMTP) --> K["fa:fa-envelope Users: Email Reports"]; + + style E fill:#f9f,stroke:#333,stroke-width:2px + style D fill:#bbf,stroke:#333,stroke-width:2px + style PyDL fill:#ffdd57,stroke:#333,stroke-width:2px +``` + +### R Processing Engine Detail + +This diagram zooms in on the R Processing Engine subsystem, detailing the internal components and data flow. It shows how raw satellite imagery and field data progress through various R scripts to produce crop indices and reports. The diagram highlights the data transformation pipeline within this analytical core of the SmartCane system. + +```mermaid +graph TD + subgraph R Processing Engine + + direction TB + + subgraph Inputs + SatelliteImages["fa:fa-image Raw Satellite Imagery"] + FieldBoundaries["fa:fa-map-marker-alt Field Boundaries .geojson"] + HarvestData["fa:fa-file-excel Harvest Data .xlsx"] + ProjectParams["fa:fa-file-code Project Parameters .R"] + end + + subgraph Core R Scripts & Processes + ParamConfig("fa:fa-cogs parameters_project.R") + MosaicScript("fa:fa-images mosaic_creation.R") + CIExtractionScript("fa:fa-microscope ci_extraction.R") + ReportUtils("fa:fa-tools executive_report_utils.R") + DashboardRmd("fa:fa-tachometer-alt CI_report_dashboard_planet_enhanced.Rmd") + SummaryRmd("fa:fa-list-alt CI_report_executive_summary.Rmd") + end + + subgraph Outputs + WeeklyMosaics["fa:fa-file-image Weekly Mosaics .tif"] + CIDataRDS["fa:fa-database CI Data .rds"] + CIRasters["fa:fa-layer-group CI Rasters .tif"] + DashboardReport["fa:fa-chart-bar Dashboard Report .docx/.html"] + SummaryReport["fa:fa-file-invoice Executive Summary .docx/.html"] + end + + %% Data Flow + ProjectParams --> ParamConfig; + + SatelliteImages --> MosaicScript; + FieldBoundaries --> MosaicScript; + ParamConfig --> MosaicScript; + MosaicScript --> WeeklyMosaics; + + WeeklyMosaics --> CIExtractionScript; + FieldBoundaries --> CIExtractionScript; + ParamConfig --> CIExtractionScript; + CIExtractionScript --> CIDataRDS; + CIExtractionScript --> CIRasters; + + CIDataRDS --> ReportUtils; + CIRasters --> ReportUtils; + HarvestData --> ReportUtils; + ParamConfig --> ReportUtils; + + ReportUtils --> DashboardRmd; + ReportUtils --> SummaryRmd; + ParamConfig --> DashboardRmd; + ParamConfig --> SummaryRmd; + + DashboardRmd --> DashboardReport; + SummaryRmd --> SummaryReport; + + end + + ShellOrchestration["fa:fa-terminal Shell Scripts e.g., build_mosaic.sh, build_report.sh"] -->|Triggers| R_Processing_Engine["fa:fa-cogs R Processing Engine"] + + style R_Processing_Engine fill:#f9f,stroke:#333,stroke-width:2px + style Inputs fill:#ccf,stroke:#333,stroke-width:1px + style Outputs fill:#cfc,stroke:#333,stroke-width:1px + style Core_R_Scripts_Processes fill:#ffc,stroke:#333,stroke-width:1px +``` + +### Python API Downloader Detail + +This diagram focuses on the Python API Downloader subsystem, showing its internal components and workflow. It illustrates how API credentials, field boundaries, and other inputs are processed through various Python functions to download, process, and prepare satellite imagery. This view reveals the technical implementation details of the data acquisition layer. + +```mermaid +graph TD + subgraph Python API Downloader + + direction TB + + subgraph Inputs_Py [Inputs] + APICreds["fa:fa-key API Credentials (SH_CLIENT_ID, SH_CLIENT_SECRET)"] + DateRangeParams["fa:fa-calendar-alt Date Range Parameters (days_needed, specific_date)"] + GeoJSONInput["fa:fa-map-marker-alt Field Boundaries (pivot.geojson)"] + ProjectConfig["fa:fa-cogs Project Configuration (project_name, paths)"] + EvalScripts["fa:fa-file-code Evalscripts (JS for cloud masking & band selection)"] + end + + subgraph Core_Python_Logic_Py [Core Python Logic & Libraries] + SetupConfig["fa:fa-cog SentinelHubConfig & BYOC Definition"] + DateSlotGen["fa:fa-calendar-check Date Slot Generation (slots)"] + GeoProcessing["fa:fa-map GeoJSON Parsing & BBox Splitting (geopandas, BBoxSplitter)"] + AvailabilityCheck["fa:fa-search-location Image Availability Check (SentinelHubCatalog)"] + RequestHandler["fa:fa-paper-plane Request Generation (SentinelHubRequest, get_true_color_request_day)"] + DownloadClient["fa:fa-cloud-download-alt Image Download (SentinelHubDownloadClient, download_function)"] + MergeUtility["fa:fa-object-group Tile Merging (gdal.BuildVRT, gdal.Translate, merge_files)"] + CleanupUtility["fa:fa-trash-alt Intermediate File Cleanup (empty_folders)"] + end + + subgraph Outputs_Py [Outputs] + RawSatImages["fa:fa-file-image Raw Downloaded Satellite Imagery Tiles (response.tiff in dated subfolders)"] + MergedTifs["fa:fa-images Merged TIFs (merged_tif/{slot}.tif)"] + VirtualRasters["fa:fa-layer-group Virtual Rasters (merged_virtual/merged{slot}.vrt)"] + DownloadLogs["fa:fa-file-alt Console Output Logs (print statements)"] + end + + ExternalSatAPI["fa:fa-satellite External Satellite Data Providers API (Planet via Sentinel Hub)"] + + %% Data Flow for Python Downloader + APICreds --> SetupConfig; + DateRangeParams --> DateSlotGen; + GeoJSONInput --> GeoProcessing; + ProjectConfig --> SetupConfig; + ProjectConfig --> GeoProcessing; + ProjectConfig --> MergeUtility; + ProjectConfig --> CleanupUtility; + EvalScripts --> RequestHandler; + + DateSlotGen -- Available Slots --> AvailabilityCheck; + GeoProcessing -- BBox List --> AvailabilityCheck; + SetupConfig --> AvailabilityCheck; + AvailabilityCheck -- Filtered Slots & BBoxes --> RequestHandler; + + RequestHandler -- Download Requests --> DownloadClient; + SetupConfig --> DownloadClient; + DownloadClient -- Downloads Data From --> ExternalSatAPI; + ExternalSatAPI -- Returns Image Data --> DownloadClient; + DownloadClient -- Writes --> RawSatImages; + DownloadClient -- Generates --> DownloadLogs; + + RawSatImages --> MergeUtility; + MergeUtility -- Writes --> MergedTifs; + MergeUtility -- Writes --> VirtualRasters; + + end + + ShellOrchestratorPy["fa:fa-terminal Shell Scripts (e.g., runpython.sh triggering planet_download.ipynb)"] -->|Triggers| Python_API_Downloader["fa:fa-download Python API Downloader"]; + + style Python_API_Downloader fill:#ffdd57,stroke:#333,stroke-width:2px + style Inputs_Py fill:#cdeeff,stroke:#333,stroke-width:1px + style Outputs_Py fill:#d4efdf,stroke:#333,stroke-width:1px + style Core_Python_Logic_Py fill:#fff5cc,stroke:#333,stroke-width:1px + style ExternalSatAPI fill:#f5b7b1,stroke:#333,stroke-width:2px +``` + +### SmartCane Engine Integration Diagram + +This diagram illustrates the integration of Python and R components within the SmartCane Engine. Unlike the first diagram that shows the overall system, this one specifically focuses on how the two processing components interact with each other and the rest of the system. It emphasizes the orchestration layer and data flows between the core processing components and external systems. + +```mermaid +graph TD + %% External Systems & Users + Users_DataInput["fa:fa-user Users: Farm Data Input (GeoJSON, Excel, etc.)"] --> Laravel_WebApp; + ExternalSatAPI["fa:fa-satellite External Satellite Data Providers API"]; + + %% Main Application Components + Laravel_WebApp["fa:fa-globe Laravel Web App (Frontend & Control Plane)"]; + Shell_Orchestration["fa:fa-terminal Shell Script Orchestration (e.g., runcane.sh, runpython.sh, build_mosaic.sh)"]; subgraph SmartCane_Engine ["SmartCane Engine (Data Processing Core)"] + direction TB + Python_Downloader["fa:fa-download Python API Downloader"]; + R_Engine["fa:fa-chart-line R Processing Engine"]; + end + %% Data Storage + FileSystem["fa:fa-folder File System (Raw Imagery, Rasters, RDS, Reports, Boundaries)"]; + Database["fa:fa-database Database (Project Metadata, Users, Schedules)"]; + + %% User Outputs + Users_WebView["fa:fa-desktop Users: Web Interface (future)"]; + Users_EmailReports["fa:fa-envelope Users: Email Reports (Agronomic Reports)"]; + AgronomicReports["fa:fa-file-alt Agronomic Reports (DOCX, HTML)"]; + + %% --- Data Flows & Interactions --- + + %% Laravel to Orchestration & Engine + Laravel_WebApp -- Manages/Triggers --> Shell_Orchestration; + Shell_Orchestration -- Executes --> Python_Downloader; + Shell_Orchestration -- Executes --> R_Engine; + + %% Python Downloader within Engine + ExternalSatAPI -- Satellite Data --> Python_Downloader; + Python_Downloader -- Writes Raw Data --> FileSystem; + %% Inputs to Python (simplified for this view - details in Python-specific diagram) + %% Laravel_WebApp -- Provides Config/Boundaries --> Python_Downloader; + + + %% R Engine within Engine + %% Inputs to R (simplified - details in R-specific diagram) + %% Laravel_WebApp -- Provides Config/Boundaries --> R_Engine; + R_Engine -- Reads Processed Data/Imagery --> FileSystem; + R_Engine -- Writes Derived Products --> FileSystem; + R_Engine -- Generates --> AgronomicReports; + + %% Laravel interaction with Data Storage + Laravel_WebApp -- Manages/Accesses --> FileSystem; + Laravel_WebApp -- Reads/Writes --> Database; + + %% Output Delivery + Laravel_WebApp --> Users_WebView; + AgronomicReports --> Users_EmailReports; + %% Assuming a mechanism like SMTP, potentially triggered by Laravel or R-Engine completion + Laravel_WebApp -- Delivers/Displays --> AgronomicReports; + + + %% Styling + style SmartCane_Engine fill:#e6ffe6,stroke:#333,stroke-width:2px + style Python_Downloader fill:#ffdd57,stroke:#333,stroke-width:2px + style R_Engine fill:#f9f,stroke:#333,stroke-width:2px + style Laravel_WebApp fill:#bbf,stroke:#333,stroke-width:2px + style Shell_Orchestration fill:#f0ad4e,stroke:#333,stroke-width:2px + style FileSystem fill:#d1e0e0,stroke:#333,stroke-width:1px + style Database fill:#d1e0e0,stroke:#333,stroke-width:1px + style ExternalSatAPI fill:#f5b7b1,stroke:#333,stroke-width:2px + style AgronomicReports fill:#d4efdf,stroke:#333,stroke-width:1px +``` + +## Future Directions + +The SmartCane platform is poised for significant evolution, with several key enhancements and new capabilities planned to further empower users and expand its utility: + +- **Advanced Management Dashboard**: Development of a more comprehensive and interactive management dashboard to provide users with deeper insights and greater control over their operations. +- **Enhanced Yield Prediction Models**: Improving the accuracy and granularity of yield predictions by incorporating more variables and advanced machine learning techniques. +- **Integrated Weather and Irrigation Advice**: Leveraging weather forecast data and soil moisture information (potentially from new data sources) to provide precise irrigation scheduling and weather-related agronomic advice. +- **AI-Guided Agronomic Advice**: Implementing sophisticated AI algorithms to analyze integrated data (satellite, weather, soil, farm practices) and offer tailored, actionable agronomic recommendations. +- **Automated Advice Generation**: Developing capabilities for the system to automatically generate and disseminate critical advice and alerts to users based on real-time data analysis. +- **Expanded Data Source Integration**: + - **Radar Data**: Incorporating radar satellite imagery (e.g., Sentinel-1) for all-weather monitoring capabilities, particularly useful during cloudy seasons for assessing crop structure, soil moisture, and biomass. + - **IoT and Ground Sensors**: Integrating data from in-field IoT devices and soil sensors for highly localized and continuous monitoring of environmental and soil conditions. +- **Client-Facing Portal**: Exploration and potential development of a client-facing portal to allow end-users direct access to their data, dashboards, and reports, complementing the current internal management interface. + +These future developments aim to transform SmartCane into an even more powerful decision support system, fostering sustainable and efficient agricultural practices. + +## Conclusion and Integration Summary + +The SmartCane system architecture demonstrates a well-integrated solution that combines different technologies and subsystems to solve complex agricultural challenges. Here is a summary of how the key subsystems work together: + +### Subsystem Integration + +1. **Data Flow Sequence** + - The Laravel Web App initiates the workflow and manages user interactions + - Shell scripts orchestrate the execution sequence of the processing subsystems + - The Python API Downloader acquires raw data from external sources + - The R Processing Engine transforms this data into actionable insights + - Results flow back to users through the web interface and email reports + +2. **Technology Integration** + - **Python + R**: Different programming languages are leveraged for their respective strengths—Python for API communication and data acquisition, R for statistical analysis and report generation + - **Laravel + Processing Engine**: Clear separation between web presentation layer and computational backend + - **File System + Database**: Hybrid data storage approach with file system for imagery and reports, database for metadata and user information + +3. **Key Integration Mechanisms** + - **File System Bridge**: The different subsystems primarily communicate through standardized file formats (GeoTIFF, GeoJSON, RDS, DOCX) + - **Shell Script Orchestration**: Acts as the "glue" between subsystems, ensuring proper execution sequence and environment setup + - **Standardized Data Formats**: Use of widely-accepted geospatial and data formats enables interoperability + +4. **Extensibility and Scalability** + - The modular architecture allows for replacement or enhancement of individual components + - The clear subsystem boundaries enable parallel development and testing + - Standard interfaces simplify integration of new data sources, algorithms, or output methods + +The SmartCane architecture balances complexity with maintainability by using well-established technologies and clear boundaries between subsystems. The separation of concerns between data acquisition, processing, and presentation layers ensures that changes in one area minimally impact others, while the consistent data flow pathways ensure that information moves smoothly through the system. diff --git a/r_app/tests/test_date_functions.R b/r_app/tests/test_date_functions.R deleted file mode 100644 index 9b56dcb..0000000 --- a/r_app/tests/test_date_functions.R +++ /dev/null @@ -1,68 +0,0 @@ -# test_date_functions.R -# -# Tests for date-related functions in ci_extraction_utils.R -# - -# Load the test framework -source("tests/test_framework.R") - -# Set up test environment -env <- setup_test_env() - -# Load the functions to test -source("../ci_extraction_utils.R") - -# Test the date_list function -test_that("date_list creates correct date sequences", { - # Test with a specific date and offset - dates <- date_list(as.Date("2023-01-15"), 7) - - # Check the structure - expect_type(dates, "list") - expect_equal(names(dates), c("week", "year", "days_filter", "start_date", "end_date")) - - # Check the values - expect_equal(dates$week, lubridate::week(as.Date("2023-01-09"))) - expect_equal(dates$year, 2023) - expect_equal(dates$start_date, as.Date("2023-01-09")) - expect_equal(dates$end_date, as.Date("2023-01-15")) - expect_equal(length(dates$days_filter), 7) - expect_equal(dates$days_filter[1], "2023-01-09") - expect_equal(dates$days_filter[7], "2023-01-15") - - # Test with a different offset - dates_short <- date_list(as.Date("2023-01-15"), 3) - expect_equal(length(dates_short$days_filter), 3) - expect_equal(dates_short$days_filter, c("2023-01-13", "2023-01-14", "2023-01-15")) - - # Test with string date - dates_string <- date_list("2023-01-15", 5) - expect_equal(dates_string$days_filter, - c("2023-01-11", "2023-01-12", "2023-01-13", "2023-01-14", "2023-01-15")) - - # Test error handling - expect_error(date_list("invalid-date", 7), - "Invalid end_date provided") - expect_error(date_list("2023-01-15", -1), - "Invalid offset provided") -}) - -# Test the date_extract function -test_that("date_extract correctly extracts dates from file paths", { - # Test with various file path formats - expect_equal(date_extract("/some/path/2023-01-15_image.tif"), "2023-01-15") - expect_equal(date_extract("path/to/planet_2023-01-15.tif"), "2023-01-15") - expect_equal(date_extract("c:\\path\\with\\windows\\2023-01-15_file.tif"), "2023-01-15") - expect_equal(date_extract("2023-01-15.tif"), "2023-01-15") - expect_equal(date_extract("prefix-2023-01-15-suffix.tif"), "2023-01-15") - - # Test with invalid file paths - expect_warning(result <- date_extract("no-date-here.tif"), "Could not extract date") - expect_true(is.na(result)) -}) - -# Clean up -teardown_test_env() - -# Print success message -cat("Date function tests completed successfully\n") \ No newline at end of file diff --git a/r_app/tests/test_framework.R b/r_app/tests/test_framework.R deleted file mode 100644 index e41d2dc..0000000 --- a/r_app/tests/test_framework.R +++ /dev/null @@ -1,120 +0,0 @@ -# test_framework.R -# -# TEST FRAMEWORK FOR SMARTCANE -# =========================== -# This script provides a simple testing framework for the SmartCane project. -# It includes utilities for setting up test environments and running tests. -# - -# Install required packages if not available -if (!require("testthat", quietly = TRUE)) { - install.packages("testthat", repos = "https://cran.rstudio.com/") -} -library(testthat) - -# Define paths for testing -test_root <- file.path(normalizePath(".."), "tests") -test_data_dir <- file.path(test_root, "test_data") - -# Create test directories if they don't exist -dir.create(test_data_dir, recursive = TRUE, showWarnings = FALSE) - -# Set up a test environment with all necessary data -setup_test_env <- function() { - # Add working directory to the path - .libPaths(c(.libPaths(), normalizePath(".."))) - - # Source required files with minimal dependencies - tryCatch({ - source(file.path(normalizePath(".."), "packages.R")) - skip_package_loading <- TRUE - - # Load minimal dependencies for tests - required_packages <- c("lubridate", "stringr", "purrr", "dplyr", "testthat") - for (pkg in required_packages) { - if (!require(pkg, character.only = TRUE, quietly = TRUE)) { - warning(paste("Package", pkg, "not available, some tests may fail")) - } - } - }, error = function(e) { - warning("Error loading dependencies: ", e$message) - }) - - # Set up test logging - assign("log_message", function(message, level = "INFO") { - cat(paste0("[", level, "] ", message, "\n")) - }, envir = .GlobalEnv) - - # Create a mock project structure - test_project <- list( - project_dir = "test_project", - data_dir = test_data_dir, - daily_CI_vals_dir = file.path(test_data_dir, "extracted_ci", "daily_vals"), - cumulative_CI_vals_dir = file.path(test_data_dir, "extracted_ci", "cumulative_vals"), - merged_final = file.path(test_data_dir, "merged_final"), - daily_vrt = file.path(test_data_dir, "daily_vrt") - ) - - # Create the directories - for (dir in test_project) { - if (is.character(dir)) { - dir.create(dir, recursive = TRUE, showWarnings = FALSE) - } - } - - return(test_project) -} - -# Clean up test environment -teardown_test_env <- function() { - # Clean up only test-created files if needed - # We'll leave the main directories for inspection -} - -# Run all tests in a directory -run_tests <- function(pattern = "^test_.+\\.R$") { - test_files <- list.files( - path = test_root, - pattern = pattern, - full.names = TRUE - ) - - # Exclude this file - test_files <- test_files[!grepl("test_framework\\.R$", test_files)] - - if (length(test_files) == 0) { - cat("No test files found matching pattern:", pattern, "\n") - return(FALSE) - } - - cat("Found", length(test_files), "test files:\n") - cat(paste(" -", basename(test_files)), sep = "\n") - cat("\n") - - # Run each test file - results <- lapply(test_files, function(file) { - cat("Running tests in:", basename(file), "\n") - tryCatch({ - source(file, local = TRUE) - cat("✓ Tests completed\n\n") - TRUE - }, error = function(e) { - cat("✗ Error:", e$message, "\n\n") - FALSE - }) - }) - - # Summary - success_count <- sum(unlist(results)) - cat("\nTest Summary:", success_count, "of", length(test_files), - "test files completed successfully\n") - - return(all(unlist(results))) -} - -# If this script is run directly, run all tests -if (!interactive() && (basename(sys.frame(1)$ofile) == "test_framework.R")) { - setup_test_env() - run_tests() - teardown_test_env() -} \ No newline at end of file diff --git a/r_app/tests/test_report_utils.R b/r_app/tests/test_report_utils.R deleted file mode 100644 index 611f7db..0000000 --- a/r_app/tests/test_report_utils.R +++ /dev/null @@ -1,280 +0,0 @@ -# test_report_utils.R -# -# Tests for visualization functions in report_utils.R -# - -# Load the test framework -source("tests/test_framework.R") - -# Set up test environment -env <- setup_test_env() - -# Required libraries for testing -library(testthat) -library(terra) -library(sf) -library(dplyr) -library(ggplot2) - -# Load the functions to test -source("../report_utils.R") - -# Create mock data for testing -create_mock_data <- function() { - # Create a simple raster for testing - r <- terra::rast(nrows=10, ncols=10, xmin=0, xmax=10, ymin=0, ymax=10, vals=1:100) - names(r) <- "CI" - - # Create a simple field boundary - field_boundaries <- sf::st_sf( - field = c("Field1", "Field2"), - sub_field = c("A", "B"), - geometry = sf::st_sfc( - sf::st_polygon(list(rbind(c(1,1), c(5,1), c(5,5), c(1,5), c(1,1)))), - sf::st_polygon(list(rbind(c(6,6), c(9,6), c(9,9), c(6,9), c(6,6)))) - ), - crs = sf::st_crs(r) - ) - - # Create mock harvest data - harvesting_data <- data.frame( - field = c("Field1", "Field2"), - sub_field = c("A", "B"), - age = c(100, 150), - season_start = as.Date(c("2023-01-01", "2023-02-01")), - year = c(2023, 2023) - ) - - # Create mock CI quadrant data - ci_quadrant <- data.frame( - field = rep(c("Field1", "Field2"), each=10), - sub_field = rep(c("A", "B"), each=10), - Date = rep(seq(as.Date("2023-01-01"), by="week", length.out=10), 2), - DOY = rep(1:10, 2), - cumulative_CI = rep(cumsum(1:10), 2), - value = rep(1:10, 2), - season = rep(2023, 20), - model = rep(c("northwest", "northeast", "southwest", "southeast"), 5) - ) - - return(list( - raster = r, - field_boundaries = field_boundaries, - harvesting_data = harvesting_data, - ci_quadrant = ci_quadrant - )) -} - -# Test the create_CI_map function -test_that("create_CI_map creates a valid tmap object", { - mock_data <- create_mock_data() - - # Test with all required parameters - map <- create_CI_map( - pivot_raster = mock_data$raster, - pivot_shape = mock_data$field_boundaries[1,], - pivot_spans = mock_data$field_boundaries[1,], - week = "01", - age = 10, - borders = TRUE, - use_breaks = TRUE - ) - - # Check if it returned a tmap object - expect_true("tmap" %in% class(map)) - - # Test with missing parameters - expect_error(create_CI_map(pivot_shape = mock_data$field_boundaries[1,], - pivot_spans = mock_data$field_boundaries[1,], - week = "01", age = 10), - "pivot_raster is required") - - expect_error(create_CI_map(pivot_raster = mock_data$raster, - pivot_spans = mock_data$field_boundaries[1,], - week = "01", age = 10), - "pivot_shape is required") -}) - -# Test the create_CI_diff_map function -test_that("create_CI_diff_map creates a valid tmap object", { - mock_data <- create_mock_data() - - # Test with all required parameters - map <- create_CI_diff_map( - pivot_raster = mock_data$raster, - pivot_shape = mock_data$field_boundaries[1,], - pivot_spans = mock_data$field_boundaries[1,], - week_1 = "01", - week_2 = "02", - age = 10, - borders = TRUE, - use_breaks = TRUE - ) - - # Check if it returned a tmap object - expect_true("tmap" %in% class(map)) - - # Test with missing parameters - expect_error(create_CI_diff_map(pivot_shape = mock_data$field_boundaries[1,], - pivot_spans = mock_data$field_boundaries[1,], - week_1 = "01", week_2 = "02", age = 10), - "pivot_raster is required") - - expect_error(create_CI_diff_map(pivot_raster = mock_data$raster, - pivot_spans = mock_data$field_boundaries[1,], - week_1 = "01", age = 10), - "week_1 and week_2 parameters are required") -}) - -# Test the ci_plot function -test_that("ci_plot handles input parameters correctly", { - mock_data <- create_mock_data() - - # Capture output to avoid cluttering the test output - temp_file <- tempfile() - sink(temp_file) - - # Test with all required parameters - should not throw an error - expect_error( - ci_plot( - pivotName = "Field1", - field_boundaries = mock_data$field_boundaries, - current_ci = mock_data$raster, - ci_minus_1 = mock_data$raster, - ci_minus_2 = mock_data$raster, - last_week_diff = mock_data$raster, - three_week_diff = mock_data$raster, - harvesting_data = mock_data$harvesting_data, - week = "01", - week_minus_1 = "52", - week_minus_2 = "51", - week_minus_3 = "50", - use_breaks = TRUE, - borders = TRUE - ), - NA # Expect no error - ) - - # Test with missing parameters - expect_error( - ci_plot(), - "pivotName is required" - ) - - # Test with invalid field name - expect_error( - ci_plot( - pivotName = "NonExistentField", - field_boundaries = mock_data$field_boundaries, - current_ci = mock_data$raster, - ci_minus_1 = mock_data$raster, - ci_minus_2 = mock_data$raster, - last_week_diff = mock_data$raster, - three_week_diff = mock_data$raster, - harvesting_data = mock_data$harvesting_data - ), - regexp = NULL # We expect some error related to the field not being found - ) - - # Reset output - sink() - unlink(temp_file) -}) - -# Test the cum_ci_plot function -test_that("cum_ci_plot handles input parameters correctly", { - mock_data <- create_mock_data() - - # Capture output to avoid cluttering the test output - temp_file <- tempfile() - sink(temp_file) - - # Test with all required parameters - should not throw an error - expect_error( - cum_ci_plot( - pivotName = "Field1", - ci_quadrant_data = mock_data$ci_quadrant, - plot_type = "value", - facet_on = FALSE, - x_unit = "days" - ), - NA # Expect no error - ) - - # Test with different plot types - expect_error( - cum_ci_plot( - pivotName = "Field1", - ci_quadrant_data = mock_data$ci_quadrant, - plot_type = "CI_rate" - ), - NA # Expect no error - ) - - expect_error( - cum_ci_plot( - pivotName = "Field1", - ci_quadrant_data = mock_data$ci_quadrant, - plot_type = "cumulative_CI" - ), - NA # Expect no error - ) - - # Test with invalid plot type - expect_error( - cum_ci_plot( - pivotName = "Field1", - ci_quadrant_data = mock_data$ci_quadrant, - plot_type = "invalid_type" - ), - "plot_type must be one of: 'value', 'CI_rate', or 'cumulative_CI'" - ) - - # Test with missing parameters - expect_error( - cum_ci_plot(), - "pivotName is required" - ) - - # Reset output - sink() - unlink(temp_file) -}) - -# Test the get_week_path function -test_that("get_week_path returns correct path", { - # Test with valid inputs - path <- get_week_path( - mosaic_path = "ci_max_mosaics", - input_date = "2023-01-15", - week_offset = 0 - ) - - # Extract the week number and year from the path - expect_match(path, "week_02_2023\\.tif$", all = FALSE) # Week 2 of 2023 - - # Test with offset - path_minus_1 <- get_week_path( - mosaic_path = "ci_max_mosaics", - input_date = "2023-01-15", - week_offset = -1 - ) - expect_match(path_minus_1, "week_01_2023\\.tif$", all = FALSE) - - # Test with missing parameters - expect_error( - get_week_path(input_date = "2023-01-15", week_offset = 0), - "mosaic_path is required" - ) - - expect_error( - get_week_path(mosaic_path = "ci_max_mosaics", week_offset = 0), - "input_date is required" - ) -}) - -# Clean up -teardown_test_env() - -# Print success message -cat("Report utility function tests completed successfully\n") \ No newline at end of file

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