Google Earth Engine谷歌地球引擎GEE對像元加以條件篩選、掩膜

瘋狂學習gis 發佈 2022-07-19T09:22:39.342591+00:00

本文是谷歌地球引擎系列教學文章的第五篇,更多GEE文章請參考專欄:GEE學習與應用_瘋狂學習GIS的博客-CSDN博客。

  本文主要對GEE中的柵格圖層像元條件篩選與掩膜操作加以介紹。

  本文是谷歌地球引擎(Google Earth Engine,GEE)系列教學文章的第五篇,更多GEE文章請參考專欄:GEE學習與應用_瘋狂學習GIS的博客-CSDN博客。

  首先,依據第二篇GEE教學博客(Google Earth Engine谷歌地球引擎GEE數據導入後篩選並顯示_瘋狂學習GIS的博客-CSDN博客)中內容,我們將Landsat 8 Collection 1 Tier 1的大氣表觀反射率TOA Reflectance產品與GMTED2010數據導入GEE;並對二者做好重命名。

  接下來,同樣依據第二篇GEE教學博客(Google Earth Engine谷歌地球引擎GEE數據導入後篩選並顯示_瘋狂學習GIS的博客-CSDN博客)中內容,將Landsat 8 Collection 1 Tier 1的大氣表觀反射率TOA Reflectance產品按照時間進行選取(具體時間範圍大家任意選擇即可),並求取對應時間範圍內的平均值;同時,將DEM圖層在地圖中加以顯示。

var landsat_2020=landsat_8.filterDate('2020-5-1','2020-5-31').mean();
Map.addLayer(dem,{},"DEM");

  接下來,依據第四篇GEE教學博客(Google Earth Engine谷歌地球引擎GEE柵格數據圖層可視化設置代碼嵌入_瘋狂學習GIS的博客-CSDN博客_柵格數據可視化)中內容,將DEM圖層可視化參數中的拉伸選項進行設置,並在得到合適的結果後將圖層像元值的範圍嵌入代碼中。

Map.addLayer(dem,{min:[-811.28],max:[1238.4]},"DEM");

  隨後執行代碼,即可看到每次運行後DEM圖層的可視化參數配置都是一致的。

  接下來,就進行圖層像元篩選的操作。在GEE中,我們可以直接通過.gt()(大於)、.lt()(小於)、.gte()(大於等於)等函數,對像元數值加以關係判別並選取。例如,通過dem.gt(1800),我們就可以篩選出像素數值大於1800的DEM像元。

var top_pixel=dem.gt(1800);
Map.addLayer(top_pixel,{},"Top");

  執行代碼,可以看到海拔較高(即大於1800m)地區像元顯示為白色,其它地區顯示為黑色。

  我們還可以對篩選後的像元加以掩膜,從而將不滿足篩選條件的像元直接刪除,在地圖中不顯示。其中,這裡還用到了第四篇GEE教學博客(Google Earth Engine谷歌地球引擎GEE柵格數據圖層可視化設置代碼嵌入_瘋狂學習GIS的博客-CSDN博客_柵格數據可視化)中調整單波段柵格圖像的可視化palette參數的內容。

var top_mask=top_pixel.mask(top_pixel)
Map.addLayer(top_mask,{palette:["63ff14"]},"Top_mask");

  執行代碼,可以看到海拔較高區域像元被篩選出並以彩色顯示,而其它地區像元則不再顯示。

  接下來,我們利用normalizedDifference()函數計算一下NDVI,並對NDVI圖層加以更進一步的像素篩選操作。關於GEE中NDVI的計算我們在後期的教學博客中會詳細講解,這裡暫時不具體介紹。

var NDVI=landsat_2020.normalizedDifference(["B5","B4"]);
Map.addLayer(NDVI,{},"NDVI");

  依據與前述內容一致的方法,首先手動調整NDVI圖層的可視化參數。

  找到合適的參數配置後,將其嵌入代碼中。

var NDVI=landsat_2020.normalizedDifference(["B5","B4"]);
Map.addLayer(NDVI,{min:[-0.2098],max:[0.5692],palette:["ff3d6a","645aff","b1ff80","fff687"]},"NDVI");

  再依據同樣的像素篩選與掩膜代碼,對NDVI圖層加以處理:

var high_NDVI=NDVI.gt(0.45);
var high_NDVI_mask=high_NDVI.mask(high_NDVI);
Map.addLayer(NDVI,{min:[-0.2098],max:[0.5692],palette:["ff3d6a","645aff","b1ff80","fff687"]},"NDVI");
Map.addLayer(high_NDVI_mask,{palette:["000000"]},"High_NDVI");

  其中,"000000"表示黑色。執行代碼可以看到,大於0.45的NDVI被顯示為黑色,其餘地區則依舊顯示為彩色。

  接下來,我們嘗試對同一個圖層進行兩個限定條件的篩選。兩個限定條件其實也很簡單,直接在第一個篩選條件後用.and()函數跟隨第二個限定條件即可。

var middle_NDVI=NDVI.gt(-0.5).and(NDVI.lt(0.5));
var middle_NDVI_mask=middle_NDVI.mask(middle_NDVI);
Map.addLayer(NDVI,{min:[-0.2098],max:[0.5692],palette:["ff3d6a","645aff","b1ff80","fff687"]},"NDVI");
Map.addLayer(middle_NDVI_mask,{palette:["000000"]},"Middle_NDVI");

  執行代碼,即可將大於-0.5而小於0.5的NDVI區域加以篩選。

  同樣的,我們還可以同時對多個不同的圖層加以像素篩選。依舊是利用.and()函數,在對第一個圖層的限定條件後跟隨對第二個圖層的限定條件即可。

var middle_NDVI=NDVI.gt(-0.5).and(NDVI.lt(0.5));
var middle_NDVI_mask=middle_NDVI.mask(middle_NDVI);
Map.addLayer(NDVI,{min:[-0.2098],max:[0.5692],palette:["ff3d6a","645aff","b1ff80","fff687"]},"NDVI");
//Map.addLayer(middle_NDVI_mask,{palette:["000000"]},"Middle_NDVI");
var across_image=NDVI.gt(0.45).and(dem.lt(1500));
var across_image_mask=across_image.mask(across_image);
Map.addLayer(across_image_mask,{palette:["000000"]},"Across_image");

  執行代碼,黑色區域即為NDVI大於0.45且海拔低於1500m的區域,完成篩選。

關鍵字: