SmartCane/r_app/experiments/interactive_sar_visualization/test_sar_analysis.R
2025-09-05 15:23:41 +02:00

107 lines
4.1 KiB
R

# SAR Analysis Test Script
# ========================
#
# Quick test to verify SAR analysis functions work with downloaded data
# Run this to check everything is working before generating full report
# Set working directory and load functions
# setwd("r_app") # Don't change directory, we're already in main folder
source("r_app/sar_analysis_functions.R")
source("r_app/sar_visualization.R")
# Load field boundaries
library(sf)
field_boundaries <- st_read("../../../pivot.geojson", quiet = TRUE)
cat("=== SAR Analysis Test ===\n")
cat("Fields loaded:", nrow(field_boundaries), "\n")
# Test 1: Load SAR data
cat("\n1. Testing SAR data loading...\n")
test_week <- 33
vv_data <- load_sar_mosaic(test_week, band = "VV_dB_filtered", data_dir = "python_scripts/data/aura/weekly_SAR_mosaic")
vh_data <- load_sar_mosaic(test_week, band = "VH_dB_filtered", data_dir = "python_scripts/data/aura/weekly_SAR_mosaic")
if (!is.null(vv_data) && !is.null(vh_data)) {
cat("✓ SAR data loaded successfully\n")
cat(" VV dimensions:", dim(vv_data), "\n")
cat(" VH dimensions:", dim(vh_data), "\n")
cat(" VV range:", round(global(vv_data, range, na.rm = TRUE)[,1], 2), "dB\n")
cat(" VH range:", round(global(vh_data, range, na.rm = TRUE)[,1], 2), "dB\n")
} else {
cat("✗ Failed to load SAR data\n")
stop("SAR data loading failed")
}
# Test 2: Calculate SAR metrics
cat("\n2. Testing SAR metrics calculation...\n")
vv_linear <- load_sar_mosaic(test_week, band = "VV", data_dir = "python_scripts/data/aura/weekly_SAR_mosaic")
vh_linear <- load_sar_mosaic(test_week, band = "VH", data_dir = "python_scripts/data/aura/weekly_SAR_mosaic")
if (!is.null(vv_linear) && !is.null(vh_linear)) {
rvi <- calculate_rvi(vv_linear, vh_linear)
cross_ratio <- calculate_cross_pol_ratio(vv_data, vh_data)
cat("✓ SAR metrics calculated\n")
cat(" RVI range:", round(global(rvi, range, na.rm = TRUE)[,1], 3), "\n")
cat(" Cross-pol ratio range:", round(global(cross_ratio, range, na.rm = TRUE)[,1], 2), "dB\n")
} else {
cat("⚠ Linear scale data not available for metrics\n")
}
# Test 3: Create basic map
cat("\n3. Testing SAR visualization...\n")
tmap_mode("plot")
# Create simple map
sar_map <- create_sar_map(vv_data, field_boundaries, "Test SAR Map", "VV_dB")
# Save map
tmap_save(sar_map, "output/test_sar_map.png", width = 1200, height = 800, dpi = 150)
cat("✓ SAR map created and saved to output/test_sar_map.png\n")
# Test 4: Field-level analysis
cat("\n4. Testing field-level analysis...\n")
test_field <- field_boundaries$Name[1]
field_trends <- analyze_sar_field_trends(test_field, field_boundaries,
week_range = 26:33, band = "VV_dB_filtered")
if (!is.null(field_trends)) {
cat("✓ Field analysis completed for:", test_field, "\n")
cat(" Trend direction:", field_trends$trend_direction, "\n")
cat(" Trend slope:", round(field_trends$trend_slope, 4), "dB/week\n")
cat(" R-squared:", round(field_trends$trend_r2, 3), "\n")
} else {
cat("✗ Field analysis failed\n")
}
# Test 5: Time series loading
cat("\n5. Testing time series loading...\n")
sar_stack <- load_sar_timeseries(26:33, "VV_dB_filtered")
if (!is.null(sar_stack)) {
cat("✓ Time series loaded successfully\n")
cat(" Number of weeks:", nlyr(sar_stack), "\n")
cat(" Stack dimensions:", dim(sar_stack), "\n")
} else {
cat("✗ Time series loading failed\n")
}
# Test 6: Create time series plot
cat("\n6. Testing time series plotting...\n")
sample_fields <- head(field_boundaries$Name, 3)
ts_plot <- plot_sar_timeseries(sample_fields, field_boundaries,
week_range = 26:33, band = "VV_dB_filtered",
facet_fields = TRUE)
# Save plot
ggsave("output/test_sar_timeseries.png", ts_plot, width = 12, height = 8, dpi = 150)
cat("✓ Time series plot created and saved to output/test_sar_timeseries.png\n")
cat("\n=== All Tests Completed Successfully! ===\n")
cat("\nReady to generate full SAR analysis report:\n")
cat("rmarkdown::render('r_app/SAR_exploration_report.Rmd')\n")
# Don't reset working directory - we're staying in main folder