编辑代码




#一,DAY------------------------------------------------------------------------

##1,re_tif-----------------------------------------------------------------

rm(list=ls())

time_start<-Sys.time()

in_path<-"G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N02_testing_image_2022a/D1_combi_results_dele"
f_arr<-list.dirs(in_path,full.names = F,recursive = F)

out_path<-"G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N02_testing_image_2022a/D3_combi_results_tif"
out_path_arr_sub<-c(out_path)
for (i in seq_along(out_path_arr_sub)) {
  for (j in seq_along(f_arr)) {
    out_path_sub_j<-paste0(out_path_arr_sub[i],'/',f_arr[j])
    
    if(! dir.exists(out_path_sub_j)){
      dir.create(out_path_sub_j)
    } else {
      unlink(out_path_sub_j,recursive = T)
      dir.create(out_path_sub_j)
    }
    
  }
}

group_arr<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N01_all_data_2020_2021a/D1_band_combi_info/simu_group_arr_list.rds")
group_arr_TE_in<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N01_all_data_2020_2021a/D1_band_combi_info/group_arr_TE_in_list.rds")
group_arr_TE_out<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N01_all_data_2020_2021a/D1_band_combi_info/group_arr_TE_out_list.rds")

library(raster)
AHI_refer_path<-"G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N02_testing_image_2022a/C1_all_land/20220101UTC2000"
AHI_refer_arr<-list.files(pattern = "*.tif$",AHI_refer_path)
AHI_refer_arr<-AHI_refer_arr[grepl("t2m",AHI_refer_arr)]
AHI_refer<-raster(paste0(AHI_refer_path,'/',AHI_refer_arr[1]))

#f_arr
re_results_matrix_to_geotif_function_wh<-function(i){
  combi_i<-f_arr[i]
  
  f_i_path<-paste0(in_path,'/',combi_i)
  f_i_arr<-list.files(f_i_path,pattern = '*.txt$')
  
  f_i_arr_out<-group_arr_TE_out[[combi_i]]
  
  for (j in seq_along(f_i_arr)){
    f_j<-read.table(paste0(f_i_path,'/',f_i_arr[j]),header = T)
    
    for (k in seq_along(f_i_arr_out)) {
      ori_name<-f_i_arr_out[k]
      re_name<-paste0('re_',ori_name)
      
      f_j_re<-f_j[,re_name]
      f_j_re_matrix<-matrix(f_j_re,nrow=AHI_refer@nrows) #byrow=TRUE
      
      # crs <- "+proj=longlat +datum=WGS84 +no_defs"
      
      library(raster)
      f_j_re_raster<-raster(f_j_re_matrix,
                            xmn=AHI_refer@extent@xmin,
                            xmx=AHI_refer@extent@xmax,
                            ymn=AHI_refer@extent@ymin,
                            ymx=AHI_refer@extent@ymax,
                            crs=crs(AHI_refer))
      
      # f_j_re_raster<-(era5_land_0_1 == 1)*f_j_re_raster+(era5_land_0_1 != 1)*(-999)
      
      writeRaster(f_j_re_raster,
                  paste0(out_path,'/',combi_i,'/',gsub('_pre_dele.txt','',f_i_arr[j]),'_',re_name,'.tif'),
                  format = 'GTiff',
                  overwrite = TRUE)
      
    } #end-for(k)
    
  } #end-for(j)
  
} #end-fun


library(parallel)
library(doParallel)
library(foreach)
library(iterators)

detectCores()
cl<-makeCluster(8)
registerDoParallel(cl)
test<-foreach(j=seq_along(f_arr),.combine='c') %dopar% re_results_matrix_to_geotif_function_wh(j)
stopCluster(cl)
stopImplicitCluster()

exc_time<-difftime(Sys.time(),time_start,units='mins')
print(paste0('execution time: ',round(exc_time,2),' mins'))
print('============================Alright')


























#2,mapping---------------------------------------------------------------------

rm(list=ls())

time_start<-Sys.time()

in_path<-'G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N02_testing_image_2022a/D3_combi_results_tif'
in_path_ref<-'G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N02_testing_image_2022a/C1_all_land'
in_path_clip_ref<-'G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N02_testing_image_2022a/C1_all_land'
time_selec<-read.table('G:/20240506_Science/N02_Proces/N04_testing_image_time_selec/2022a_testing_image_time_selec_DAY_01v_effec.txt',
                       header = T)
time_selec<-as.character(time_selec[,1])

group_arr<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N01_all_data_2020_2021a/D1_band_combi_info/simu_group_arr_list.rds")
group_arr_TE_in<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N01_all_data_2020_2021a/D1_band_combi_info/group_arr_TE_in_list.rds")
group_arr_TE_out<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N01_all_data_2020_2021a/D1_band_combi_info/group_arr_TE_out_list.rds")


f_arr_combi<-list.dirs(in_path,recursive = FALSE,full.names = FALSE)
f_arr_combi_symbol<-sub("^(C.*?)_.+", "\\1", f_arr_combi)

out_path_map<-'G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N01_DAY/N02_testing_image_2022a/E1_combi_results_mapping'
out_path_arr<-c(out_path_map)
for (i in seq_along(out_path_arr)) {
  for (j in seq_along(f_arr_combi)) {
    out_path_sub<-paste0(out_path_arr[i],'/',f_arr_combi[j])
    
    if(! dir.exists(out_path_sub)){
      dir.create(out_path_sub)
    } else {
      unlink(out_path_sub,recursive = T)
      dir.create(out_path_sub)
    }
    
  }
}



#f_arr_combi
cross_vali_mapping_fun<-function (i) {
  ori_vari_name<-group_arr_TE_out[[f_arr_combi[i]]]
  re_vari_name<-paste0('re_',ori_vari_name)
  
  for (m in seq_along(ori_vari_name)) {
    ori_vari_name_m<-ori_vari_name[m]
    re_vari_name_m<-re_vari_name[m]
    
    f_i_arr<-list.files(paste0(in_path,'/',f_arr_combi[i]),pattern = paste0('(',re_vari_name_m,')','.*tif$'))
    f_i_arr_ref<-list.files(in_path_ref,pattern = paste0('(',ori_vari_name_m,')','.*tif$'),recursive = T)
    f_i_arr_clip_ref<-list.files(in_path_clip_ref,pattern = paste0('(',ori_vari_name_m,')','.*tif$'),recursive = T)
    f_i_arr_ref_time<-substr(f_i_arr_ref,1,15)
    f_i_arr_clip_ref_time<-substr(f_i_arr_clip_ref,1,15)
    f_i_arr_ref<-f_i_arr_ref[f_i_arr_ref_time %in% time_selec]
    f_i_arr_clip_ref<-f_i_arr_clip_ref[f_i_arr_clip_ref_time %in% time_selec]
    
    f_i_arr_ref_name<-basename(f_i_arr_ref)
    f_i_arr_clip_ref_name<-basename(f_i_arr_clip_ref)
    
    f_i_arr_group_name<-c('re_MODIS Day','MODIS Day')
    
    library(stringr)
    f_i_arr_time<-str_extract_all(f_i_arr_ref_name, "\\d{8}UTC\\d{4}")
    f_i_arr_time<-unlist(f_i_arr_time)
    
    for (j in seq_along(f_i_arr)) {
      library(raster)
      f_j<-raster(paste0(in_path,'/',f_arr_combi[i],'/',f_i_arr[j]))
      f_j_ref<-raster(paste0(in_path_ref,'/',f_i_arr_time[j],'/',f_i_arr_ref_name[j]))
      f_j_clip_ref<-raster(paste0(in_path_clip_ref,'/',f_i_arr_time[j],'/',f_i_arr_clip_ref_name[j]))
      
      f_j<-crop(f_j,f_j_clip_ref,snap = "near")
      f_j_ref<-crop(f_j_ref,f_j_clip_ref,snap = "near")
      
      f_j[f_j == -999]<-NA
      f_j_ref[f_j_ref == -999]<-NA
      
      f_j_df <- as(f_j, "SpatialPixelsDataFrame")
      f_j_df <- as.data.frame(f_j_df)
      colnames(f_j_df) <- c("value", "x", "y")
      
      f_j_ref_df<-as(f_j_ref, "SpatialPixelsDataFrame")
      f_j_ref_df <- as.data.frame(f_j_ref_df)
      colnames(f_j_ref_df) <- c("value", "x", "y")
      
      min_value<-min(f_j_ref_df$value,f_j_df$value)
      max_value<-max(f_j_ref_df$value,f_j_df$value)
      # qujian_value<-round((max_value-min_value)/11)
      qujian_value<-(max_value-min_value)/11
      
      data_arr<-list()
      data_arr$re_x<-f_j_df
      data_arr$x<-f_j_ref_df
      names(data_arr)<-c(re_vari_name_m,ori_vari_name_m)
      data_arr_name<-names(data_arr)
      data_arr_name_map<-c(re_vari_name_m,ori_vari_name_m)
      
      if (grepl('LSE',re_vari_name_m)==TRUE) {
        for (k in seq_along(data_arr_name)) {
          data_k<-data_arr[[data_arr_name[k]]]
          
          library(tidyverse)
          library(dplyr)
          data_k2<-data_k %>% mutate(value2=case_when(
            value < round(min_value+qujian_value*1,3) ~ "K",
            value >= round(min_value+qujian_value*1,3) & value < round(min_value+qujian_value*2,3) ~ "J",
            value >= round(min_value+qujian_value*2,3) & value < round(min_value+qujian_value*3,3) ~ "I",
            value >= round(min_value+qujian_value*3,3) & value < round(min_value+qujian_value*4,3) ~ "H",
            value >= round(min_value+qujian_value*4,3) & value < round(min_value+qujian_value*5,3) ~ "G",
            value >= round(min_value+qujian_value*5,3) & value < round(min_value+qujian_value*6,3) ~ "F",
            value >= round(min_value+qujian_value*6,3) & value < round(min_value+qujian_value*7,3) ~ "E",
            value >= round(min_value+qujian_value*7,3) & value < round(min_value+qujian_value*8,3) ~ "D",
            value >= round(min_value+qujian_value*8,3) & value < round(min_value+qujian_value*9,3) ~ "C",
            value >= round(min_value+qujian_value*9,3) & value < round(min_value+qujian_value*10,3) ~ "B",
            value >= round(min_value+qujian_value*10,3) ~ "A"))
          cclass <- c(paste0('[',sprintf("%.3f",min_value+qujian_value*0),',',sprintf("%.3f",min_value+qujian_value*1),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*1),',',sprintf("%.3f",min_value+qujian_value*2),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*2),',',sprintf("%.3f",min_value+qujian_value*3),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*3),',',sprintf("%.3f",min_value+qujian_value*4),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*4),',',sprintf("%.3f",min_value+qujian_value*5),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*5),',',sprintf("%.3f",min_value+qujian_value*6),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*6),',',sprintf("%.3f",min_value+qujian_value*7),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*7),',',sprintf("%.3f",min_value+qujian_value*8),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*8),',',sprintf("%.3f",min_value+qujian_value*9),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*9),',',sprintf("%.3f",min_value+qujian_value*10),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*10),',',sprintf("%.3f",min_value+qujian_value*11),')'))
          
          classcolor <- c("#4541DE",
                          "#4160F7",
                          "#3381F5",
                          "#1E9FE3",
                          "#0BB6CB",
                          "#2DC4A3",
                          "#6BCA6C",
                          "#B2C33E",
                          "#E7C32B",
                          "#ffb242",
                          "#F19425")
          
          llabel<-c("K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A")
          mapping_df<-data.frame(cclass,classcolor,llabel)
          table<-data.frame(table(data_k2$value2))
          
          mapping_df<-mapping_df[which(mapping_df$llabel %in% table$Var1),]
          data_k3<-data_k2[,-1]
          colnames(data_k3)[3]<-"value"
          
          library(ggpointdensity)
          library(tidyverse)
          library(ggplot2)
          library(extrafont)
          library(ggpubr)
          library(ggpmisc)
          library(ggsci)
          library(raster)
          library(viridis)
          library(ggthemes)
          library(sf)
          library(showtext) 
          showtext_auto()
          font_add("simsun", "C:/Windows/Fonts/simsun.ttc")
          font_add("simsunb", "C:/Users/wangh/AppData/Local/Microsoft/Windows/Fonts/simsunb.ttf")
          font_add("timesbd", "C:/Windows/Fonts/timesbd.ttf")
          font_families()
          par(family = "timesbd") 
          
          library(Cairo)
          Cairo::CairoJPEG(
            filename = paste0(out_path_map,'/',f_arr_combi[i],'/',f_arr_combi[i],'_',f_i_arr_time[j],'_',data_arr_name[k],".jpg"),
            width = 1980*1.2,
            height = 1320*1.1,
            family="timesbd")
          
          library(sf)
          area<-read_sf("D:/N03_CAAS/N01_shp/ocean/ocean/ocean.shp")
          A <- ggplot()+
            geom_tile(data = data_k3,
                      aes(x = x, y = y, fill=factor(value)))+
            scale_fill_manual(name=data_arr_name_map[k],
                              values=rev(mapping_df$classcolor),
                              labels=rev(mapping_df$cclass))+
            theme_test(base_size=80,
                       base_family="timesbd",
                       base_line_size=8)+
            # theme(axis.ticks.x=element_blank(),
            #       axis.ticks.y=element_blank(),
            #       axis.text.x=element_blank(),
            #       axis.text.y=element_blank())+
            theme(axis.text.x = element_text(color = "black"),
                  axis.text.y = element_text(color = "black"),
                  axis.ticks.length = unit(2,"cm"),
                  axis.ticks = element_line(color = "black"),
                  plot.margin = margin(t=1,r=1,b=1,l=1, unit = "cm"))+
            theme(plot.title = element_text(hjust = 0.5),
                  legend.box.margin = margin(t=1,r=1,b=1,l=-0.5,unit = 'cm'),
                  legend.position="right",
                  legend.background = element_blank(),
                  legend.spacing.y = unit(1,'cm'),
                  legend.spacing.x = unit(1,'cm'),
                  legend.key.width = unit(2.3, "cm"),
                  legend.key.height = unit(3.6, "cm"),
                  legend.text = element_text(margin = margin(t=0,r=0,b=0,l=1.5,'cm'),size = 58),
                  legend.title = element_text(size = 60))+
            # labs(title = month_trans[f_arr_combi[i]])+
            theme(axis.title.x = element_blank(),
                  axis.title.y = element_blank(),
                  plot.title = element_text(hjust = 0))+
            scale_x_continuous(breaks = c(floor(f_j@extent@xmin),
                                          ceiling(mean(c(f_j@extent@xmin,f_j@extent@xmax))),
                                          ceiling(f_j@extent@xmax)),
                               limits = c(floor(f_j@extent@xmin),ceiling(f_j@extent@xmax)))+
            scale_y_continuous(breaks = c(floor(f_j@extent@ymin),
                                          ceiling(mean(c(f_j@extent@ymin,f_j@extent@ymax))),
                                          ceiling(f_j@extent@ymax)),
                               limits = c(floor(f_j@extent@ymin),ceiling(f_j@extent@ymax)))+
            # theme(legend.position='none')+
            geom_sf(data=area,
                    fill='white',
                    linewidth=2)+
            annotate("text_npc",
                     npcx = 0.05,
                     npcy = 0.95,
                     size = 42,
                     hjust=0, 
                     family='timesbd',
                     label = f_i_arr_group_name[k])
          
          print(A)
          
          dev.off()
        } #end-for(k)
        

        classcolor <- c("#4541DE",
                        "#4160F7",
                        "#3381F5",
                        "#1E9FE3",
                        "#0BB6CB",
                        "#2DC4A3",
                        "#6BCA6C",
                        "#B2C33E",
                        "#E7C32B",
                        "#ffb242",
                        "#F19425")
        
        legend_data<-data.frame(
          value = c(round(min_value+qujian_value*0,3),
                    round(min_value+qujian_value*1,3),
                    round(min_value+qujian_value*2,3),
                    round(min_value+qujian_value*3,3),
                    round(min_value+qujian_value*4,3),
                    round(min_value+qujian_value*5,3),
                    round(min_value+qujian_value*6,3),
                    round(min_value+qujian_value*7,3),
                    round(min_value+qujian_value*8,3),
                    round(min_value+qujian_value*9,3),
                    round(min_value+qujian_value*10,3)),
          x = 1:11,
          y = 1:11,
          cclass <- c(paste0('[',sprintf("%.3f",min_value+qujian_value*0),',',sprintf("%.3f",min_value+qujian_value*1),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*1),',',sprintf("%.3f",min_value+qujian_value*2),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*2),',',sprintf("%.3f",min_value+qujian_value*3),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*3),',',sprintf("%.3f",min_value+qujian_value*4),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*4),',',sprintf("%.3f",min_value+qujian_value*5),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*5),',',sprintf("%.3f",min_value+qujian_value*6),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*6),',',sprintf("%.3f",min_value+qujian_value*7),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*7),',',sprintf("%.3f",min_value+qujian_value*8),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*8),',',sprintf("%.3f",min_value+qujian_value*9),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*9),',',sprintf("%.3f",min_value+qujian_value*10),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*10),',',sprintf("%.3f",min_value+qujian_value*11),')')),
          classcolor = classcolor,
          llabel = c("K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A"))
        
        
        library(Cairo)
        Cairo::CairoJPEG(
          filename = paste0(out_path_map,'/',f_arr_combi[i],'/',f_arr_combi[i],'_',f_i_arr_time[j],'_',data_arr_name[2],'_','legend',".jpg"),
          width = 1980*1.2,
          height = 1320*1.1,
          family="timesbd")
        
        B <- ggplot()+
          geom_tile(data = legend_data,
                    aes(x = x, y = y, fill=factor(value)))+
          scale_fill_manual(name=data_arr_name[2],
                            values=rev(legend_data$classcolor),
                            labels=rev(legend_data$cclass))+
          theme_test(base_size=80,
                     base_family="timesbd",
                     base_line_size=8)+
          # theme(axis.ticks.x=element_blank(),
          #       axis.ticks.y=element_blank(),
          #       axis.text.x=element_blank(),
          #       axis.text.y=element_blank())+
          theme(axis.text.x = element_text(color = "black"),
                axis.text.y = element_text(color = "black"),
                axis.ticks.length = unit(2,"cm"),
                axis.ticks = element_line(color = "black"),
                plot.margin = margin(t=1,r=1,b=1,l=1, unit = "cm"))+
          theme(plot.title = element_text(hjust = 0.5),
                legend.box.margin = margin(t=1,r=1,b=1,l=-0.5,unit = 'cm'),
                legend.position="right",
                legend.background = element_blank(),
                legend.spacing.y = unit(1,'cm'),
                legend.spacing.x = unit(1,'cm'),
                legend.key.width = unit(2.3, "cm"),
                legend.key.height = unit(3.6, "cm"),
                legend.text = element_text(margin = margin(t=0,r=0,b=0,l=1.5,'cm'),size = 58),
                legend.title = element_text(size = 60))+
          # labs(title = month_trans[f_arr_combi[i]])+
          # xlim(min(legend_data$x)-1,max(legend_data$x)+1)+
          # ylim(min(legend_data$y)-1,max(legend_data$y)+1)+
          scale_x_continuous(breaks = 1:11)+  
          scale_y_continuous(breaks = 1:11)+    
          theme(axis.title.x = element_blank(),
                axis.title.y = element_blank(),
                plot.title = element_text(hjust = 0))
        
        print(B)
        
        dev.off()
        
      } else { #LST
        
        for (k in seq_along(data_arr_name)) {
          data_k<-data_arr[[data_arr_name[k]]]
          
          library(tidyverse)
          library(dplyr)
          data_k2<-data_k %>% mutate(value2=case_when(
            value < round(min_value+qujian_value*1) ~ "K",
            value >= round(min_value+qujian_value*1) & value < round(min_value+qujian_value*2) ~ "J",
            value >= round(min_value+qujian_value*2) & value < round(min_value+qujian_value*3) ~ "I",
            value >= round(min_value+qujian_value*3) & value < round(min_value+qujian_value*4) ~ "H",
            value >= round(min_value+qujian_value*4) & value < round(min_value+qujian_value*5) ~ "G",
            value >= round(min_value+qujian_value*5) & value < round(min_value+qujian_value*6) ~ "F",
            value >= round(min_value+qujian_value*6) & value < round(min_value+qujian_value*7) ~ "E",
            value >= round(min_value+qujian_value*7) & value < round(min_value+qujian_value*8) ~ "D",
            value >= round(min_value+qujian_value*8) & value < round(min_value+qujian_value*9) ~ "C",
            value >= round(min_value+qujian_value*9) & value < round(min_value+qujian_value*10) ~ "B",
            value >= round(min_value+qujian_value*10) ~ "A"))
          cclass <- c(paste0('[',round(min_value+qujian_value*0),',',round(min_value+qujian_value*1),')'),
                      paste0('[',round(min_value+qujian_value*1),',',round(min_value+qujian_value*2),')'),
                      paste0('[',round(min_value+qujian_value*2),',',round(min_value+qujian_value*3),')'),
                      paste0('[',round(min_value+qujian_value*3),',',round(min_value+qujian_value*4),')'),
                      paste0('[',round(min_value+qujian_value*4),',',round(min_value+qujian_value*5),')'),
                      paste0('[',round(min_value+qujian_value*5),',',round(min_value+qujian_value*6),')'),
                      paste0('[',round(min_value+qujian_value*6),',',round(min_value+qujian_value*7),')'),
                      paste0('[',round(min_value+qujian_value*7),',',round(min_value+qujian_value*8),')'),
                      paste0('[',round(min_value+qujian_value*8),',',round(min_value+qujian_value*9),')'),
                      paste0('[',round(min_value+qujian_value*9),',',round(min_value+qujian_value*10),')'),
                      paste0('[',round(min_value+qujian_value*10),',',round(min_value+qujian_value*11),')'))
          
          Johnson<-MetBrewer::met.brewer("Johnson")
          Johnson<-rev(colorspace::lighten(Johnson)) 
          length(Johnson)
          Johnson[1]
          mycol<-colorRampPalette(Johnson,bias=1)(n=11)
          classcolor <- mycol
          
          llabel<-c("K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A")
          mapping_df<-data.frame(cclass,classcolor,llabel)
          table<-data.frame(table(data_k2$value2))
          
          mapping_df<-mapping_df[which(mapping_df$llabel %in% table$Var1),]
          data_k3<-data_k2[,-1]
          colnames(data_k3)[3]<-"value"
          
          library(ggpointdensity)
          library(tidyverse)
          library(ggplot2)
          library(extrafont)
          library(ggpubr)
          library(ggpmisc)
          library(ggsci)
          library(raster)
          library(viridis)
          library(ggthemes)
          library(sf)
          library(showtext) 
          showtext_auto()
          font_add("simsun", "C:/Windows/Fonts/simsun.ttc")
          font_add("simsunb", "C:/Users/wangh/AppData/Local/Microsoft/Windows/Fonts/simsunb.ttf")
          font_add("timesbd", "C:/Windows/Fonts/timesbd.ttf")
          font_families()
          par(family = "timesbd")  
          
          library(Cairo)
          Cairo::CairoJPEG(
            filename = paste0(out_path_map,'/',f_arr_combi[i],'/',f_arr_combi[i],'_',f_i_arr_time[j],'_',data_arr_name[k],".jpg"),
            width = 1980*1.2,
            height = 1320*1.1,
            family="timesbd")
          
          library(sf)
          area<-read_sf("D:/N03_CAAS/N01_shp/ocean/ocean/ocean.shp")
          A <- ggplot()+
            geom_tile(data = data_k3,
                      aes(x = x, y = y, fill=factor(value)))+
            scale_fill_manual(name=data_arr_name_map[k],
                              values=rev(mapping_df$classcolor),
                              labels=rev(mapping_df$cclass))+
            theme_test(base_size=80,
                       base_family="timesbd",
                       base_line_size=8)+
            # theme(axis.ticks.x=element_blank(),
            #       axis.ticks.y=element_blank(),
            #       axis.text.x=element_blank(),
            #       axis.text.y=element_blank())+
            theme(axis.text.x = element_text(color = "black"),
                  axis.text.y = element_text(color = "black"),
                  axis.ticks.length = unit(2,"cm"),
                  axis.ticks = element_line(color = "black"),
                  plot.margin = margin(t=1,r=1,b=1,l=1, unit = "cm"))+
            theme(plot.title = element_text(hjust = 0.5),
                  legend.box.margin = margin(t=1,r=1,b=1,l=-0.5,unit = 'cm'),
                  legend.position="right",
                  legend.background = element_blank(),
                  legend.spacing.y = unit(1,'cm'),
                  legend.spacing.x = unit(1,'cm'),
                  legend.key.width = unit(2.3, "cm"),
                  legend.key.height = unit(3.6, "cm"),
                  legend.text = element_text(margin = margin(t=0,r=0,b=0,l=1.5,'cm'),size = 58),
                  legend.title = element_text(size = 60))+
            # labs(title = month_trans[f_arr_combi[i]])+
            theme(axis.title.x = element_blank(),
                  axis.title.y = element_blank(),
                  plot.title = element_text(hjust = 0))+
            scale_x_continuous(breaks = c(floor(f_j@extent@xmin),
                                          ceiling(mean(c(f_j@extent@xmin,f_j@extent@xmax))),
                                          ceiling(f_j@extent@xmax)),
                               limits = c(floor(f_j@extent@xmin),ceiling(f_j@extent@xmax)))+
            scale_y_continuous(breaks = c(floor(f_j@extent@ymin),
                                          ceiling(mean(c(f_j@extent@ymin,f_j@extent@ymax))),
                                          ceiling(f_j@extent@ymax)),
                               limits = c(floor(f_j@extent@ymin),ceiling(f_j@extent@ymax)))+
            # theme(legend.position='none')+
            geom_sf(data=area,
                    fill='white',
                    linewidth=2)+
            annotate("text_npc",
                     npcx = 0.05,
                     npcy = 0.95,
                     size = 42,
                     hjust=0, 
                     family='timesbd',
                     label = f_i_arr_group_name[k])
          
          print(A)
          
          dev.off()
        } #end-for(k)
        
        Johnson<-MetBrewer::met.brewer("Johnson")
        Johnson<-rev(colorspace::lighten(Johnson)) 
        length(Johnson)
        Johnson[1]
        mycol<-colorRampPalette(Johnson,bias=1)(n=11)
        classcolor <- mycol
        
        legend_data<-data.frame(
          value = c(round(min_value+qujian_value*0),
                    round(min_value+qujian_value*1),
                    round(min_value+qujian_value*2),
                    round(min_value+qujian_value*3),
                    round(min_value+qujian_value*4),
                    round(min_value+qujian_value*5),
                    round(min_value+qujian_value*6),
                    round(min_value+qujian_value*7),
                    round(min_value+qujian_value*8),
                    round(min_value+qujian_value*9),
                    round(min_value+qujian_value*10)),
          x = 1:11,
          y = 1:11,
          cclass <- c(paste0('[',round(min_value+qujian_value*0),',',round(min_value+qujian_value*1),')'),
                      paste0('[',round(min_value+qujian_value*1),',',round(min_value+qujian_value*2),')'),
                      paste0('[',round(min_value+qujian_value*2),',',round(min_value+qujian_value*3),')'),
                      paste0('[',round(min_value+qujian_value*3),',',round(min_value+qujian_value*4),')'),
                      paste0('[',round(min_value+qujian_value*4),',',round(min_value+qujian_value*5),')'),
                      paste0('[',round(min_value+qujian_value*5),',',round(min_value+qujian_value*6),')'),
                      paste0('[',round(min_value+qujian_value*6),',',round(min_value+qujian_value*7),')'),
                      paste0('[',round(min_value+qujian_value*7),',',round(min_value+qujian_value*8),')'),
                      paste0('[',round(min_value+qujian_value*8),',',round(min_value+qujian_value*9),')'),
                      paste0('[',round(min_value+qujian_value*9),',',round(min_value+qujian_value*10),')'),
                      paste0('[',round(min_value+qujian_value*10),',',round(min_value+qujian_value*11),')')),
          classcolor = classcolor,
          llabel = c("K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A"))
        
        
        library(Cairo)
        Cairo::CairoJPEG(
          filename = paste0(out_path_map,'/',f_arr_combi[i],'/',f_arr_combi[i],'_',f_i_arr_time[j],'_',data_arr_name[2],'_','legend',".jpg"),
          width = 1980*1.2,
          height = 1320*1.1,
          family="timesbd")
        
        B <- ggplot()+
          geom_tile(data = legend_data,
                    aes(x = x, y = y, fill=factor(value)))+
          scale_fill_manual(name=data_arr_name[2],
                            values=rev(legend_data$classcolor),
                            labels=rev(legend_data$cclass))+
          theme_test(base_size=80,
                     base_family="timesbd",
                     base_line_size=8)+
          # theme(axis.ticks.x=element_blank(),
          #       axis.ticks.y=element_blank(),
          #       axis.text.x=element_blank(),
          #       axis.text.y=element_blank())+
          theme(axis.text.x = element_text(color = "black"),
                axis.text.y = element_text(color = "black"),
                axis.ticks.length = unit(2,"cm"),
                axis.ticks = element_line(color = "black"),
                plot.margin = margin(t=1,r=1,b=1,l=1, unit = "cm"))+
          theme(plot.title = element_text(hjust = 0.5),
                legend.box.margin = margin(t=1,r=1,b=1,l=-0.5,unit = 'cm'),
                legend.position="right",
                legend.background = element_blank(),
                legend.spacing.y = unit(1,'cm'),
                legend.spacing.x = unit(1,'cm'),
                legend.key.width = unit(2.3, "cm"),
                legend.key.height = unit(3.6, "cm"),
                legend.text = element_text(margin = margin(t=0,r=0,b=0,l=1.5,'cm'),size = 58),
                legend.title = element_text(size = 60))+
          # labs(title = month_trans[f_arr_combi[i]])+
          # xlim(min(legend_data$x)-1,max(legend_data$x)+1)+
          # ylim(min(legend_data$y)-1,max(legend_data$y)+1)+
          scale_x_continuous(breaks = 1:11)+  
          scale_y_continuous(breaks = 1:11)+    
          theme(axis.title.x = element_blank(),
                axis.title.y = element_blank(),
                plot.title = element_text(hjust = 0))
        
        print(B)
        
        dev.off()
        
      } #end-else
    
    } #end-for(j)
    
  } #end-for(m)
 
} #end-fun

library(parallel)
library(doParallel)
library(foreach)
library(iterators)

detectCores()
cl<-makeCluster(8)
registerDoParallel(cl)
test<-foreach(x=seq_along(f_arr_combi),.combine='c') %dopar% cross_vali_mapping_fun(x)
stopCluster(cl)
stopImplicitCluster()

exc_time<-difftime(Sys.time(),time_start,units='mins')
print(paste0('execution time: ',round(exc_time,2),' mins'))
print('============================Alright')


























#二,NIGHT----------------------------------------------------------------------

##1,re_tif-----------------------------------------------------------------

rm(list=ls())

time_start<-Sys.time()

in_path<-"G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N02_testing_image_2022a/D1_combi_results_dele"
f_arr<-list.dirs(in_path,full.names = F,recursive = F)

out_path<-"G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N02_testing_image_2022a/D3_combi_results_tif"
out_path_arr_sub<-c(out_path)
for (i in seq_along(out_path_arr_sub)) {
  for (j in seq_along(f_arr)) {
    out_path_sub_j<-paste0(out_path_arr_sub[i],'/',f_arr[j])
    
    if(! dir.exists(out_path_sub_j)){
      dir.create(out_path_sub_j)
    } else {
      unlink(out_path_sub_j,recursive = T)
      dir.create(out_path_sub_j)
    }
    
  }
}

group_arr<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N01_all_data_2020_2021a/D1_band_combi_info/simu_group_arr_list.rds")
group_arr_TE_in<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N01_all_data_2020_2021a/D1_band_combi_info/group_arr_TE_in_list.rds")
group_arr_TE_out<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N01_all_data_2020_2021a/D1_band_combi_info/group_arr_TE_out_list.rds")

library(raster)
AHI_refer_path<-"G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N01_all_data_2020_2021a/C1_all_land/20200104UTC0810"
AHI_refer_arr<-list.files(pattern = "*.tif$",AHI_refer_path)
AHI_refer_arr<-AHI_refer_arr[grepl("t2m",AHI_refer_arr)]
AHI_refer<-raster(paste0(AHI_refer_path,'/',AHI_refer_arr[1]))

#f_arr
re_results_matrix_to_geotif_function_wh<-function(i){
  combi_i<-f_arr[i]
  
  f_i_path<-paste0(in_path,'/',combi_i)
  f_i_arr<-list.files(f_i_path,pattern = '*.txt$')
  
  f_i_arr_out<-group_arr_TE_out[[combi_i]]
  
  for (j in seq_along(f_i_arr)){
    f_j<-read.table(paste0(f_i_path,'/',f_i_arr[j]),header = T)
    
    for (k in seq_along(f_i_arr_out)) {
      ori_name<-f_i_arr_out[k]
      re_name<-paste0('re_',ori_name)
      
      f_j_re<-f_j[,re_name]
      f_j_re_matrix<-matrix(f_j_re,nrow=AHI_refer@nrows) #byrow=TRUE
      
      # crs <- "+proj=longlat +datum=WGS84 +no_defs"
      
      library(raster)
      f_j_re_raster<-raster(f_j_re_matrix,
                            xmn=AHI_refer@extent@xmin,
                            xmx=AHI_refer@extent@xmax,
                            ymn=AHI_refer@extent@ymin,
                            ymx=AHI_refer@extent@ymax,
                            crs=crs(AHI_refer))
      
      # f_j_re_raster<-(era5_land_0_1 == 1)*f_j_re_raster+(era5_land_0_1 != 1)*(-999)
      
      writeRaster(f_j_re_raster,
                  paste0(out_path,'/',combi_i,'/',gsub('_pre_dele.txt','',f_i_arr[j]),'_',re_name,'.tif'),
                  format = 'GTiff',
                  overwrite = TRUE)
      
    } #end-for(k)
    
  } #end-for(j)
  
} #end-fun


