2727# '
2828# ' @export
2929# '
30- # '
3130dynamic_per_pixel <- function (
3231 ncImage , t_date , years , water_scenes_only = TRUE , days_around_ma = 20 ,
3332 maxPixels = 1000 , threshold = NULL , lakeInfo = c(" " , " " ), maxDataPoints = 5000000
@@ -42,22 +41,31 @@ dynamic_per_pixel <- function(
4241
4342 indexImages <- ncImage $ RSindex [yearFilter ]
4443 imageDOY <- imageDOY [yearFilter ]
45- d <- dim(indexImages [[1 ]])
46-
47- sclImage <- ncImage $ SCL [yearFilter ]
44+ sclImages <- ncImage $ SCL [yearFilter ]
4845
49- cat( " Image data is filtered pixel by pixel ... \n " )
46+ d <- dim( indexImages [[ 1 ]] )
5047
51- if (water_scenes_only ){
52- indexImages <- lapply(seq_along(indexImages ), function (i ){
53- indexImages [[i ]][sclImage [[i ]] != 6 ] <- NA
54- indexImages [[i ]]
55- })
56- } else {
57- indexImages <- lapply(seq_along(indexImages ), function (i ){
58- indexImages [[i ]][sclImage [[i ]] %in% c(8 : 11 )] <- NA
59- indexImages [[i ]]
60- })
48+ # rm(ncImage)
49+ # gc()
50+ # if(object.size(ncImage)/1E+09 > 10){
51+ #
52+ # }
53+
54+ cat(" Image data is filtered for SCL categories pixel by pixel ... \n " )
55+
56+ for (i in seq_along(indexImages )){
57+ indexImages [[i ]] <- if (water_scenes_only ){
58+ scl_filter(
59+ indexImage = indexImages [[i ]],
60+ sclImage = sclImages [[i ]],
61+ bands = 6 ,
62+ invert = TRUE )
63+ } else {
64+ scl_filter(
65+ indexImage = indexImages [[i ]],
66+ sclImage = sclImages [[i ]],
67+ bands = c(8 : 11 ))
68+ }
6169 }
6270
6371 t_doy <- imageDOY [order(imageDOY )]
@@ -81,6 +89,19 @@ dynamic_per_pixel <- function(
8189
8290 valid_values <- apply(ts , 1 , function (p_ts ){sum(! is.na(p_ts ))})
8391 pixel_selection <- valid_values > threshold
92+
93+ if (sum(pixel_selection ) == 0 ){
94+ return (
95+ list (" moving_averages" = NULL ,
96+ " raster_location" = data.frame (
97+ " pixel" = NA ,
98+ " i_col" = 0 ,
99+ " i_row" = 0 ,
100+ " valid_values" = 0 )
101+ )
102+ )
103+ }
104+
84105 pixel_selection_i <- which(pixel_selection )
85106 nAvailable <- length(pixel_selection_i )
86107 if (nAvailable > maxPixels ){
@@ -119,7 +140,7 @@ dynamic_per_pixel <- function(
119140 t_doy = t_doy ,
120141 days_around_ma = days_around_ma
121142 )
122-
143+
123144 cat(paste0(" Processing " , nm + 1 , " matrices ... \n " ))
124145 df_out <- lapply(ts_start , function (ts ){
125146 cat(" | matrix done" )
@@ -156,7 +177,6 @@ dynamic_per_pixel <- function(
156177 )
157178}
158179
159-
160180# ' Subset of all images to be used for moving averages for each day
161181# '
162182# ' @param t_doy Numeric vector of the day of the year according to ts_pixel
@@ -166,7 +186,7 @@ dynamic_per_pixel <- function(
166186# '
167187images_per_ma <- function (t_doy , days_around_ma ){
168188 lapply(1 : 365 , function (doy ){
169- d_range <- doy + c(- 20 , 20 )
189+ d_range <- doy + c(- days_around_ma , days_around_ma )
170190 d_range [d_range < 1 ] <- d_range [d_range < 1 ] + 365
171191 d_range [d_range > 365 ] <- d_range [d_range > 365 ] - 365
172192
@@ -178,31 +198,18 @@ images_per_ma <- function(t_doy, days_around_ma){
178198 })
179199}
180200
181- # ' Moving average for a sorted pixel vector with according day of the year time
182- # ' vector
201+ # ' Set values NA by SCL
183202# '
184- # ' @param ts_pixel Data for one pixel of multiple images (ts)
185- # ' @param t_doy Numeric vector of the day of the year according to ts_pixel
186- # ' (same length and order)
187- # ' @param days_around_ma The days around the moving average day (i.e. 10 means
188- # ' 10 days before and ten days after the actual day are used for averaging)
203+ # ' @param indexImage,sclImage Index and SCL layer of the image
204+ # ' @param bands Numeric vector specifiyng the SCL categories to filtered for
205+ # ' @param invert If TRUE the filtering is inverted -> specefied bands are removed
189206# '
190- # '
191- # moving_average <- function(ts_pixel, t_doy, days_around_ma){
192- # df_out <- data.frame("doy" = 1:365)
193- #
194- # df_out$ma <- sapply(df_out$doy, function(doy){
195- # d_range <- doy + c(-days_around_ma, days_around_ma)
196- # d_range[d_range < 1] <- d_range[d_range < 1] + 365
197- # d_range[d_range > 365] <- d_range[d_range > 365] - 365
198- #
199- # days_for_ma <- if(d_range[2] > d_range[1]){
200- # t_doy > d_range[1] & t_doy < d_range[2]
201- # } else {
202- # t_doy > d_range[1] | t_doy < d_range[2]
203- # }
204- # mean(ts_pixel[days_for_ma], na.rm = TRUE)
205- # })
206- # df_out
207- # }
208-
207+ scl_filter <- function (indexImage , sclImage , bands , invert = FALSE ){
208+ if (invert ){
209+ indexImage [! (sclImage %in% bands )] <- NA
210+ } else {
211+ indexImage [! (sclImage %in% bands )] <- NA
212+ }
213+ indexImage
214+ }
215+ >>>>>>> c91d979d3f068e2d74c8eac59c874cbb27f57666
0 commit comments