Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Croping a stars object takes 16.89 hours while terra takes 0.16 seconds #694

Open
alexyshr opened this issue Jul 4, 2024 · 3 comments
Open

Comments

@alexyshr
Copy link

alexyshr commented Jul 4, 2024

Croping a stars object takes 16.89 hours while terra takes 0.16 seconds. I just installed sf and stars from GitHub.

library(stars)
#> Loading required package: abind
#> Loading required package: sf
#> Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.3.1; sf_use_s2() is TRUE
library(terra)
#> terra 1.7.78
library(sf)
myurl = "http://geocorp.co/wind/MWP_2017242_090W040N_3D3OT.tif"
the_40n_file = "./MWP_2017242_090W040N_3D3OT.tif"
download.file(myurl, the_40n_file, mode = "wb")

myurl = "http://geocorp.co/wind/MWP_2017242_090W030N_3D3OT.tif"
the_30n_file = "./MWP_2017242_090W030N_3D3OT.tif"
download.file(myurl, the_30n_file, mode = "wb")

myurl = "http://geocorp.co/wind/counties_florida.zip"
download.file(myurl, "counties_florida.zip", mode = "wb")
unzip("counties_florida.zip")
the_florida_file = "./counties_florida.shp"
#read the shapefile
sf_florida <- sf::st_read(the_florida_file, quiet = TRUE)
#transform st_florida to 4326
sf_florida <- sf::st_transform(sf_florida, 4326)

#read th files with stars
st_30n <- stars::read_stars(the_30n_file, quiet = TRUE, proxy = FALSE)
st_40n <- stars::read_stars(the_40n_file, quiet = TRUE, proxy = FALSE)

#convert the files to terra
r_30n <- terra::rast(the_30n_file)
r_40n <- terra::rast(the_40n_file)

#mosaic the files the files with stars
system.time({
  st_mosaic <- stars::st_mosaic(st_30n, st_40n)
})
#>    user  system elapsed 
#>    2.46    0.68    3.73
#plot st_mosaic
plot(st_mosaic)
#> downsample set to 10

#mosaic the files the files with terra
system.time({
  r_mosaic <- terra::mosaic(r_30n, r_40n)
})
#>    user  system elapsed 
#>    1.57    1.39    5.19
#crop the files with stars
#it is taking 16.89 hours
#system.time({
#  st_crop <- sf::st_crop(st_mosaic, sf_florida)
#})
#system.time({
#  st_crop <- st_mosaic[sf_florida, as_points = T]
#})
#    user   system  elapsed 
#21499.75 39246.67 60792.59 
#

#crop the files with terra
system.time({
  r_crop <- terra::crop(r_mosaic, sf_florida)
})
#>    user  system elapsed 
#>    0.11    0.05    0.16
plot(r_crop)

Created on 2024-07-04 with reprex v2.1.0

Session info
sessionInfo()
#> R version 4.4.1 (2024-06-14 ucrt)
#> Platform: x86_64-w64-mingw32/x64
#> Running under: Windows 10 x64 (build 19045)
#> 
#> Matrix products: default
#> 
#> 
#> locale:
#> [1] LC_COLLATE=English_United States.utf8 
#> [2] LC_CTYPE=English_United States.utf8   
#> [3] LC_MONETARY=English_United States.utf8
#> [4] LC_NUMERIC=C                          
#> [5] LC_TIME=English_United States.utf8    
#> 
#> time zone: America/New_York
#> tzcode source: internal
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#> [1] terra_1.7-78 stars_0.6-6  sf_1.0-17    abind_1.4-5 
#> 
#> loaded via a namespace (and not attached):
#>  [1] vctrs_0.6.5        cli_3.6.3          knitr_1.47         rlang_1.1.4       
#>  [5] xfun_0.45          highr_0.11         KernSmooth_2.23-24 DBI_1.2.3         
#>  [9] purrr_1.0.2        styler_1.10.3      glue_1.7.0         htmltools_0.5.8.1 
#> [13] e1071_1.7-14       rmarkdown_2.27     grid_4.4.1         R.cache_0.16.0    
#> [17] evaluate_0.24.0    classInt_0.4-10    fastmap_1.2.0      yaml_2.3.8        
#> [21] lifecycle_1.0.4    compiler_4.4.1     codetools_0.2-20   fs_1.6.4          
#> [25] Rcpp_1.0.12        R.oo_1.26.0        R.utils_2.12.3     digest_0.6.36     
#> [29] class_7.3-22       reprex_2.1.0       curl_5.2.1         parallel_4.4.1    
#> [33] magrittr_2.0.3     R.methodsS3_1.8.2  tools_4.4.1        withr_3.0.0       
#> [37] proxy_0.4-27       xml2_1.3.6         units_0.8-5
@kadyb
Copy link
Contributor

kadyb commented Jul 5, 2024

Did you try cutting to the bounding box? Then it should work fast. See also this issue.

st_crop <- st_crop(st_mosaic, st_bbox(sf_florida))
@alexyshr
Copy link
Author

alexyshr commented Jul 5, 2024

Yes! It is taking 0.12 secs (faster than 0.17 with terra)

Thank you!

@alexyshr
Copy link
Author

alexyshr commented Jul 5, 2024

In my initial code, I was comparing two different types of crops. So the time comparison was not valid. If we compare the crop to the bounding box, stars is 1.41 times faster.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
2 participants