Erreur de tuile dans Google Earth Engine?
Le code ci-dessous a été écrit pour la correction radiométrique ASTER dans Google Earth Engine, mais à l'étape de visualisation, renvoie cette erreur:
lien de code:https://code.earthengine.google.com/3ccaaaa0e9ce68bdf80b8056be5d057d
Map.centerObject(table);
Map.addLayer(table)
var ast = ee.ImageCollection("ASTER/AST_L1T_003")
.filterDate('2000-01-01','2020-01-01')
.filterBounds(table)
.filter(ee.Filter.calendarRange(7,9,'month'))
.select('B0[4-9]')
.map(function(img){
var gain4 = ee.Image(ee.Number(img.select('B04').get('GAIN_COEFFICIENT_B04')));
var gain5 = ee.Image(ee.Number(img.select('B05').get('GAIN_COEFFICIENT_B05')));
var gain6 = ee.Image(ee.Number(img.select('B06').get('GAIN_COEFFICIENT_B06')));
var gain7 = ee.Image(ee.Number(img.select('B07').get('GAIN_COEFFICIENT_B07')));
var gain8 = ee.Image(ee.Number(img.select('B08').get('GAIN_COEFFICIENT_B08')));
var gain9 = ee.Image(ee.Number(img.select('B08').get('GAIN_COEFFICIENT_B09')));
var b4 = img.select('B04').multiply(gain4).clip(table);
var b5 = img.select('B05').multiply(gain5).clip(table);
var b6 = img.select('B06').multiply(gain6).clip(table);
var b7 = img.select('B07').multiply(gain7).clip(table);
var b8 = img.select('B08').multiply(gain8).clip(table);
var b9 = img.select('B09').multiply(gain9).clip(table);
var stack = ee.Image.cat([b4,b5,b6,b7,b8,b9]);
return stack
}).median();
print(ast);
Map.addLayer(ast)
Réponses
Toutes les images des images que vous avez sélectionnées n’ont pas les propriétés GAIN_COEFFICIENT_B04, etc. Par exemple, ASTER/AST_L1T_003/20100709070749a seulement
GAIN_COEFFICIENT_B01: 0.676
GAIN_COEFFICIENT_B02: 0.708
GAIN_COEFFICIENT_B10: 0.006822
GAIN_COEFFICIENT_B11: 0.00678
GAIN_COEFFICIENT_B12: 0.00659
GAIN_COEFFICIENT_B13: 0.005693
GAIN_COEFFICIENT_B14: 0.005225
GAIN_COEFFICIENT_B3N: 0.862
Ainsi, .get('GAIN_COEFFICIENT_B04')renvoie null et votre calcul d'image échoue car null n'est pas une valeur valide pour une image constante.
Vous pouvez ajouter un filtre sur la collection d'images pour vous assurer que ces propriétés sont présentes:
.filter(ee.Filter.notNull([
'GAIN_COEFFICIENT_B04',
'GAIN_COEFFICIENT_B05',
'GAIN_COEFFICIENT_B06',
'GAIN_COEFFICIENT_B07',
'GAIN_COEFFICIENT_B08',
'GAIN_COEFFICIENT_B09',
]))
J'ai remarqué d'autres améliorations qui pourraient être apportées à votre code.
var gain4 = ee.Image(ee.Number(img.select('B04').get('GAIN_COEFFICIENT_B04')));
Ici, le .select('B04')ne fait rien (puisque vous obtenez une propriété, et les propriétés sont indépendantes des bandes). En outre, il existe des variantes .get()qui éliminent le besoin d'écrire ee.Number:
var gain4 = ee.Image(img.getNumber('GAIN_COEFFICIENT_B04'));
Mais cela peut être encore plus simple: il n'est pas nécessaire d'écrire ee.Image(constant)dans de nombreux cas; vous pouvez écrire un nombre et il sera converti en image.
var b4 = img.select('B04').multiply(img.getNumber('GAIN_COEFFICIENT_B04')).clip(table);
Enfin, il est inutilement inefficace pour .clip(table)les images individuelles plutôt que pour le résultat, et lorsque vous coupez dans une table / collection, vous devez utiliser le plus efficace .clipToCollection(table)(même si cela n'a pas d'importance puisque vous n'avez qu'une seule fonctionnalité).
.map(function(img){
...
}).median().clipToCollection(table);
Mettre tous ensemble:
var ast = ee.ImageCollection("ASTER/AST_L1T_003")
.filterDate('2000-01-01','2020-01-01')
.filterBounds(table)
.filter(ee.Filter.calendarRange(7,9,'month'))
.select('B0[4-9]')
.filter(ee.Filter.notNull([
'GAIN_COEFFICIENT_B04',
'GAIN_COEFFICIENT_B05',
'GAIN_COEFFICIENT_B06',
'GAIN_COEFFICIENT_B07',
'GAIN_COEFFICIENT_B08',
'GAIN_COEFFICIENT_B09',
]))
.map(function(img){
return ee.Image.cat([
img.select('B04').multiply(img.getNumber('GAIN_COEFFICIENT_B04')),
img.select('B05').multiply(img.getNumber('GAIN_COEFFICIENT_B05')),
img.select('B06').multiply(img.getNumber('GAIN_COEFFICIENT_B06')),
img.select('B07').multiply(img.getNumber('GAIN_COEFFICIENT_B07')),
img.select('B08').multiply(img.getNumber('GAIN_COEFFICIENT_B08')),
img.select('B09').multiply(img.getNumber('GAIN_COEFFICIENT_B09')),
]);
})
.median()
.clipToCollection(table);
https://code.earthengine.google.com/3ba97a7c2009def6043c614c5aeae4f7