rgee icon indicating copy to clipboard operation
rgee copied to clipboard

Error: RuntimeError: AttributeError: 'ApiFunction' object has no attribute 'name'

Open wilson733 opened this issue 2 years ago • 5 comments

  • rgee version: 1.1.6
  • R version: 4.2.2
  • Operating System: win 10

Description

I want to download all the values of GCI index in a data frame from sentinel2, for all images of a field whitout clouds. I want to do a iteration, but stop me an error: Error: RuntimeError: AttributeError: 'ApiFunction' object has no attribute 'name'

What I Did

library(sf)
library(sp)
library(tidyverse)
library(rgee)
library(raster)

##ee_check()
##ee_Authenticate(auth_mode = "notebook")

ee_Initialize(drive = T)

archivo <-  choose.files(caption = "Seleccione archivo a estandatizar (shp, gpkg)",
                         multi = FALSE)
file_name <- paste0(tools::file_path_sans_ext(archivo),
                    '_AMBIENTADO_GCI.',
                    tools::file_ext(archivo))

poligono<-st_read(archivo, crs= 32721)%>%
  st_geometry()

roi <-poligono %>%
  sf_as_ee()

# Crear una grilla regular de 10 metros x 10 metros centrada en los polígonos
grid <- poligono%>%
  st_make_grid(what = "centers", cellsize = c(10, 10))%>%
  st_intersection(poligono)

df<- grid%>%
  st_as_sf%>%
  st_coordinates()%>%
 as.data.frame()%>%
  mutate(index = 1:n())%>%
  st_as_sf(coords = c("X", "Y"), crs = 32721)

str(df)
#Creamos una coleccion de imagenes

collection_imag<- ee$ImageCollection("COPERNICUS/S2_SR_HARMONIZED")$
  filterBounds(roi)$
  filter(ee$Filter$lt("CLOUD_COVERAGE_ASSESSMENT", 5))

#func_gci<- this is a function to calculate satellite index

func_gci <-function(image){
  gci =image$expression(
    expression = 'NIR/GREEN-1',
    opt_map = list(
      'NIR' = image$select('B8'),
      'GREEN' = image$select('B3')
    )
  )
  return(image$addBands(image$addBands(gci$rename('GCI')))
  )
}

collection_gci<- collection_imag$map(func_gci)$
  select("GCI")$
  map(function(image) {
    image$clip(roi)
  }
)

resacale_rename<- function(image){
  date<- ee$Date(image$get("system:time_start"))$format("%m_%d_%y")
  return(image$rename(date))
}

gci_rescaled<- collection_gci$map(resacale_rename)

for (start in seq(1, as.integer(c(nrow(df))), by=10000)) {
  end <- min(start + 10000 - 1, as.integer(c(nrow(df))))
  chunk <- df[start:end, ]
  ee_extract(
    x=gci_rescaled,
    y=sf_as_ee(chunk),
    scale= 10,
    sf= F,
    maxFeatures = 1000000
  )
}

wilson733 avatar Feb 10 '23 05:02 wilson733

hi @wilson733 can I have access to your geometry?

csaybar avatar Feb 11 '23 12:02 csaybar

Yes, of course don_cristobal_1_mascara.zip

wilson733 avatar Feb 11 '23 18:02 wilson733

I also encountered this problem.

R 4.2.2 rgee 1.1.6 installed from github

rgee 1.1.6 I found three bugs:

  1. Error: AttributeError: 'ApiFunction' object has no attribute 'name'
  2. Error in strsplit(code, ":") : object 'band_metadata' not found
  3. Error: ee.ee_exception.EEException: reduce.median: Error in map(ID=2018_05_01): Image.select: Pattern 'LST' did not match any bands.

code:

library(sf)
library(rgee)

ee_Initialize(drive = T)

# Define a region of interest with sf
roi <- read_sf("./ROI.gpkg", query = 'SELECT * FROM MongoliaTuLatest') %>%
  sf_as_ee()

day_start = '2018-05-01'
day_end = '2018-06-01'


#1km LST daily
MOD_LST = ee$ImageCollection('MODIS/006/MOD11A1')$
  select('LST_Day_1km', 'LST')$     #Error 3, if remove 'LST', it's ok
  filter(ee$Filter$date(day_start, day_end))$
  map(function(img) {
   return(img$multiply(0.02)$clip(roi)) 
   })

MOD_LST = MOD_LST$median()
ee_print(MOD_LST)
#预览数据
LSTVisPara <- list(min = 300, 
                   max = 340, 
                   palette = c('#040274', '#040281', '#0502a3', '#0502b8', '#0502ce', '#0502e6',
                               '#0602ff', '#235cb1', '#307ef3', '#269db1', '#30c8e2', '#32d3ef',
                               '#3be285', '#3ff38f', '#86e26f', '#3ae237', '#b5e22e', '#d6e21f',
                               '#fff705', '#ffd611', '#ffb613', '#ff8b13', '#ff6e08', '#ff500d',
                               '#ff0000', '#de0101', '#c21301', '#a71001', '#911003'))
Map$centerObject(roi)
Map$addLayer(MOD_LST, LSTVisPara,'MOD_LST')+
  Map$addLegend(LSTVisPara, name = "LST", position = "bottomright")

#MODIS 逐日250m地表反射率数据
MOD_SR = ee$ImageCollection("MODIS/061/MOD09GQ")$
  select(c('sur_refl_b01','sur_refl_b02'), c('red', 'NIR'))$
  filter(ee$Filter$date(day_start, day_end))$
  map(function(img){
    ndvi = img$normalizedDifference(c('NIR','red'))$rename("NDVI")
    return(img$addBands(ndvi)$clip(roi))
  })$
  median()

ee_print(MOD_SR)

falseColorVis = list(
  min = -100,
  max = 8000,
  bands = c('NIR', 'NIR', 'red')
)

Map$centerObject(roi, zoom = 3)
Map$addLayer(MOD_SR, falseColorVis, "MOD_SR")

#MODIS IGBP逐年土地覆被
MOD_LULC = ee$ImageCollection("MODIS/061/MCD12Q1")$
  select('LC_Type1')$
  filter(ee$Filter$date('2018-01-01','2019-01-01'))$
  map(function(img){
    return(img$clip(roi))
  })$
  mean()

ee_print(MOD_LULC)

igbpLandCoverVis = list(
  min = 1.0,
  max = 17.0,
  palette= c('05450a', '086a10', '54a708', '78d203', '009900', 'c6b044', 'dcd159',
             'dade48', 'fbff13', 'b6ff05', '27ff87', 'c24f44', 'a5a5a5', 'ff6d4c',
             '69fff8', 'f9ffa4', '1c0dff')
)

Map$centerObject(roi, zoom = 4)
Map$addLayer(MOD_LULC, igbpLandCoverVis, "MOD_LULC")

#获取DEM
SRTM = ee$Image('CGIAR/SRTM90_V4')$select('elevation')$clip(roi)

img_Original = MOD_LST$
  addBands(MOD_SR)$
  addBands(MOD_LULC)$
  addBands(SRTM)

#定义一个重采样函数
reSampleFun =  function(image,scale){
  dst_crs = image$select('blue')$projection()$crs()
  reSampleImg = image$  #resample('bilinear') # bilinear bicubic
    reproject(
      crs= 'EPSG:4326',
      scale= scale
    )
  return(reSampleImg) 
}

img_240 = reSampleFun(img_Original,240)
img_960 = reSampleFun(img_Original,960)

m1 = Map$addLayer(img_240$select('LST_Day_1km'), LSTVisPara, 'img_240')
m2 = Map$addLayer(img_960$select('LST_Day_1km'), LSTVisPara, 'img_960')
m1|m2

#生成样本点
randomPoint = ee$FeatureCollection$randomPoints(
  region = roi,
  points = 5000
)

Map$addLayer(randomPoint)

#Code as fellow, report error: 
SamplePointCol = img_960$sampleRectangle(
  collection = randomPoint,
  scale = 100,
  tileScale = 2,
  geometries = T
)

image image image

I found that ee$ImageCollection()$select() function, most time only can fill 'selectors' option, if fill 'names' function,it will report an error.

TianyaImpression avatar Feb 22 '23 13:02 TianyaImpression

hi @wilson733 can I have access to your geometry?

Can you help us?

wilson733 avatar Feb 23 '23 20:02 wilson733

Hi Cesar, can you help me with the error please!? I need the code for a paper. Thank you!

El mié., 22 de febrero de 2023 10:29, TianyaImpression < @.***> escribió:

I also encountered this problem.

R 4.2.2 rgee 1.1.6 installed from github

rgee 1.1.6 I found three bugs:

  1. Error: AttributeError: 'ApiFunction' object has no attribute 'name'
  2. Error in strsplit(code, ":") : object 'band_metadata' not found
  3. Error: ee.ee_exception.EEException: reduce.median: Error in map(ID=2018_05_01): Image.select: Pattern 'LST' did not match any bands.

code:

library(sf)

library(rgee)

ee_Initialize(drive = T)

Define a region of interest with sf

roi <- read_sf("./ROI.gpkg", query = 'SELECT * FROM MongoliaTuLatest') %>%

sf_as_ee()

day_start = '2018-05-01'

day_end = '2018-06-01'

#1km LST daily

MOD_LST = ee$ImageCollection('MODIS/006/MOD11A1')$

select('LST_Day_1km', 'LST')$ #Error 3, if remove 'LST', it's ok

