")
+})
+# 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 f5445d7..0000000
Binary files a/Current - Pivots planting date and harevsting data.xlsx and /dev/null differ
diff --git a/Rplots.pdf b/Rplots.pdf
deleted file mode 100644
index a68f07a..0000000
Binary files a/Rplots.pdf and /dev/null differ
diff --git a/figure/sub_chunk_8433-1.png b/figure/sub_chunk_8433-1.png
new file mode 100644
index 0000000..160a733
Binary files /dev/null and b/figure/sub_chunk_8433-1.png differ
diff --git a/python_app/planet_download.ipynb b/python_app/planet_download.ipynb
index 4d1c4f0..ed5606f 100644
--- a/python_app/planet_download.ipynb
+++ b/python_app/planet_download.ipynb
@@ -12,370 +12,10 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"id": "b7ca7102-5fd9-481f-90cd-3ba60e288649",
"metadata": {},
- "outputs": [
- {
- "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 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 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("
")
})
```
\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.
")
+})
+```
+
+\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("
")
+ })
+}
+```
+
+`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("