library(parallel)
library(doParallel)
library(foreach)
library(iterators)

detectCores()
cl<-makeCluster(8)
registerDoParallel(cl)
test<-foreach(j=seq_along(f_arr),.combine='c') %dopar% re_results_matrix_to_geotif_function_wh(j)
stopCluster(cl)
stopImplicitCluster()

exc_time<-difftime(Sys.time(),time_start,units='mins')
print(paste0('execution time: ',round(exc_time,2),' mins'))
print('============================Alright')


























#2,mapping---------------------------------------------------------------------

rm(list=ls())

time_start<-Sys.time()

in_path<-'G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N02_testing_image_2022a/D3_combi_results_tif'
in_path_ref<-'G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N02_testing_image_2022a/C1_all_land'
in_path_clip_ref<-'G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N02_testing_image_2022a/C1_all_land'
time_selec<-read.table('G:/20240506_Science/N02_Proces/N04_testing_image_time_selec/2022a_testing_image_time_selec_NIGHT_01v_effec.txt',
                       header = T)
time_selec<-as.character(time_selec[,1])

group_arr<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N01_all_data_2020_2021a/D1_band_combi_info/simu_group_arr_list.rds")
group_arr_TE_in<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N01_all_data_2020_2021a/D1_band_combi_info/group_arr_TE_in_list.rds")
group_arr_TE_out<-readRDS("G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N01_all_data_2020_2021a/D1_band_combi_info/group_arr_TE_out_list.rds")


f_arr_combi<-list.dirs(in_path,recursive = FALSE,full.names = FALSE)
f_arr_combi_symbol<-sub("^(C.*?)_.+", "\\1", f_arr_combi)

out_path_map<-'G:/20240506_Science/N02_Proces/N01_LST_LSE_RETRIEVAL/N02_NIGHT/N02_testing_image_2022a/E1_combi_results_mapping'
out_path_arr<-c(out_path_map)
for (i in seq_along(out_path_arr)) {
  for (j in seq_along(f_arr_combi)) {
    out_path_sub<-paste0(out_path_arr[i],'/',f_arr_combi[j])
    
    if(! dir.exists(out_path_sub)){
      dir.create(out_path_sub)
    } else {
      unlink(out_path_sub,recursive = T)
      dir.create(out_path_sub)
    }
    
  }
}



