【Google Earth Engine編程語言學習筆記】image、imageCollection


一、【image】

(1)創建

1.GEE自帶

https://developers.google.com/earth-engine/datasets/catalog

主要有landsat、sentinel哨兵、srtm高程、land cover土地利用

2.用戶上傳

3.ee.image()  ee.image.constant()感覺沒太多用處,建立一個圖像

4.ee.Image.pixelLonLat()創建一個沒有分辨率的柵格圖像,這個柵格圖像任意點的屬性值為經緯度

(2)編輯

1.image.mask()掩膜

var 被掩膜裁減圖形的名稱=ee.Image(圖形的路徑)
var 掩膜的名稱=ee.Image(圖形的路徑).select(屬性字段).eq.(1)//選擇屬性字段值等於1的值作為掩膜
var 被裁減過后的圖形名稱=被掩膜裁減圖形的名稱.mask(掩膜的名稱)
Map.addLayer(被裁減過后的圖形名稱)//將被裁減過后的圖形添加到地圖中
 

 2.image.clip()裁減

var 被裁減圖形的名稱=ee.Image(圖形的路徑)
var 矢量邊界=ee.FeatureCollection(圖形的路徑).filterBounds(ee.Geometry.point([經度,緯度])//選擇該點所在的矢量邊界為裁減邊界
var 被裁減過后的圖形名稱=被掩膜裁減圖形的名稱.clip()
Map.addLayer(被裁減過后的圖形名稱)//將被裁減過后的圖形添加到地圖中

3.image.select()選擇波段

var 需要挑選的波段=導入的圖像數據.select('波段名稱')

 4.image.slice()選擇波段

var 挑選的波段=導入的圖像數據.slice(起始波段號,終止波段號)

 如slice(2,5),即挑選出第3、4、5波段。

4.image.addBands()添加波段

var 波段1=圖像.select('B1')
var 波段2=圖像.select('B2')
var 波段12=波段1.addBands('波段2')

5. image.reproject(投影的信息)圖像投影

6.image.rgbtohsv()RGB轉為HSV  image.hsvtorgb()HSV轉為RGB

7.image.uint8()數據轉換對單波段圖像進行  int  long  float  double。。。。

8.image.cast()對多波段的數據進行轉換

var img_cast=img.cast({'B3':'double','B4':'double','B5':'double',},['B5','B4''B3'])

9.image.set()設置屬性值    image.setMulti({ })多字段設置屬性值

10.image.remap([轉換之前的])對屬性方面的重分類

11.image.where(圖像.lt(4000),0)對空間層面的重分類,將圖像值小於4000的賦值為0

12.image.metadata('前',‘命名后’)

13.image.clamp(450,800)掐斷操作,對於450以下,800以上的值全部賦值為0

14.image.uintScale(-238,5268)將最小值到最大值的區間變為0-1

15.image.interpolate(x,y,超出所提供功能范圍的點的方法,包括'extrapolate', 'clamp', 'mask' or 'input')將輸入圖像第一個波段中的每個點插值到x和y數組指定的分段線性函數中。

原始均勻的拉伸顯示效果就會變成分段的顯示效果

16.image.eq/neq/gt/gte/lt/lte進行比較操作,等於,不等於,大於,大於等於,小於,小於等於。。。、

17.Image.and()/or() 對不同波段進行運算

18.image.abs()/mod()/round()/floor()/ceil()/sqrt()/exp/log()/log10()

19.image.add/subtract/multiply/divide()可以進行波段運算

20.image.expression('波段表達式',{‘NIR’:img.select('B5'),‘RED’:img.select('B4'),‘BLUE’:img.select('B2')})就會計算出通過波段表達式表達出來的值。

21.image.sin()/cos()/tan()......

22.image.bitwiseAnd/bitwiseOr()二進制計算

(3)地形

1.image.derivative()對每個像元值進行微分操作。

2.ee.Terrain.products()或ee.Algorithms.terrain圖像的表面分析函數,然后會得出三個波段,分別為陰影、坡度、坡向

var DEM=ee.image('...')
var DEM_pro=ee.Terrain.products(DEM)
Map.addLayer(DEM)
Map.addLayer(DEM_pro,{bands:['slope']})
Map.addLayer(DEM_pro,{bands:['aspect']})
Map.addLayer(DEM_pro,{bands:['hillshade']})

 

3.ee.Terrain.hillshadow()或ee.Algorithms.Hillshadow()生成表面紋理,在生成紋理前需要設置投影,坡度之間的距離為米,而不是經緯度

4.ee.Terrain.fillMinima()將圖像最低處河谷位置填充成類似盆地的效果

(4)紋理

1.image.entropy()熵值操作,高程變化快的地方熵值大

2.image.glcmTexture()紋理操作,圖像識別

3.image.zeroCrossing()對圖像海拔0值的過度,在此之前需要減掉起始值

4.ee.Algorithms.CannyEdgeDetector()檢測紋理邊界

(5)鄰域

1.image.focal_max最大值/focal_mean平均值/focal_median中間值/focal_min最小值/focal_mode模

指定一個搜索半徑,發現在這個搜索半徑中符合搜索定義,則將這個值定義為該鄰域的值

如image.focal_max(5,'circel','pixels')用圓形來搜索,將每個鄰域的值替換為該鄰域的最大值

2.image.convolve()定義一個矩陣,相當於卷積,把圖像模糊化和銳化

3.image.reduceNeighborhood()

var DEM=ee.image('...')
var DEM_nei=DEM..reduceNeighborhood(ee.Reducer.mean(),ee.Kernel.circle(4))//相當於做了均值濾波

(6)轉換

1.image.reduceToVectors()柵格轉矢量

2.image.ImageCollection()將單個柵格轉為柵格數據集

3.image.ToArray()將多波段值轉化為array圖像

   ArrayImage.arrayFlatten()將array圖像轉化為多波段圖像,需要對每個波段進行命名

柵格圖像轉化為矢量圖像很重要,服務於將原來的空間信息轉化為連續的事件信息,對時間信息進行擬合

(7)其他

1.image.reduceRegion()對某個區域進行數學統計

2.image.distance()相當於柵格的緩沖區分析

3.Export.image().toDrive()輸出保存

輸入各種參數及保存路徑

二、【imageCollection】

(1)創建

1.ee.ImageCollection(輸入柵格數據集的名稱路徑)    ee.ImageCollection.load()

而通常是在搜索欄中輸入柵格關鍵字,點擊import

(2)篩選

1.filterMetadata(雲層覆蓋量,小於,0.1)通過基本屬性篩選,等同於ee.filter.Metadata

2.filterBounds(某地的行政邊界.geometry)通過位置篩選,等同於ee.filter.Bounds

3.filterDate(起始時間,終止時間)通過時間篩選,等同於ee.filter.Date

4.limit(10)選擇前10條數據集

5.select()與image中的select大同小異

select(['B3','B4','B5'](選擇的波段),['NIR','R','G'](重命名))注意選擇出來的波段需要有相同的屬性

6.distinct()類似於featureCollection中的distinct

對原始數據中重復的數據進行刪除

7.combine()將兩個數據及合並為一個,從一個數據中選擇兩個波段,進行組合,組合后不再是同一個圖像的兩個波段,成為了兩個獨立的柵格圖像

8.uint8數據結構變化

9.set對屬性信息進行更改;setMulti對多個屬性信息進行更改

(3)求值

1.mosaic()圖像鑲嵌

var img1=ee.image(' ..')
var img2=ee.image(' ..')
var img=ee.imageCollection([img1,img2])
var img_mos=img.mosaic()

imageCollection([img1,img2])具有兩個不同的圖像
但是
mosaic后變成一個圖像。

2.and/or,波段之間的且和或

sum求和/product求連乘積/max求最大/min最小/mode模/median中間值/count計數,首先得選擇一些自己要計算的波段,然后對每個波段進行計算

(4)轉換

1. first()會返回imageCollection中第一個圖像

var L8=ee.imageCollection('...').filterBounds(ee.Geometry.point(經度,緯度)).filterDate(起止時間).select('B[3-5]').sort('date_acquired');
var L8_1=L8.first()

2.toList()將圖像波段轉化為list格式,通過get命令獲取第幾個波段

3.toArray()也可以轉化為array圖像

4.map()

var L8=ee.imageCollection('...').filterBounds(ee.Geometry.point(經度,緯度)).filterDate(起止時間).select('B[4,5]').limit(3);
function addndvi(image){
var ndvi=image.normalizedDifference(['B4','B5'])
return image.addBands(ndvi)
}
var L8_ndvi=L8.map(addndvi)

 


免責聲明!

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



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