ทำความเข้าใจ TileScale ใน Earth Engine

Sep 05 2020

ในหลายฟังก์ชั่นโลกเครื่องยนต์เช่นImage.reduceRegionsหรือมีข้อโต้แย้งที่เรียกว่าImage.sample tileScaleโดยทั่วไปเอกสาร API ตีความว่า:

ปัจจัยการปรับขนาดที่ใช้เพื่อลดขนาดไทล์การรวม การใช้ tileScale ที่ใหญ่ขึ้น (เช่น 2 หรือ 4) อาจเปิดใช้งานการคำนวณที่มีหน่วยความจำไม่เพียงพอด้วยค่าเริ่มต้น

แม้ว่าสิ่งนี้จะได้รับการบันทึกไว้เป็นอย่างดี แต่ฉันก็ยังไม่เข้าใจผลของ tileScale ที่มีต่อผลลัพธ์สุดท้ายของการคำนวณ

  • อะไรtileScaleทำอย่างไร
  • ไม่tileScaleชิ้นภาพก่อนที่จะดำเนินการคำนวณหรือไม่
  • มีผลกับเครื่องชั่งหรือไม่?

ด้านล่างนี้เป็นตัวอย่างโค้ดที่ใช้งานได้ ( ลิงก์โค้ด )

// Getting the image of the region of interest
var roi = ee.Geometry.Point([1.864578244475683, 14.492292970253338]);
var image = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
                .filterDate('2019-01-01', '2019-01-31')
                .filterBounds(roi)
                .select(['B5', 'B4', 'B3'])
                .toBands()
                .rename(['B5', 'B4', 'B3']);
                
// Checking it out
print(image);

// Define the visualization parameters.
var vizParams = {
  bands: ['B5', 'B4', 'B3'],
  min: 0,
  max: 0.5,
  gamma: [0.95, 1.1, 1]
};

// Center the map and display the image.
Map.centerObject(image, 9);
Map.addLayer(image, vizParams, 'false color composite');

// Computing the band means at 30 meters and tileScale of 1: (Computation succeeded)
var control = image.reduceRegion({
  reducer:ee.Reducer.mean(),
  scale    :  30,
  tileScale:   1, 
  maxPixels:1e13
});

print(control, 'first scenario');

// Computing the band means at 5 meters and tileScale of 1: (Computation succeeded)
var scenario2 = image.reduceRegion({
  reducer:ee.Reducer.mean(),
  scale:        5,
  tileScale:    1, 
  maxPixels: 1e13
});

print(scenario2, 'second scenario');

// Computing the band means at 5 meters and tileScale of 16: (Computation Error: Computation timed out.)
var scenario3 = image.reduceRegion({
  reducer:ee.Reducer.mean(),
  scale:        5,
  tileScale:   16, 
  maxPixels: 1e13
});

print(scenario3, 'third scenario');

คำตอบ

3 KevinReid Sep 05 2020 at 00:13

TileScale ทำอะไร? tileScale จะแบ่งภาพก่อนทำการคำนวณหรือไม่

ใช่.

เมื่อใดก็ตามที่คุณดำเนินการเช่นreduceRegionโดยที่คุณคำนวณค่าที่ลดลงอย่างน้อยหนึ่งค่าออกจากรูปภาพพิกเซลของภาพที่เข้าไปในตัวลดจะคำนวณเป็นไทล์ (เช่นเดียวกับไทล์ที่ใช้สำหรับการดูบนแผนที่) ตัวลดคือ นำไปใช้กับกระเบื้องพิกเซลเหล่านั้นเพื่อสร้างผลลัพธ์ระดับกลางจากนั้นผลลัพธ์ระดับกลางเหล่านั้นจะถูกรวมเข้าด้วยกัน

การตั้งค่าที่สูงขึ้นtileScaleจะช่วยลดขนาดของกระเบื้องเหล่านั้น ซึ่งหมายความว่า:

  • แต่ละไทล์ใช้หน่วยความจำน้อยลง (ดังนั้นการคำนวณจึงมีโอกาสน้อยที่หน่วยความจำจะหมด)
  • มีกระเบื้องจำนวนมากซึ่งใช้เวลาในการตั้งค่ามากกว่า (ดังนั้นการคำนวณจะใช้เวลานานขึ้น)

มีผลกับเครื่องชั่งหรือไม่?

หากคุณหมายถึงความละเอียด / ขนาดพิกเซลของภาพ: ไม่ หากการคำนวณสำเร็จผลลัพธ์ควรจะเหมือนกันเสมอโดยไม่คำนึงถึงtileScale(ยกเว้นความแตกต่างเล็กน้อยเนื่องจากลำดับของการดำเนินการทศนิยม)