'Download Image from Google Earth Engine `ImageCollection` to drive
I need to download single or multiple images from the collection of ee. (preferably multiple but I can just put a single image code in a loop).
My main problem --> Download every month image from a start date to end date for a specific location (lat: "", long: "") with zoom 9
I am trying to download historical simple satellite data from the SKYSAT/GEN-A/PUBLIC/ORTHO/RGB
. This gives an image like -->
I am working on this in python
. So this code will give me the collection but I can't download the entire collection, I need to select an image out of it.
import ee
# Load a Landsat 8 ImageCollection for a single path-row.
collection = (ee.ImageCollection('SKYSAT/GEN-A/PUBLIC/ORTHO/RGB').filterDate('2016-03-01', '2018-03-01'))
#pp.pprint('Collection: '+str(collection.getInfo())+'\n')
# Get the number of images.
count = collection.size()
print('Count: ', str(count.getInfo()))
image = ee.Image(collection.sort('CLOUD_COVER').first())
Here the image
contains the <ee.image.Image at 0x23d6cf5dc70>
property but I don't know how to download it.
Also, how do I specify I want it for a specific location(lat, long) with zoom 19.
Thanks for anything
Solution 1:[1]
Insert your region of analysis (geom) by constructing a bounding box. Then, use the code below to batch download the images.
// Example geometry. You could also insert points etc.
var geom = ee.Geometry.Polygon(
[[[-116.8, 44.7],
[-116.8, 42.6],
[-110.6, 42.6],
[-110.6, 44.7]]], None, False)
for (var i = 0; i < count ; i++) {
var img = ee.Image(collection.toList(1, i).get(0));
var geom = img.geometry().getInfo();
Export.image(img, img.get('system:index').getInfo(), {crs: crs, scale: scale, region: geom});
}
Solution 2:[2]
You can download your whole images in the image collection using geetools
.
You can install with pip install geetools
.
Then, change the area, dates, and folder name(if the folder does not exist, it will be created on your drive) and execute this code.
import geetools
StartDate= ee.Date.fromYMD(2018,1,16)
EndDate = ee.Date.fromYMD(2021,10,17)
Area = ee.Geometry.Polygon(
[[[-97.93534101621628, 49.493287372441955],
[-97.93534101621628, 49.49105034378085],
[-97.93049158231736, 49.49105034378085],
[-97.93049158231736, 49.493287372441955]]])
collection =(ee.ImageCollection('SKYSAT/GEN-A/PUBLIC/ORTHO/RGB')
.filterDate(StartDate,EndDate)
.filterBounds(Area)
data_type = 'float32'
name_pattern = '{system_date}'
date_pattern = 'yMMdd' # dd: day, MMM: month (JAN), y: year
scale = 10
folder_name = 'GEE_Images'
tasks = geetools.batch.Export.imagecollection.toDrive(
collection=collection,
folder=folder_name ,
region=Area ,
namePattern=name_pattern,
scale=scale,
dataType=data_type,
datePattern=date_pattern,
verbose=True,
maxPixels=1e10
)
Or;
You can use the Earth Engine library to export images.
nimg = collection.toList(collection.size().getInfo()).size().getInfo()
for i in range(nimg):
img = ee.Image(collection.toList(nimg).get(i))
date = img.date().format('yyyy-MM-dd').getInfo()
task = ee.batch.Export.image.toDrive(img.toFloat(),
description=date,
folder='Folder_Name',
fileNamePrefix= date,
region = Area,
dimensions = (256,256),
# fileFormat = 'TFRecord',
maxPixels = 1e10)
task.start()
There are two file formats; TFRecord and GeoTIFF. The default format is GeoTIFF. Also, you can extract images with specific dimensions as shown above. If you want to download images with a scale factor, just remove the dimension line and add a scale factor instead of it.
You can read this document for more information.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | CrossLord |
Solution 2 |