Google earth engine批量下載MODIS數據並導出


下載MODIS數據的時候,有時候只是需要研究區一個小范圍的數據,但是直接在官網下載還需要下載對應范圍所在的分幅數據,這個量或許比較大,感覺比較麻煩

因此這里記錄一下利用GEE批量下載的過程(PS:還是有個穩定的VPN比較好啊 從谷歌雲盤把數據下載下來)

准備:

研究區矢量邊界shp文件

明確要下載的MODIS數據

var fc = ee.FeatureCollection(“users/test/Qinling”)//研究區矢量
Map.centerObject(fc,4)
print(imageCollection)
var collection = ee.ImageCollection('MODIS/006/MOD11A2').filterDate('2000-01-01', '2021-03-11').select(1).filterBounds(fc)
print(collection)
function exportImageCollection(imgCol) { 
  var indexList = imgCol.reduceColumns(ee.Reducer.toList(), ["system:index"]) 
                        .get("list"); 
  indexList.evaluate(function(indexs) { 
    for (var i=0; i<indexs.length; i++) { 
      var image = imgCol.filter(ee.Filter.eq("system:index", indexs[i])).first(); 
      image = image.toInt16(); 
      Export.image.toDrive({ 
        image: image.clip(fc.geometry().bounds()), 
        description: indexs[i], 
        fileNamePrefix: indexs[i], 
        region: fc.geometry().bounds(), 
        scale: 500, 
        crs: "EPSG:4326",   
        folder: "LST",//谷歌雲盤中的文件夾名稱
        maxPixels: 1e13 
      }); 
    } 
  }); 
} 
exportImageCollection(collection);

//COLLECTION導出 備選嘗試方案
batch.Download.ImageCollection.toDrive(collection,"result", {
scale: 30,
region: roi,                //研究區域
maxPixels:34e10,            //此處值設置大一些,防止溢出
type:"int16" })

 

 

注意:

image = image.toInt16(); 這句話的作用是將image影像的波段都強制轉為Int16類型數據,這么做的原因是使用toDrive()方法影像的波段類型必須是一致的,這點和導出到Asset不太一樣

region參數必須要設置,同時需要注意的是它的類型是geometry,不是featureCollection。如果我們用的是矢量集合,那么一般做法是:

featureCollection.geometry().bounds()作為region的參數  或者table.union().geometry() 還沒有試過

maxPixels必須設置,因為我們在導出大范圍的影像時候會出現默認參數過小導致導出失敗(默認參數是1e8)

crs推薦設置為EPSG:4326

關於投影與重采樣問題:

 https://blog.csdn.net/weixin_29876887/article/details/112708491

這時候會發現數量很多的話需要點很多下run按鈕

因此F12(谷歌瀏覽器),在控制台中輸入以下代碼:

function runTaskList() {
    var tasklist = document.getElementsByClassName('awaiting-user-config');
    for (var i = 0; i < tasklist.length; i++)
        tasklist[i].children[2].click();
}
function confirmAll() {
    var ok = document.getElementsByClassName('goog-buttonset-default goog-buttonset-action');
    for (var i = 0; i < ok.length; i++)
        ok[i].click();
}
runTaskList();
confirmAll();

 

 

參考:

https://www.seibert.cn/blog/38 

https://blog.csdn.net/shi_weihappy/article/details/100142417

https://blog.csdn.net/weixin_40450867/article/details/104578379

https://blog.csdn.net/weixin_40450867/article/details/104578379

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM