GEE學習筆記 三十一:地圖載入影像
來自專欄 GEE 開發14 人贊了文章
看到標題很多小夥伴可能非常疑惑,在GEE工作空間中載入影像是非常簡單的一件事情也就一句話而已:
Map.addLayer(image, {}, 『layerName』);
確實沒有錯,就是這一句話。但是有個小夥伴問了我一個問題,他想要載入一個ImageCollection中的所有影像都載入到地圖上那該如何做?
這個問題對於某些人來講非常簡單,但是對於一些初學者還是比較有難度,這裡就簡單分享一下解決思路供大家參考。
- 最基本方法使用for循環
要解決這個問題,通常第一反應就是使用for循環,結果怎麼樣呢?直接上代碼查看結果。
var roi = /* color: #d63000 */ee.Geometry.Point([-98.96484375, 39.16414104768743]);var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT_TOA");var rawCol = l8.filterDate("2018-1-1", "2018-6-1") .filterBounds(roi); //method 1 var sCol = rawCol.toList(10);var num = sCol.size();var cnum = num.getInfo();for (var i=0; i<cnum; i++) { var img = ee.Image(sCol.get(i)); Map.addLayer(img, {bands:["B4", "B3", "B2"], min:0, max:0.3}, "1layer-"+i);}
從結果上看應該是可以的
2. 循環升級版使用非同步方式循環
考慮到直接使用for循環是非常不推薦的方式,而且最為重要的是第一種方法使用了getInfo()方法,這個方法是非常非常建議不要使用的方法。靈光一現,是否可以使用非同步方式來循環相關數據,示例如下:
var roi = /* color: #d63000 */ee.Geometry.Point([-98.96484375, 39.16414104768743]);var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT_TOA");var rawCol = l8.filterDate("2018-1-1", "2018-6-1") .filterBounds(roi); //method 2var rawLayer = null;var computedIds = rawCol.reduceColumns(ee.Reducer.toList(), [system:index]) .get(list);computedIds.evaluate(function(ids) { print("computedIds ", ids); for (var i=0; i<ids.length; i++) { var key = ids[i]; var image = ee.Image(rawCol.filter(ee.Filter.eq("system:index", key)).first()); Map.addLayer(image, {bands:["B4", "B3", "B2"], min:0, max:0.3}, key); }});
3. 必殺大招
喜聞樂見放大招階段到了,不知道各位小夥伴想到沒有,上面兩種方法最大的問題是什麼?聰明的小夥伴一定想到了,是圖像數量的問題。測試的時候我只是載入了十幾張圖片,那麼就是載入了十幾個圖層。問題來了,我們平時在搜索ImageCollection時候一般都是幾百張的影像,那可是沒辦法一次性全部載入在地圖上的。
不多廢話,直接上解決方案:每次載入一張影像(一個圖層),通過按鈕控制載入刪除圖層。
var roi = /* color: #d63000 */ee.Geometry.Point([-98.96484375, 39.16414104768743]);var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT_TOA");var rawCol = l8.filterDate("2018-1-1", "2018-6-1") .filterBounds(roi);//method 3var rawLayer = null;var computedIds = rawCol.reduceColumns(ee.Reducer.toList(), [system:index]) .get(list);computedIds.evaluate(function(ids) { print("computedIds ", ids); var total = ids.length; var showTitle = ui.Label("", {fontWeight: bold}); var curIndex = 0; var bPlus = ui.Button("+", function() { curIndex += 1; if (curIndex >= total) { curIndex = 0; } showTitle.setValue(ids[curIndex]); showSelectRawImage(ids[curIndex]); }); var bReduce = ui.Button("-", function() { curIndex -= 1; if (curIndex < 0) { curIndex = total - 1; } showTitle.setValue(ids[curIndex]); showSelectRawImage(ids[curIndex]); }); showTitle.setValue(ids[curIndex]); showSelectRawImage(ids[curIndex]); var main = ui.Panel({ widgets: [ ui.Label(click "+" or "-" to move time window, {fontWeight: bold}), bPlus, bReduce, ui.Label("select date: ", {fontWeight: bold}), showTitle ], style: {width: 200px, padding: 8px} }); ui.root.insert(0, main); });function showSelectRawImage(key) { if (rawLayer !== null) { Map.remove(rawLayer); } print("show raw image id is: " + key); var image = ee.Image(rawCol.filter(ee.Filter.eq("system:index", key)).first()); rawLayer = Map.addLayer(image, {bands:["B4", "B3", "B2"], min:0, max:0.3}, key);}Map.centerObject(roi, 7);
運行結果:
點擊+、-號可以切換圖像,同時左側也顯示了載入的影像index。
最後一種方法在實際應用中可以非常靈活,通過這種方式可以非常方便觀察查看不同的ImageCollection中所有影像
大家如果有問題需要彼此交流,可以微信直接聯繫我。加好友留言請加上「GEE」或者「知乎」,這樣我就知道是關於GEE的道友??。
微信號:shi_weihappy
昵稱:無形的風
推薦閱讀:
※為什麼 Google Earth 上不同水域的顏色會差別那麼大?
※長城是唯一可以在太空看見的人造建築物嗎,我為什麼在Google Earth上找不到?
※這個星系/星雲/星球到底是什麼?RA 13h 29m 54s Dec -6°35′37″ (附高清圖,有點像貪吃蛇)
※谷歌地球中的 3D 模型是怎樣生成的生成的?
TAG:GoogleEarth | 遙感圖像處理 | 衛星遙感 |