filter(ee$Filter$date(day_start, day_end))$

map(function(img) {

return(img$multiply(0.02)$clip(roi))

})

MOD_LST = MOD_LST$median()

ee_print(MOD_LST)

#预览数据

LSTVisPara <- list(min = 300,

               max = 340,

               palette = c('#040274', '#040281', '#0502a3', '#0502b8', '#0502ce', '#0502e6',

                           '#0602ff', '#235cb1', '#307ef3', '#269db1', '#30c8e2', '#32d3ef',

                           '#3be285', '#3ff38f', '#86e26f', '#3ae237', '#b5e22e', '#d6e21f',

                           '#fff705', '#ffd611', '#ffb613', '#ff8b13', '#ff6e08', '#ff500d',

                           '#ff0000', '#de0101', '#c21301', '#a71001', '#911003'))

Map$centerObject(roi)

Map$addLayer(MOD_LST, LSTVisPara,'MOD_LST')+

Map$addLegend(LSTVisPara, name = "LST", position = "bottomright")

#MODIS 逐日250m地表反射率数据

MOD_SR = ee$ImageCollection("MODIS/061/MOD09GQ")$

select(c('sur_refl_b01','sur_refl_b02'), c('red', 'NIR'))$

filter(ee$Filter$date(day_start, day_end))$

map(function(img){

ndvi = img$normalizedDifference(c('NIR','red'))$rename("NDVI")

return(img$addBands(ndvi)$clip(roi))

})$

median()

ee_print(MOD_SR)

falseColorVis = list(

min = -100,

max = 8000,

bands = c('NIR', 'NIR', 'red')

)

Map$centerObject(roi, zoom = 3)

Map$addLayer(MOD_SR, falseColorVis, "MOD_SR")

#MODIS IGBP逐年土地覆被

MOD_LULC = ee$ImageCollection("MODIS/061/MCD12Q1")$

select('LC_Type1')$

filter(ee$Filter$date('2018-01-01','2019-01-01'))$

map(function(img){

return(img$clip(roi))

})$

mean()

ee_print(MOD_LULC)

igbpLandCoverVis = list(

min = 1.0,

max = 17.0,

palette= c('05450a', '086a10', '54a708', '78d203', '009900', 'c6b044', 'dcd159',

         'dade48', 'fbff13', 'b6ff05', '27ff87', 'c24f44', 'a5a5a5', 'ff6d4c',

         '69fff8', 'f9ffa4', '1c0dff')

)

Map$centerObject(roi, zoom = 4)

Map$addLayer(MOD_LULC, igbpLandCoverVis, "MOD_LULC")

#获取DEM

SRTM = ee$Image('CGIAR/SRTM90_V4')$select('elevation')$clip(roi)

img_Original = MOD_LST$

addBands(MOD_SR)$

addBands(MOD_LULC)$

addBands(SRTM)

#定义一个重采样函数

reSampleFun = function(image,scale){

dst_crs = image$select('blue')$projection()$crs()

reSampleImg = image$ #resample('bilinear') # bilinear bicubic

reproject(

  crs= 'EPSG:4326',

  scale= scale

)

return(reSampleImg)

}

img_240 = reSampleFun(img_Original,240)

img_960 = reSampleFun(img_Original,960)

m1 = Map$addLayer(img_240$select('LST_Day_1km'), LSTVisPara, 'img_240')

m2 = Map$addLayer(img_960$select('LST_Day_1km'), LSTVisPara, 'img_960')

m1|m2

#生成样本点

randomPoint = ee$FeatureCollection$randomPoints(

region = roi,

points = 5000

)

Map$addLayer(randomPoint)

#Code as fellow, report error:

SamplePointCol = img_960$sampleRectangle(

collection = randomPoint,

scale = 100,

tileScale = 2,

geometries = T

)

[image: image] https://user-images.githubusercontent.com/22004043/220630074-b5a659a6-29f8-465f-b3e8-afac8b2ccb4a.png [image: image] https://user-images.githubusercontent.com/22004043/220630229-e9aeb71b-a4e6-4897-a00a-023e4dc1382c.png [image: image] https://user-images.githubusercontent.com/22004043/220632248-10611666-3c63-47b0-a2f7-0618a79d0280.png

I found that ee$ImageCollection()$select() function, most time only can fill 'selectors' option, if fill 'names' function,it will report an error.

— Reply to this email directly, view it on GitHub https://github.com/r-spatial/rgee/issues/316#issuecomment-1440020052, or unsubscribe https://github.com/notifications/unsubscribe-auth/A2PQB4EBXGQ5JMIP2AHICJTWYYIB7ANCNFSM6AAAAAAUXMLADQ . You are receiving this because you were mentioned.Message ID: @.***>

wilson733 avatar Mar 13 '23 16:03 wilson733