## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", warning = FALSE, message = FALSE, fig.width = 8, fig.height = 6 ) ## ----setup-------------------------------------------------------------------- library(geospatialsuite) library(terra) library(sf) # Check package functionality test_package_minimal(verbose = TRUE) ## ----quick-map-examples, eval=FALSE------------------------------------------- # # Create sample data for demonstration # sample_points <- data.frame( # lon = c(-83.1, -83.2, -83.3, -82.9, -82.8), # lat = c(40.1, 40.2, 40.3, 40.0, 40.4), # ndvi = c(0.7, 0.8, 0.6, 0.75, 0.85), # yield = c(150, 180, 120, 160, 200) # ) # # # One-line mapping with auto-detection # quick_map(sample_points) # # # Quick map with specific variable # quick_map(sample_points, variable = "ndvi", title = "NDVI Distribution") # # # Quick map with raster data (if available) # # quick_map("path/to/raster.tif") ## ----point-mapping, eval=FALSE------------------------------------------------ # # Convert sample data to sf object # sample_sf <- sf::st_as_sf(sample_points, # coords = c("lon", "lat"), # crs = 4326) # # # Basic point map # basic_map <- create_spatial_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # map_type = "points", # title = "Sample NDVI Points", # verbose = TRUE # ) # # print(basic_map) ## ----color-schemes, eval=FALSE------------------------------------------------ # # NDVI-specific colors # ndvi_map <- create_spatial_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # color_scheme = "ndvi", # title = "NDVI with Specialized Colors" # ) # # # Terrain colors for elevation data # # terrain_map <- create_spatial_map( # # spatial_data = elevation_data, # # color_scheme = "terrain", # # title = "Elevation Map" # # ) # # # Plasma colors for general data # plasma_map <- create_spatial_map( # spatial_data = sample_sf, # fill_variable = "yield", # color_scheme = "plasma", # title = "Yield with Plasma Colors" # ) # # print(plasma_map) ## ----raster-mapping, eval=FALSE----------------------------------------------- # # Create sample raster for demonstration # sample_raster <- terra::rast(nrows = 50, ncols = 50, # xmin = -84, xmax = -82, # ymin = 39, ymax = 41) # terra::values(sample_raster) <- runif(2500, 0.2, 0.9) # names(sample_raster) <- "NDVI" # # # Fast raster plot # plot_raster_fast( # raster_data = sample_raster, # title = "Sample NDVI Raster", # color_scheme = "ndvi" # ) # # # With custom breaks # plot_raster_fast( # raster_data = sample_raster, # title = "NDVI with Custom Classes", # color_scheme = "ndvi", # breaks = c(0, 0.3, 0.5, 0.7, 1.0) # ) ## ----rgb-composites, eval=FALSE----------------------------------------------- # # Create sample multi-band raster # red_band <- terra::rast(nrows = 30, ncols = 30, # xmin = -84, xmax = -82, # ymin = 39, ymax = 41) # terra::values(red_band) <- runif(900, 0.1, 0.3) # # green_band <- red_band # terra::values(green_band) <- runif(900, 0.2, 0.4) # # blue_band <- red_band # terra::values(blue_band) <- runif(900, 0.05, 0.15) # # # Stack bands # rgb_stack <- c(red_band, green_band, blue_band) # names(rgb_stack) <- c("Red", "Green", "Blue") # # # RGB composite plot # plot_rgb_raster( # raster_data = rgb_stack, # r = 1, g = 2, b = 3, # stretch = "lin", # title = "RGB Composite" # ) # # # False color composite # plot_rgb_raster( # raster_data = rgb_stack, # r = 2, g = 1, b = 3, # Green-Red-Blue # stretch = "hist", # title = "False Color Composite" # ) ## ----interactive-maps, eval=FALSE--------------------------------------------- # # Interactive point map (requires leaflet package) # if (requireNamespace("leaflet", quietly = TRUE)) { # interactive_map <- create_interactive_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # basemap = "terrain", # title = "Interactive NDVI Map" # ) # # # Save interactive map # # htmlwidgets::saveWidget(interactive_map, "interactive_ndvi.html") # } # # # Interactive mapping with custom basemap # if (requireNamespace("leaflet", quietly = TRUE)) { # satellite_map <- create_interactive_map( # spatial_data = sample_sf, # fill_variable = "yield", # basemap = "satellite", # title = "Yield on Satellite Imagery" # ) # } ## ----regional-boundaries, eval=FALSE------------------------------------------ # # Simulate Ohio boundary for demonstration # ohio_boundary <- sf::st_polygon(list(matrix(c( # -84.5, 38.5, -80.5, 38.5, -80.5, 42.0, -84.5, 42.0, -84.5, 38.5 # ), ncol = 2, byrow = TRUE))) # ohio_sf <- sf::st_sf(geometry = sf::st_sfc(ohio_boundary, crs = 4326)) # # # Map with region boundary # map_with_boundary <- create_spatial_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # region_boundary = ohio_sf, # Would normally use "Ohio" # title = "NDVI in Ohio", # color_scheme = "ndvi" # ) # # print(map_with_boundary) # # # The package supports many boundary types: # # create_spatial_map(data, region_boundary = "Ohio") # US State # # create_spatial_map(data, region_boundary = "CONUS") # Continental US # # create_spatial_map(data, region_boundary = "Ohio:Franklin") # State:County # # create_spatial_map(data, region_boundary = c(-84, 39, -82, 41)) # Bounding box ## ----comparison-maps, eval=FALSE---------------------------------------------- # # Create "before" and "after" rasters # before_raster <- terra::rast(nrows = 30, ncols = 30, # xmin = -84, xmax = -82, # ymin = 39, ymax = 41) # terra::values(before_raster) <- runif(900, 0.3, 0.7) # names(before_raster) <- "NDVI_Before" # # after_raster <- before_raster # terra::values(after_raster) <- terra::values(before_raster) + runif(900, -0.1, 0.2) # names(after_raster) <- "NDVI_After" # # # Side-by-side comparison # create_comparison_map( # data1 = before_raster, # data2 = after_raster, # comparison_type = "side_by_side", # titles = c("Before Treatment", "After Treatment"), # color_scheme = "ndvi" # ) # # # Difference map # create_comparison_map( # data1 = before_raster, # data2 = after_raster, # comparison_type = "difference", # titles = c("Before", "After"), # color_scheme = "RdBu" # ) ## ----custom-colors, eval=FALSE------------------------------------------------ # # Get available color schemes # color_schemes <- c("viridis", "plasma", "ndvi", "terrain", "water", "categorical") # # # Apply different schemes to the same data # for (scheme in color_schemes[1:3]) { # map <- create_spatial_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # color_scheme = scheme, # title = paste("NDVI with", scheme, "colors"), # point_size = 4 # ) # # print(paste("Created map with", scheme, "color scheme")) # } ## ----map-styling, eval=FALSE-------------------------------------------------- # # Customize point appearance # styled_map <- create_spatial_map( # spatial_data = sample_sf, # fill_variable = "yield", # map_type = "points", # point_size = 6, # color_scheme = "plasma", # title = "Customized Point Map" # ) # # print(styled_map) # # # Map with transparent points # # (Demonstrated conceptually - actual implementation may vary) ## ----publication-maps, eval=FALSE--------------------------------------------- # # Create high-resolution map for publication # publication_map <- create_spatial_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # color_scheme = "ndvi", # title = "NDVI Distribution in Study Area", # output_file = "publication_ndvi_map.png" # ) # # # Customize for journal specifications # journal_map <- create_spatial_map( # spatial_data = sample_sf, # fill_variable = "yield", # color_scheme = "viridis", # title = "", # No title for journal figure # output_file = "figure_1.png" # ) ## ----map-layout, eval=FALSE--------------------------------------------------- # # The package automatically handles legends and layouts # # Maps include appropriate legends, scale bars, and formatting # # # For complex layouts, combine with other packages: # # library(patchwork) # For multi-panel figures # # library(ggplot2) # For additional customization ## ----error-handling, eval=FALSE----------------------------------------------- # # Test data validation # tryCatch({ # # This should work # valid_map <- create_spatial_map(sample_sf, fill_variable = "ndvi") # print("Valid map created successfully") # }, error = function(e) { # print(paste("Error:", e$message)) # }) # # # Handle missing data # sample_with_na <- sample_sf # sample_with_na$ndvi[1:2] <- NA # # na_map <- create_spatial_map( # spatial_data = sample_with_na, # fill_variable = "ndvi", # title = "Data with Missing Values" # ) # # print("Map with NA values handled automatically") ## ----diagnostics, eval=FALSE-------------------------------------------------- # # Quick diagnostic check # diagnostic_result <- quick_diagnostic() # # # Test specific mapping functions # mapping_test <- tryCatch({ # test_map <- create_spatial_map(sample_sf, fill_variable = "ndvi") # "Mapping functions working" # }, error = function(e) { # paste("Mapping error:", e$message) # }) # # print(mapping_test) ## ----data-prep, eval=FALSE---------------------------------------------------- # # Always check your data first # print("Sample data structure:") # print(head(sample_sf)) # # # Verify coordinate reference system # print(paste("CRS:", sf::st_crs(sample_sf)$input)) # # # Check for valid geometries # valid_geoms <- sf::st_is_valid(sample_sf) # print(paste("Valid geometries:", all(valid_geoms))) ## ----progressive-enhancement, eval=FALSE-------------------------------------- # # Start simple, then add complexity # simple_map <- quick_map(sample_sf) # # # Add customization progressively # enhanced_map <- create_spatial_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # color_scheme = "ndvi", # title = "Enhanced NDVI Map", # point_size = 5 # ) # # # Add interactivity if needed # # interactive_version <- create_interactive_map(sample_sf, fill_variable = "ndvi") ## ----performance, eval=FALSE-------------------------------------------------- # # For large datasets, consider: # # 1. Simplifying geometries # # 2. Reducing point density # # 3. Using raster instead of vector for very dense data # # # Example: Check data size # print(paste("Number of features:", nrow(sample_sf))) # print(paste("Number of variables:", ncol(sample_sf) - 1)) # Minus geometry # # # For large rasters, use terra's efficient plotting # if (exists("sample_raster")) { # print(paste("Raster dimensions:", paste(dim(sample_raster), collapse = " x "))) # } ## ----ggplot-integration, eval=FALSE------------------------------------------- # # GeoSpatialSuite maps work well with ggplot2 # library(ggplot2) # # # Extract ggplot object for further customization # base_map <- create_spatial_map(sample_sf, fill_variable = "ndvi") # # # Customize with ggplot2 (if the map is a ggplot object) # if (inherits(base_map, "ggplot")) { # enhanced_ggplot <- base_map + # theme_minimal() + # labs(caption = "Data source: Field measurements") + # theme( # plot.title = element_text(size = 16, face = "bold"), # legend.position = "bottom" # ) # } ## ----leaflet-integration, eval=FALSE------------------------------------------ # # For interactive web maps # if (requireNamespace("leaflet", quietly = TRUE)) { # web_map <- create_interactive_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # popup_vars = c("ndvi", "yield"), # basemap = "terrain" # ) # # # Further customize with leaflet functions # enhanced_web_map <- web_map %>% # leaflet::addMiniMap() %>% # leaflet::addScaleBar() # } ## ----ndvi-mapping, eval=FALSE------------------------------------------------- # # Create sample NDVI raster # ndvi_raster <- terra::rast(nrows = 40, ncols = 40, # xmin = -84, xmax = -82, # ymin = 39, ymax = 41) # terra::values(ndvi_raster) <- runif(1600, 0.1, 0.9) # names(ndvi_raster) <- "NDVI" # # # Specialized NDVI visualization # ndvi_map <- create_ndvi_map( # ndvi_data = ndvi_raster, # title = "NDVI Analysis", # ndvi_classes = "none" # Use continuous colors # ) # # print("NDVI map created with specialized colors") ## ----water-mapping, eval=FALSE------------------------------------------------ # # Create sample water quality data # water_points <- data.frame( # lon = c(-83.0, -83.1, -83.2, -82.9, -82.8), # lat = c(40.0, 40.1, 40.2, 39.9, 40.3), # dissolved_oxygen = c(8.2, 7.5, 6.8, 8.9, 7.1), # temperature = c(18.5, 19.2, 20.1, 17.8, 19.5) # ) # # water_sf <- sf::st_as_sf(water_points, # coords = c("lon", "lat"), # crs = 4326) # # # Water quality visualization # water_map <- create_water_quality_plot( # water_data = water_sf, # variable = "dissolved_oxygen", # title = "Dissolved Oxygen Levels" # ) ## ----static-export, eval=FALSE------------------------------------------------ # # High-resolution PNG export # create_spatial_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # color_scheme = "ndvi", # title = "NDVI Distribution", # output_file = "high_res_ndvi.png" # ) # # # PDF export for vector graphics # create_spatial_map( # spatial_data = sample_sf, # fill_variable = "yield", # color_scheme = "viridis", # title = "Yield Distribution", # output_file = "yield_map.pdf" # ) ## ----interactive-export, eval=FALSE------------------------------------------- # # Export interactive map as HTML # if (requireNamespace("leaflet", quietly = TRUE)) { # interactive_map <- create_interactive_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # title = "Interactive NDVI Map" # ) # # # Save as HTML file # if (requireNamespace("htmlwidgets", quietly = TRUE)) { # htmlwidgets::saveWidget( # interactive_map, # "interactive_ndvi_map.html", # selfcontained = TRUE # ) # } # } ## ----multi-layer, eval=FALSE-------------------------------------------------- # # Create comparison visualization # create_comparison_map( # data1 = sample_raster, # data2 = sample_raster * 1.2, # Simulated change # comparison_type = "side_by_side", # titles = c("Year 1", "Year 2"), # color_scheme = "ndvi" # ) ## ----auto-detection, eval=FALSE----------------------------------------------- # # The package automatically detects appropriate mapping approaches # # # Point data -> scatter plot with colors # point_auto <- create_spatial_map( # spatial_data = sample_sf, # fill_variable = "ndvi", # map_type = "auto" # Auto-detects as points # ) # # # Raster data -> raster plot # raster_auto <- create_spatial_map( # spatial_data = sample_raster, # map_type = "auto" # Auto-detects as raster # ) # # print("Auto-detection completed successfully") ## ----performance-tips, eval=FALSE--------------------------------------------- # # 1. Use terra plotting for speed # plot_raster_fast(sample_raster, title = "Fast Plotting") # # # 2. Simplify data when appropriate # # simplified_sf <- sf::st_simplify(complex_sf, dTolerance = 100) # # # 3. Use appropriate map types # # For very dense points, consider raster interpolation # # For large rasters, consider aggregation # # # 4. Monitor memory usage # print(paste("Sample data memory usage:", # format(object.size(sample_sf), units = "KB"))) ## ----memory-management, eval=FALSE-------------------------------------------- # # Clean up large objects when done # # rm(large_raster) # # gc() # Garbage collection # # # Use temporary files for intermediate results # temp_file <- tempfile(fileext = ".tif") # print(paste("Temporary file:", temp_file)) # # # For very large analyses, process in chunks # # chunk_size <- 1000 # Adjust based on available memory ## ----crs-troubleshooting, eval=FALSE------------------------------------------ # # Check CRS compatibility # sample_utm <- sf::st_transform(sample_sf, crs = 3857) # Web Mercator # # # The package handles CRS automatically in most cases # mixed_crs_map <- create_spatial_map( # spatial_data = sample_utm, # UTM coordinates # fill_variable = "ndvi", # title = "Map with Different CRS" # ) # # print("CRS handling completed automatically") ## ----format-troubleshooting, eval=FALSE--------------------------------------- # # Test with different data formats # formats_test <- list( # sf_object = sample_sf, # data_frame = sample_points, # raster_object = sample_raster # ) # # for (format_name in names(formats_test)) { # tryCatch({ # test_map <- quick_map(formats_test[[format_name]]) # print(paste(format_name, "format: OK")) # }, error = function(e) { # print(paste(format_name, "format error:", e$message)) # }) # }