天天看點

Google earth engine 中的投影、重采樣、尺度

本文主要翻譯自下述GEE官方幫助 https://developers.google.com/earth-engine/guides/scale https://developers.google.com/earth-engine/guides/projections https://developers.google.com/earth-engine/guides/resample#resampling

尺度(scale)指像元分辨率。GEE中進行分析計算時以影像金字塔pyramid (瓦片)形式組織,尺度由輸出(output)決定,而不是輸入(input)。

Google earth engine 中的投影、重采樣、尺度

pyramid 中給定level上的每個像素都是由下一level上2x2像素塊聚合計算出來的。對于連續值圖像(continuous valued images),pyramid 上層的像素值是下一層像素的平均值。對于離散值圖像(discrete valued images),金字塔上層的像素值是下一層像素的采樣sample(通常是左上角(top left pixel)的像素)。

pyramid 的最底層代表了圖像資料的原始分辨率,之間被不斷聚合,直到達到最頂層,一個256x256像素的tile。

當在代碼中使用圖像資料時,Earth Engine将根據指定的尺度選擇最接近的(小于或等于)pyramid level作為輸入,必要的話進行重采樣(預設使用nearest neighbor)

Earth Engine的分析尺度取決于 a "pull" basis(地圖縮放水準)。請求用于計算的輸入尺度由輸出決定。

Earth Engine的設計使我們在進行計算(computations)時很少需要擔心地圖投影(map projections)。和尺度(scale)一樣,投影(projection)發生于哪一種計算取決于 a "pull" basis(地圖縮放水準)。确切地講,輸入(input)投影由輸出(output)投影決定。輸出的投影又取決于:

函數參數設定(如 <code>crs</code>)

Code Editor中的 <code>Map</code> (投影為 maps mercator (EPSG:3857) ),當在Code Editor中展示影像時,輸入被請求為Mercator 投影

函數 <code>reproject()</code> 調用

在GEE中運作上述代碼時。如下圖所示,輸入MOD13A1為sinusoidal投影,對資料進行标準化<code>unitScale()</code>後,利用<code>Map</code>在Code Editor中展示。因為<code>Map</code>展示投影為Mercator,是以<code>unitScale()</code>運算在Mercator投影下進行

Google earth engine 中的投影、重采樣、尺度

Earth Engine中,投影由Coordinate Reference System指定 (CRS or the <code>crs</code> 很多方法中的參數)。調用 <code>projection()</code> 檢視影像投影。

隻有當計算需要指定投影時才重投影,其他情況下沒必要。隻有當輸出投影不明确時,Earth Engine才會要求指定投影和/或尺度,不明确通常由reduce包含不同投影影像的影像集合(<code>ImageCollection</code>) 導緻。

包含不同投影影像的影像集合composite或mosaic生成的影像預設投影是:WGS84(EPSG:4326), 1-degree scale 。是以使用這類影像進行計算時将會報錯<code>The default WGS84 projection is invalid for aggregations. Specify a scale or crs &amp; crs_transform.</code> 因為通常并不希望以 1-degree scale 進行aggregation ,故Earth Engine給出上述提醒為輸出指定完整的投影定義。

<code>reproject()</code>方法使調用<code>reproject()</code>方法之前的代碼中的計算在該方法指定的投影中進行,重采樣方法預設為最鄰近法。一些需要固定投影的情況如下:

Computing gradients (e.g. <code>ee.Terrain.gradient</code> or <code>ee.Terrain.slope</code>)

<code>reduceResolution</code> ,當将高分辨率像元聚合為(aggregate )低空間分辨率時

然而需要盡量避免調用<code>reproject()</code>方法。

例如,當重新投影影像并将其添加到map中。如果 <code>reproject()</code>調用中指定的尺度比地圖的縮放級别小得多,Earth Engine将請求非常小的像元尺度、非常大的空間範圍内的所有輸入。這可能會導緻一次請求太多資料并導緻錯誤。

上述代碼,輸入MOD13A1為sinusoidal投影,對資料進行标準化 <code>unitScale()</code> 後調用<code>reproject()</code>方法,是以<code>unitScale()</code>在WGS84投影下進行。最後利用<code>Map</code>在Code Editor中展示時因為<code>Map</code>展示投影為Mercator,又需要将結果重投影為Mercator。

Google earth engine 中的投影、重采樣、尺度

Earth Engine 重投影預設執行最近鄰重采樣。可以使用<code>resample()</code> 或 <code>reduceResolution()</code> 更改。具體地說,當這些方法應用于輸入圖像時,輸入圖像所需的任何重投影都将使用指定的重采樣或聚合方法完成。

<code>resample()</code>使用指定的重采樣方法(<code>'bilinear'</code> or <code>'bicubic'</code>) 用于下一次重投影。由于Earth Engine根據輸出投影請求輸入的投影,是以隐式的( implicit)重投影可能在對輸入圖像進行任何其它操作之前發生。是以,直接在輸入圖像上調用<code>resample()</code>。

Google earth engine 中的投影、重采樣、尺度

當我們的目标不是在重投影時進行重采樣,而是将小尺度像元采用不同的投影聚合為一個更大尺度的像元,需要使用此功能。這一功能适用于對比具有不同尺度的資料集,例如對比30米的Landsat資料與500米的MODIS資料。具體使用方法看下面代碼。

Google earth engine 中的投影、重采樣、尺度

聚合像元值,依據面積權重思想合成。如下圖所示,輸出像元的面積為a,與b相交的輸入像元的權重計算為b/a,與c相交的輸入像元的權重計算為c/a。

Google earth engine 中的投影、重采樣、尺度

在進行一些應用時,使用除mean reducer之外的reducer時需要注意上述合成規則避免出現錯誤。例如

例如,要計算每個像元的森林面積,使用mean reducer來計算所覆寫像素的百分比,然後乘以面積(而不是計算較小像素的面積,然後用sum reducer來将它們相加,因為這裡使用sum的話會利用上述合成規則有一個權重過程導緻不準)。

歡迎關注本人公衆号,擷取更多有深度、有内容、有趣味的資訊。

公衆号:“囚室”

Google earth engine 中的投影、重采樣、尺度

繼續閱讀