Экспорт всех изображений в коллекцию изображений Google Earth Engine (API Google Earth Engine)
Мне нужно загрузить кучу изображений Landsat для моей диссертации. Моя проблема кажется простой, но я не имею понятия о JavaScript, и документация не помогла. Я отфильтровал коллекцию по своему региону и периоду времени и хочу отдельно экспортировать все изображения на диск. Пример коллекции:
var surfaceReflectanceL5 = ee.ImageCollection('LANDSAT/LT5_SR');
var dateSR5=surfaceReflectanceL5.filterDate('1984-01-01', '1985-01-01');
var prSR5=dateSR5.filter(ee.Filter.eq('wrs_path', 182))
.filter(ee.Filter.eq('wrs_row', 35));
Код для экспорта одного изображения:
Export.image.toDrive({
image: image1 //example, var image1='Landsat/....'
description: 'L51984_1',
scale: 30,
});
Как я могу перебрать коллекцию для экспорта всех изображений? Использование функции map(), кажется, ответ.
prSR5.map(Export.image.toDrive({
image: image,
description: 'L51984',
scale: 30,
}));
Вопрос в том, как установить для параметра изображения правильное изображение (т.е. сначала 1-е изображение, затем 2-е и т. Д., Что-то вроде 'thisImage()
') и описание к изображению (т.е. 'L51984_1'
,'L51984_2'
...).
Спасибо заранее!!!
2 ответа
Я создал функцию для выполнения аналогичного действия. Он доступен в нескольких созданных мной инструментах: https://github.com/fitoprincipe/geetools-code-editor
Вот код:
/*
* Author: Rodrigo E. Principe
* License: Apache 2.0
PURPOSE:
This function Exports all images from one Collection
PARAMETERS:
col = collection that contains the images (ImageCollection) (not optional)
folder = the folder where images will go (str) (not optional)
scale = the pixel's scale (int) (optional) (defaults to 1000) (for Landsat use 30)
type = data type of the exported image (str) (option: "float", "byte", "int", "double") (optional) (defaults to "float")
nimg = number of images of the collection (can be greater than the actual number) (int) (optional) (defaults to 500)
maxPixels = max number of pixels to include in the image (int) (optional) (defults to 1e10)
region = the region where images are on (Geometry.LinearRing or Geometry.Polygon) (optional) (defaults to the image footprint)
Be careful with the region parameter. If the collection has images
in different regions I suggest not to set that parameter
EXAMPLE:
ExportCol(myLandsatCol, "Landsat_imgs", 30)
*/
var ExportCol = function(col, folder, scale, type,
nimg, maxPixels, region) {
type = type || "float";
nimg = nimg || 500;
scale = scale || 1000;
maxPixels = maxPixels || 1e10;
var colList = col.toList(nimg);
var n = colList.size().getInfo();
for (var i = 0; i < n; i++) {
var img = ee.Image(colList.get(i));
var id = img.id().getInfo();
region = region || img.geometry().bounds().getInfo()["coordinates"];
var imgtype = {"float":img.toFloat(),
"byte":img.toByte(),
"int":img.toInt(),
"double":img.toDouble()
}
Export.image.toDrive({
image:imgtype[type],
description: id,
folder: folder,
fileNamePrefix: id,
region: region,
scale: scale,
maxPixels: maxPixels})
}
}
Я не пробовал это много, но работал в нескольких тестах, которые я сделал, например:
var batch = require('users/fitoprincipe/geetools:batch')
var col = ee.ImageCollection("LEDAPS/LE7_L1T_SR").filterDate("2002-01-01","2002-01-03");
batch.Download.ImageCollection.toDrive(col, "Folder", {scale:30});
Если у вас есть какие-либо проблемы, вы можете оставить комментарий здесь, но вы также можете опубликовать их на github.
производительность пробовал, но не работает ... ни ошибок, ни задач. Заранее спасибо!
// Digitalize your AOI: geometry
// Load the Sentinel-1 ImageCollection.
// Band selection: VV, VH & Incidende Angle (default), Mode: IW, Spatial Resolution : 10m
var imgVVVH = ee.ImageCollection('COPERNICUS/S1_GRD')
.filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV'))
.filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VH'))
.filter(ee.Filter.eq('resolution_meters', 10))
.filter(ee.Filter.eq('instrumentMode', 'IW'));
// 3. Definición de las órbitas y rango de fechas
//
// Tipo de orbita
var asc = imgVVVH.filter(ee.Filter.eq('orbitProperties_pass', 'ASCENDING'));
var desc = imgVVVH.filter(ee.Filter.eq('orbitProperties_pass', 'DESCENDING'));
//Rango de fechas
var date = ee.Filter.date('2015-03-01', '2015-04-01');
// Filter by date and geometry, create multiband image and transform to Float.
var ascArea = asc.filter(date).filterBounds(geometry).toBands().toFloat();
var descArea = desc.filter(date).filterBounds(geometry).toBands().toFloat();
/*
//6. Recortar y guardar
//
// Clip & Save
// Modificar para las diferentes trayectorias; Ascendente default
function clipySave (ascArea){// (ascArea), (descArea)
var imagenclip = ascArea.clip(geometry)
//var imagenclip = descArea .clip(geometry)
Export.image.toDrive(ascArea)
//Export.image.toDrive(descArea)
return imagenclip
}
*/
//Performing your code.............No errors, No tasks
var col= ascArea.clip(geometry);
var folder = 'Download_S1';
var ExportCol = function(col, folder, scale, type,
nimg, region) {
type = 'float';
nimg = nimg || 500;
scale = scale || 10;
//maxPixels = maxPixels || 1e10;
var colList = col.toList(nimg);
var n = colList.size().getInfo();
for (var i = 0; i < n; i++) {
var img = ee.Image(colList.get(i));
var id = img.id().getInfo();
region = region || img.geometry().bounds().getInfo()["coordinates"];
var imgtype = {"float":img.toFloat(),
"byte":img.toByte(),
"int":img.toInt(),
"double":img.toDouble()
}
Export.image.toDrive({
image:imgtype[type],
description: id,
folder: folder,
fileNamePrefix: id,
region: region,
scale: scale})
//maxPixels: maxPixels})
}
}