#f_arr_combi
cross_vali_mapping_fun<-function (i) {
  ori_vari_name<-group_arr_TE_out[[f_arr_combi[i]]]
  re_vari_name<-paste0('re_',ori_vari_name)
  
  for (m in seq_along(ori_vari_name)) {
    ori_vari_name_m<-ori_vari_name[m]
    re_vari_name_m<-re_vari_name[m]
    
    f_i_arr<-list.files(paste0(in_path,'/',f_arr_combi[i]),pattern = paste0('(',re_vari_name_m,')','.*tif$'))
    f_i_arr_ref<-list.files(in_path_ref,pattern = paste0('(',ori_vari_name_m,')','.*tif$'),recursive = T)
    f_i_arr_clip_ref<-list.files(in_path_clip_ref,pattern = paste0('(',ori_vari_name_m,')','.*tif$'),recursive = T)
    f_i_arr_ref_time<-substr(f_i_arr_ref,1,15)
    f_i_arr_clip_ref_time<-substr(f_i_arr_clip_ref,1,15)
    f_i_arr_ref<-f_i_arr_ref[f_i_arr_ref_time %in% time_selec]
    f_i_arr_clip_ref<-f_i_arr_clip_ref[f_i_arr_clip_ref_time %in% time_selec]
    
    f_i_arr_ref_name<-basename(f_i_arr_ref)
    f_i_arr_clip_ref_name<-basename(f_i_arr_clip_ref)
    
    f_i_arr_group_name<-c('re_MODIS Night','MODIS Night')
    
    library(stringr)
    f_i_arr_time<-str_extract_all(f_i_arr_ref_name, "\\d{8}UTC\\d{4}")
    f_i_arr_time<-unlist(f_i_arr_time)
    
    for (j in seq_along(f_i_arr)) {
      library(raster)
      f_j<-raster(paste0(in_path,'/',f_arr_combi[i],'/',f_i_arr[j]))
      f_j_ref<-raster(paste0(in_path_ref,'/',f_i_arr_time[j],'/',f_i_arr_ref_name[j]))
      f_j_clip_ref<-raster(paste0(in_path_clip_ref,'/',f_i_arr_time[j],'/',f_i_arr_clip_ref_name[j]))
      
      f_j<-crop(f_j,f_j_clip_ref,snap = "near")
      f_j_ref<-crop(f_j_ref,f_j_clip_ref,snap = "near")
      
      f_j[f_j == -999]<-NA
      f_j_ref[f_j_ref == -999]<-NA
      
      f_j_df <- as(f_j, "SpatialPixelsDataFrame")
      f_j_df <- as.data.frame(f_j_df)
      colnames(f_j_df) <- c("value", "x", "y")
      
      f_j_ref_df<-as(f_j_ref, "SpatialPixelsDataFrame")
      f_j_ref_df <- as.data.frame(f_j_ref_df)
      colnames(f_j_ref_df) <- c("value", "x", "y")
      
      min_value<-min(f_j_ref_df$value,f_j_df$value)
      max_value<-max(f_j_ref_df$value,f_j_df$value)
      # qujian_value<-round((max_value-min_value)/11)
      qujian_value<-(max_value-min_value)/11
      
      data_arr<-list()
      data_arr$re_x<-f_j_df
      data_arr$x<-f_j_ref_df
      names(data_arr)<-c(re_vari_name_m,ori_vari_name_m)
      data_arr_name<-names(data_arr)
      data_arr_name_map<-c(re_vari_name_m,ori_vari_name_m)
      
      if (grepl('LSE',re_vari_name_m)==TRUE) {
        for (k in seq_along(data_arr_name)) {
          data_k<-data_arr[[data_arr_name[k]]]
          
          library(tidyverse)
          library(dplyr)
          data_k2<-data_k %>% mutate(value2=case_when(
            value < round(min_value+qujian_value*1,3) ~ "K",
            value >= round(min_value+qujian_value*1,3) & value < round(min_value+qujian_value*2,3) ~ "J",
            value >= round(min_value+qujian_value*2,3) & value < round(min_value+qujian_value*3,3) ~ "I",
            value >= round(min_value+qujian_value*3,3) & value < round(min_value+qujian_value*4,3) ~ "H",
            value >= round(min_value+qujian_value*4,3) & value < round(min_value+qujian_value*5,3) ~ "G",
            value >= round(min_value+qujian_value*5,3) & value < round(min_value+qujian_value*6,3) ~ "F",
            value >= round(min_value+qujian_value*6,3) & value < round(min_value+qujian_value*7,3) ~ "E",
            value >= round(min_value+qujian_value*7,3) & value < round(min_value+qujian_value*8,3) ~ "D",
            value >= round(min_value+qujian_value*8,3) & value < round(min_value+qujian_value*9,3) ~ "C",
            value >= round(min_value+qujian_value*9,3) & value < round(min_value+qujian_value*10,3) ~ "B",
            value >= round(min_value+qujian_value*10,3) ~ "A"))
          cclass <- c(paste0('[',sprintf("%.3f",min_value+qujian_value*0),',',sprintf("%.3f",min_value+qujian_value*1),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*1),',',sprintf("%.3f",min_value+qujian_value*2),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*2),',',sprintf("%.3f",min_value+qujian_value*3),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*3),',',sprintf("%.3f",min_value+qujian_value*4),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*4),',',sprintf("%.3f",min_value+qujian_value*5),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*5),',',sprintf("%.3f",min_value+qujian_value*6),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*6),',',sprintf("%.3f",min_value+qujian_value*7),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*7),',',sprintf("%.3f",min_value+qujian_value*8),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*8),',',sprintf("%.3f",min_value+qujian_value*9),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*9),',',sprintf("%.3f",min_value+qujian_value*10),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*10),',',sprintf("%.3f",min_value+qujian_value*11),')'))
          
          
          classcolor <- c("#4541DE",
                          "#4160F7",
                          "#3381F5",
                          "#1E9FE3",
                          "#0BB6CB",
                          "#2DC4A3",
                          "#6BCA6C",
                          "#B2C33E",
                          "#E7C32B",
                          "#ffb242",
                          "#F19425")
          
          llabel<-c("K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A")
          mapping_df<-data.frame(cclass,classcolor,llabel)
          table<-data.frame(table(data_k2$value2))
          
          mapping_df<-mapping_df[which(mapping_df$llabel %in% table$Var1),]
          data_k3<-data_k2[,-1]
          colnames(data_k3)[3]<-"value"
          
          library(ggpointdensity)
          library(tidyverse)
          library(ggplot2)
          library(extrafont)
          library(ggpubr)
          library(ggpmisc)
          library(ggsci)
          library(raster)
          library(viridis)
          library(ggthemes)
          library(sf)
          library(showtext) 
          showtext_auto()
          font_add("simsun", "C:/Windows/Fonts/simsun.ttc")
          font_add("simsunb", "C:/Users/wangh/AppData/Local/Microsoft/Windows/Fonts/simsunb.ttf")
          font_add("timesbd", "C:/Windows/Fonts/timesbd.ttf")
          font_families()
          par(family = "timesbd")  
          
          library(Cairo)
          Cairo::CairoJPEG(
            filename = paste0(out_path_map,'/',f_arr_combi[i],'/',f_arr_combi[i],'_',f_i_arr_time[j],'_',data_arr_name[k],".jpg"),
            width = 1980*1.2,
            height = 1320*1.1,
            family="timesbd")
          
          library(sf)
          area<-read_sf("D:/N03_CAAS/N01_shp/ocean/ocean/ocean.shp")
          A <- ggplot()+
            geom_tile(data = data_k3,
                      aes(x = x, y = y, fill=factor(value)))+
            scale_fill_manual(name=data_arr_name_map[k],
                              values=rev(mapping_df$classcolor),
                              labels=rev(mapping_df$cclass))+
            theme_test(base_size=80,
                       base_family="timesbd",
                       base_line_size=8)+
            # theme(axis.ticks.x=element_blank(),
            #       axis.ticks.y=element_blank(),
            #       axis.text.x=element_blank(),
            #       axis.text.y=element_blank())+
            theme(axis.text.x = element_text(color = "black"),
                  axis.text.y = element_text(color = "black"),
                  axis.ticks.length = unit(2,"cm"),
                  axis.ticks = element_line(color = "black"),
                  plot.margin = margin(t=1,r=1,b=1,l=1, unit = "cm"))+
            theme(plot.title = element_text(hjust = 0.5),
                  legend.box.margin = margin(t=1,r=1,b=1,l=-0.5,unit = 'cm'),
                  legend.position="right",
                  legend.background = element_blank(),
                  legend.spacing.y = unit(1,'cm'),
                  legend.spacing.x = unit(1,'cm'),
                  legend.key.width = unit(2.3, "cm"),
                  legend.key.height = unit(3.6, "cm"),
                  legend.text = element_text(margin = margin(t=0,r=0,b=0,l=1.5,'cm'),size = 58),
                  legend.title = element_text(size = 60))+
            # labs(title = month_trans[f_arr_combi[i]])+
            theme(axis.title.x = element_blank(),
                  axis.title.y = element_blank(),
                  plot.title = element_text(hjust = 0))+
            scale_x_continuous(breaks = c(floor(f_j@extent@xmin),
                                          ceiling(mean(c(f_j@extent@xmin,f_j@extent@xmax))),
                                          ceiling(f_j@extent@xmax)),
                               limits = c(floor(f_j@extent@xmin),ceiling(f_j@extent@xmax)))+
            scale_y_continuous(breaks = c(floor(f_j@extent@ymin),
                                          ceiling(mean(c(f_j@extent@ymin,f_j@extent@ymax))),
                                          ceiling(f_j@extent@ymax)),
                               limits = c(floor(f_j@extent@ymin),ceiling(f_j@extent@ymax)))+
            # theme(legend.position='none')+
            geom_sf(data=area,
                    fill='white',
                    linewidth=2)+
            annotate("text_npc",
                     npcx = 0.05,
                     npcy = 0.95,
                     size = 42,
                     hjust=0, 
                     family='timesbd',
                     label = f_i_arr_group_name[k])
          
          print(A)
          
          dev.off()
        } #end-for(k)
        

        classcolor <- c("#4541DE",
                        "#4160F7",
                        "#3381F5",
                        "#1E9FE3",
                        "#0BB6CB",
                        "#2DC4A3",
                        "#6BCA6C",
                        "#B2C33E",
                        "#E7C32B",
                        "#ffb242",
                        "#F19425")
        
        legend_data<-data.frame(
          value = c(round(min_value+qujian_value*0,3),
                    round(min_value+qujian_value*1,3),
                    round(min_value+qujian_value*2,3),
                    round(min_value+qujian_value*3,3),
                    round(min_value+qujian_value*4,3),
                    round(min_value+qujian_value*5,3),
                    round(min_value+qujian_value*6,3),
                    round(min_value+qujian_value*7,3),
                    round(min_value+qujian_value*8,3),
                    round(min_value+qujian_value*9,3),
                    round(min_value+qujian_value*10,3)),
          x = 1:11,
          y = 1:11,
          cclass <- c(paste0('[',sprintf("%.3f",min_value+qujian_value*0),',',sprintf("%.3f",min_value+qujian_value*1),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*1),',',sprintf("%.3f",min_value+qujian_value*2),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*2),',',sprintf("%.3f",min_value+qujian_value*3),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*3),',',sprintf("%.3f",min_value+qujian_value*4),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*4),',',sprintf("%.3f",min_value+qujian_value*5),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*5),',',sprintf("%.3f",min_value+qujian_value*6),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*6),',',sprintf("%.3f",min_value+qujian_value*7),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*7),',',sprintf("%.3f",min_value+qujian_value*8),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*8),',',sprintf("%.3f",min_value+qujian_value*9),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*9),',',sprintf("%.3f",min_value+qujian_value*10),')'),
                      paste0('[',sprintf("%.3f",min_value+qujian_value*10),',',sprintf("%.3f",min_value+qujian_value*11),')')),
          classcolor = classcolor,
          llabel = c("K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A"))
        
        
        library(Cairo)
        Cairo::CairoJPEG(
          filename = paste0(out_path_map,'/',f_arr_combi[i],'/',f_arr_combi[i],'_',f_i_arr_time[j],'_',data_arr_name[2],'_','legend',".jpg"),
          width = 1980*1.2,
          height = 1320*1.1,
          family="timesbd")
        
        B <- ggplot()+
          geom_tile(data = legend_data,
                    aes(x = x, y = y, fill=factor(value)))+
          scale_fill_manual(name=data_arr_name[2],
                            values=rev(legend_data$classcolor),
                            labels=rev(legend_data$cclass))+
          theme_test(base_size=80,
                     base_family="timesbd",
                     base_line_size=8)+
          # theme(axis.ticks.x=element_blank(),
          #       axis.ticks.y=element_blank(),
          #       axis.text.x=element_blank(),
          #       axis.text.y=element_blank())+
          theme(axis.text.x = element_text(color = "black"),
                axis.text.y = element_text(color = "black"),
                axis.ticks.length = unit(2,"cm"),
                axis.ticks = element_line(color = "black"),
                plot.margin = margin(t=1,r=1,b=1,l=1, unit = "cm"))+
          theme(plot.title = element_text(hjust = 0.5),
                legend.box.margin = margin(t=1,r=1,b=1,l=-0.5,unit = 'cm'),
                legend.position="right",
                legend.background = element_blank(),
                legend.spacing.y = unit(1,'cm'),
                legend.spacing.x = unit(1,'cm'),
                legend.key.width = unit(2.3, "cm"),
                legend.key.height = unit(3.6, "cm"),
                legend.text = element_text(margin = margin(t=0,r=0,b=0,l=1.5,'cm'),size = 58),
                legend.title = element_text(size = 60))+
          # labs(title = month_trans[f_arr_combi[i]])+
          # xlim(min(legend_data$x)-1,max(legend_data$x)+1)+
          # ylim(min(legend_data$y)-1,max(legend_data$y)+1)+
          scale_x_continuous(breaks = 1:11)+  
          scale_y_continuous(breaks = 1:11)+    
          theme(axis.title.x = element_blank(),
                axis.title.y = element_blank(),
                plot.title = element_text(hjust = 0))
        
        print(B)
        
        dev.off()
        
      } else { #LST
        
        for (k in seq_along(data_arr_name)) {
          data_k<-data_arr[[data_arr_name[k]]]
          
          library(tidyverse)
          library(dplyr)
          data_k2<-data_k %>% mutate(value2=case_when(
            value < round(min_value+qujian_value*1) ~ "K",
            value >= round(min_value+qujian_value*1) & value < round(min_value+qujian_value*2) ~ "J",
            value >= round(min_value+qujian_value*2) & value < round(min_value+qujian_value*3) ~ "I",
            value >= round(min_value+qujian_value*3) & value < round(min_value+qujian_value*4) ~ "H",
            value >= round(min_value+qujian_value*4) & value < round(min_value+qujian_value*5) ~ "G",
            value >= round(min_value+qujian_value*5) & value < round(min_value+qujian_value*6) ~ "F",
            value >= round(min_value+qujian_value*6) & value < round(min_value+qujian_value*7) ~ "E",
            value >= round(min_value+qujian_value*7) & value < round(min_value+qujian_value*8) ~ "D",
            value >= round(min_value+qujian_value*8) & value < round(min_value+qujian_value*9) ~ "C",
            value >= round(min_value+qujian_value*9) & value < round(min_value+qujian_value*10) ~ "B",
            value >= round(min_value+qujian_value*10) ~ "A"))
          cclass <- c(paste0('[',round(min_value+qujian_value*0),',',round(min_value+qujian_value*1),')'),
                      paste0('[',round(min_value+qujian_value*1),',',round(min_value+qujian_value*2),')'),
                      paste0('[',round(min_value+qujian_value*2),',',round(min_value+qujian_value*3),')'),
                      paste0('[',round(min_value+qujian_value*3),',',round(min_value+qujian_value*4),')'),
                      paste0('[',round(min_value+qujian_value*4),',',round(min_value+qujian_value*5),')'),
                      paste0('[',round(min_value+qujian_value*5),',',round(min_value+qujian_value*6),')'),
                      paste0('[',round(min_value+qujian_value*6),',',round(min_value+qujian_value*7),')'),
                      paste0('[',round(min_value+qujian_value*7),',',round(min_value+qujian_value*8),')'),
                      paste0('[',round(min_value+qujian_value*8),',',round(min_value+qujian_value*9),')'),
                      paste0('[',round(min_value+qujian_value*9),',',round(min_value+qujian_value*10),')'),
                      paste0('[',round(min_value+qujian_value*10),',',round(min_value+qujian_value*11),')'))
    
          
          Johnson<-MetBrewer::met.brewer("Johnson")
          Johnson<-rev(colorspace::lighten(Johnson)) 
          length(Johnson)
          Johnson[1]
          mycol<-colorRampPalette(Johnson,bias=1)(n=11)
          classcolor <- mycol
          
          
          llabel<-c("K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A")
          mapping_df<-data.frame(cclass,classcolor,llabel)
          table<-data.frame(table(data_k2$value2))
          
          mapping_df<-mapping_df[which(mapping_df$llabel %in% table$Var1),]
          data_k3<-data_k2[,-1]
          colnames(data_k3)[3]<-"value"
          
          library(ggpointdensity)
          library(tidyverse)
          library(ggplot2)
          library(extrafont)
          library(ggpubr)
          library(ggpmisc)
          library(ggsci)
          library(raster)
          library(viridis)
          library(ggthemes)
          library(sf)
          library(showtext) 
          showtext_auto()
          font_add("simsun", "C:/Windows/Fonts/simsun.ttc")
          font_add("simsunb", "C:/Users/wangh/AppData/Local/Microsoft/Windows/Fonts/simsunb.ttf")
          font_add("timesbd", "C:/Windows/Fonts/timesbd.ttf")
          font_families()
          par(family = "timesbd")  
          
          library(Cairo)
          Cairo::CairoJPEG(
            filename = paste0(out_path_map,'/',f_arr_combi[i],'/',f_arr_combi[i],'_',f_i_arr_time[j],'_',data_arr_name[k],".jpg"),
            width = 1980*1.2,
            height = 1320*1.1,
            family="timesbd")
          
          library(sf)
          area<-read_sf("D:/N03_CAAS/N01_shp/ocean/ocean/ocean.shp")
          A <- ggplot()+
            geom_tile(data = data_k3,
                      aes(x = x, y = y, fill=factor(value)))+
            scale_fill_manual(name=data_arr_name_map[k],
                              values=rev(mapping_df$classcolor),
                              labels=rev(mapping_df$cclass))+
            theme_test(base_size=80,
                       base_family="timesbd",
                       base_line_size=8)+
            # theme(axis.ticks.x=element_blank(),
            #       axis.ticks.y=element_blank(),
            #       axis.text.x=element_blank(),
            #       axis.text.y=element_blank())+
            theme(axis.text.x = element_text(color = "black"),
                  axis.text.y = element_text(color = "black"),
                  axis.ticks.length = unit(2,"cm"),
                  axis.ticks = element_line(color = "black"),
                  plot.margin = margin(t=1,r=1,b=1,l=1, unit = "cm"))+
            theme(plot.title = element_text(hjust = 0.5),
                  legend.box.margin = margin(t=1,r=1,b=1,l=-0.5,unit = 'cm'),
                  legend.position="right",
                  legend.background = element_blank(),
                  legend.spacing.y = unit(1,'cm'),
                  legend.spacing.x = unit(1,'cm'),
                  legend.key.width = unit(2.3, "cm"),
                  legend.key.height = unit(3.6, "cm"),
                  legend.text = element_text(margin = margin(t=0,r=0,b=0,l=1.5,'cm'),size = 58),
                  legend.title = element_text(size = 60))+
            # labs(title = month_trans[f_arr_combi[i]])+
            theme(axis.title.x = element_blank(),
                  axis.title.y = element_blank(),
                  plot.title = element_text(hjust = 0))+
            scale_x_continuous(breaks = c(floor(f_j@extent@xmin),
                                          ceiling(mean(c(f_j@extent@xmin,f_j@extent@xmax))),
                                          ceiling(f_j@extent@xmax)),
                               limits = c(floor(f_j@extent@xmin),ceiling(f_j@extent@xmax)))+
            scale_y_continuous(breaks = c(floor(f_j@extent@ymin),
                                          ceiling(mean(c(f_j@extent@ymin,f_j@extent@ymax))),
                                          ceiling(f_j@extent@ymax)),
                               limits = c(floor(f_j@extent@ymin),ceiling(f_j@extent@ymax)))+
            # theme(legend.position='none')+
            geom_sf(data=area,
                    fill='white',
                    linewidth=2)+
            annotate("text_npc",
                     npcx = 0.05,
                     npcy = 0.95,
                     size = 42,
                     hjust=0, 
                     family='timesbd',
                     label = f_i_arr_group_name[k])
          
          print(A)
          
          dev.off()
        } #end-for(k)
        
        Johnson<-MetBrewer::met.brewer("Johnson")
        Johnson<-rev(colorspace::lighten(Johnson)) 
        length(Johnson)
        Johnson[1]
        mycol<-colorRampPalette(Johnson,bias=1)(n=11)
        classcolor <- mycol
        
        legend_data<-data.frame(
          value = c(round(min_value+qujian_value*0),
                    round(min_value+qujian_value*1),
                    round(min_value+qujian_value*2),
                    round(min_value+qujian_value*3),
                    round(min_value+qujian_value*4),
                    round(min_value+qujian_value*5),
                    round(min_value+qujian_value*6),
                    round(min_value+qujian_value*7),
                    round(min_value+qujian_value*8),
                    round(min_value+qujian_value*9),
                    round(min_value+qujian_value*10)),
          x = 1:11,
          y = 1:11,
          cclass <- c(paste0('[',round(min_value+qujian_value*0),',',round(min_value+qujian_value*1),')'),
                      paste0('[',round(min_value+qujian_value*1),',',round(min_value+qujian_value*2),')'),
                      paste0('[',round(min_value+qujian_value*2),',',round(min_value+qujian_value*3),')'),
                      paste0('[',round(min_value+qujian_value*3),',',round(min_value+qujian_value*4),')'),
                      paste0('[',round(min_value+qujian_value*4),',',round(min_value+qujian_value*5),')'),
                      paste0('[',round(min_value+qujian_value*5),',',round(min_value+qujian_value*6),')'),
                      paste0('[',round(min_value+qujian_value*6),',',round(min_value+qujian_value*7),')'),
                      paste0('[',round(min_value+qujian_value*7),',',round(min_value+qujian_value*8),')'),
                      paste0('[',round(min_value+qujian_value*8),',',round(min_value+qujian_value*9),')'),
                      paste0('[',round(min_value+qujian_value*9),',',round(min_value+qujian_value*10),')'),
                      paste0('[',round(min_value+qujian_value*10),',',round(min_value+qujian_value*11),')')),
          classcolor = classcolor,
          llabel = c("K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A"))
        
        
        library(Cairo)
        Cairo::CairoJPEG(
          filename = paste0(out_path_map,'/',f_arr_combi[i],'/',f_arr_combi[i],'_',f_i_arr_time[j],'_',data_arr_name[2],'_','legend',".jpg"),
          width = 1980*1.2,
          height = 1320*1.1,
          family="timesbd")
        
        B <- ggplot()+
          geom_tile(data = legend_data,
                    aes(x = x, y = y, fill=factor(value)))+
          scale_fill_manual(name=data_arr_name[2],
                            values=rev(legend_data$classcolor),
                            labels=rev(legend_data$cclass))+
          theme_test(base_size=80,
                     base_family="timesbd",
                     base_line_size=8)+
          # theme(axis.ticks.x=element_blank(),
          #       axis.ticks.y=element_blank(),
          #       axis.text.x=element_blank(),
          #       axis.text.y=element_blank())+
          theme(axis.text.x = element_text(color = "black"),
                axis.text.y = element_text(color = "black"),
                axis.ticks.length = unit(2,"cm"),
                axis.ticks = element_line(color = "black"),
                plot.margin = margin(t=1,r=1,b=1,l=1, unit = "cm"))+
          theme(plot.title = element_text(hjust = 0.5),
                legend.box.margin = margin(t=1,r=1,b=1,l=-0.5,unit = 'cm'),
                legend.position="right",
                legend.background = element_blank(),
                legend.spacing.y = unit(1,'cm'),
                legend.spacing.x = unit(1,'cm'),
                legend.key.width = unit(2.3, "cm"),
                legend.key.height = unit(3.6, "cm"),
                legend.text = element_text(margin = margin(t=0,r=0,b=0,l=1.5,'cm'),size = 58),
                legend.title = element_text(size = 60))+
          # labs(title = month_trans[f_arr_combi[i]])+
          # xlim(min(legend_data$x)-1,max(legend_data$x)+1)+
          # ylim(min(legend_data$y)-1,max(legend_data$y)+1)+
          scale_x_continuous(breaks = 1:11)+  
          scale_y_continuous(breaks = 1:11)+    
          theme(axis.title.x = element_blank(),
                axis.title.y = element_blank(),
                plot.title = element_text(hjust = 0))
        
        print(B)
        
        dev.off()
        
      } #end-else
      
    } #end-for(j)
    
  } #end-for(m)
  
} #end-fun

library(parallel)
library(doParallel)
library(foreach)
library(iterators)

detectCores()
cl<-makeCluster(8)
registerDoParallel(cl)
test<-foreach(x=seq_along(f_arr_combi),.combine='c') %dopar% cross_vali_mapping_fun(x)
stopCluster(cl)
stopImplicitCluster()

exc_time<-difftime(Sys.time(),time_start,units='mins')
print(paste0('execution time: ',round(exc_time,2),' mins'))
print('============================Alright')