การคาดการณ์

Earth Engine ออกแบบมาเพื่อให้คุณไม่ต้องกังวลเรื่องการฉายแผนที่เมื่อทำการคำนวณ เช่นเดียวกับสเกล การฉายภาพที่การคำนวณเกิดขึ้นจะกำหนดตามพื้นฐาน "การดึง" โดยเฉพาะอย่างยิ่ง ระบบจะขออินพุตในการคาดการณ์เอาต์พุต เอาต์พุตอาจกำหนดจากพารามิเตอร์ฟังก์ชัน (เช่น crs) เครื่องมือแก้ไขโค้ดและออบเจ็กต์แผนที่ geemap (ซึ่งมีการฉายภาพ maps mercator (EPSG:3857)) หรือด้วยการเรียกใช้ reproject() เมื่อคุณ แสดงรูปภาพในเครื่องมือแก้ไขโค้ดหรือ geemap ระบบจะขอข้อมูลนำเข้าใน Mercator ของแผนที่ พิจารณาการดำเนินการต่อไปนี้ในรูปภาพ MODIS ซึ่งมีการฉายภาพแบบไซนูซอยด์

ตัวแก้ไขโค้ด (JavaScript)

// The input image has a SR-ORG:6974 (sinusoidal) projection.
var image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0);

// Normalize the image and add it to the map.
var rescaled = image.unitScale(-2000, 10000);
var visParams = {min: 0.15, max: 0.7};
Map.addLayer(rescaled, visParams, 'Rescaled');

การตั้งค่า Python

ดูข้อมูลเกี่ยวกับ Python API และการใช้ geemap เพื่อการพัฒนาแบบอินเทอร์แอกทีฟได้ที่หน้าสภาพแวดล้อม Python

import ee
import geemap.core as geemap

Colab (Python)

# The input image has a SR-ORG:6974 (sinusoidal) projection.
image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0)

# Normalize the image and add it to the map.
rescaled = image.unitScale(-2000, 10000)
vis_params = {'min': 0.15, 'max': 0.7}
m = geemap.Map()
m.add_layer(rescaled, vis_params, 'Rescaled')
m

ลำดับการดำเนินการสำหรับตัวอย่างโค้ดนี้แสดงในแผนภาพที่ 1 โปรดทราบ ว่าการฉายภาพของอินพุตจะกำหนดโดยเอาต์พุต ซึ่งก็คือการฉายภาพ maps mercator ของการแสดงแผนที่ใน โปรแกรมแก้ไขโค้ด การฉายภาพนี้จะเผยแพร่กลับผ่านลำดับการดำเนินการเพื่อให้ระบบขอข้อมูลนำเข้าใน Mercator ของแผนที่ที่ระดับซึ่งกำหนดโดยระดับการซูมของแผนที่

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

ใน Earth Engine การฉายภาพจะระบุโดยระบบอ้างอิงพิกัด (CRS หรือพารามิเตอร์ crs ของหลายๆ วิธี) คุณตรวจสอบการฉายภาพ ได้โดยเรียกใช้ projection() ในภาพนั้น

ตัวแก้ไขโค้ด (JavaScript)

var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select(0);
print('Projection, crs, and crs_transform:', image.projection());
print('Scale in meters:', image.projection().nominalScale());

การตั้งค่า Python

ดูข้อมูลเกี่ยวกับ Python API และการใช้ geemap เพื่อการพัฒนาแบบอินเทอร์แอกทีฟได้ที่หน้าสภาพแวดล้อม Python

import ee
import geemap.core as geemap

Colab (Python)

image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select(0)
display('Projection, crs, and crs_transform:', image.projection())
display('Scale in meters:', image.projection().nominalScale())

โปรดทราบว่าการเรียกใช้ nominalScale() ใน ee.Projection ที่ projection() ส่งคืนจะช่วยให้คุณกำหนดความละเอียดดั้งเดิมของรูปภาพได้ ความละเอียดดั้งเดิมคือมาตราส่วนพิกเซลที่กำหนดในหน่วยเมตรของระดับต่ำสุดของ พีระมิดรูปภาพ เนื่องจากแต่ละแถบของรูปภาพอาจมี การปรับขนาดและ/หรือการฉายภาพที่แตกต่างกัน หากคุณเรียกใช้ projection() ในรูปภาพ ที่มีอย่างน้อย 1 แถบซึ่งมีการฉายภาพไม่เหมือนกับแถบอื่นๆ คุณอาจเห็นข้อผิดพลาด เช่น

การฉายเริ่มต้น

โดยทั่วไปแล้ว คุณไม่จำเป็นต้องระบุการฉายภาพ เว้นแต่คุณต้องการให้การคำนวณเกิดขึ้นในการฉายภาพที่เฉพาะเจาะจง Earth Engine จะกำหนดให้คุณระบุการฉายภาพและ/หรือมาตราส่วนสำหรับเอาต์พุตที่ไม่ชัดเจนเท่านั้น ความคลุมเครืออาจเกิดจาก การลดImageCollectionที่มีรูปภาพที่มีการฉายภาพที่แตกต่างกัน (เช่น การสร้างคอมโพสิต) รูปภาพที่เป็น ภาพคอมโพสิตหรือภาพโมเสกของรูปภาพอินพุตที่มีการฉายภาพต่างกันจะมีการฉายภาพเริ่มต้น ซึ่งคือ WGS84 ที่มีสเกล 1 องศา เช่น

ตัวแก้ไขโค้ด (JavaScript)

var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var mosaic = collection.filterDate('2018-01-01', '2019-01-01').mosaic();
print(mosaic.projection());

การตั้งค่า Python

ดูข้อมูลเกี่ยวกับ Python API และการใช้ geemap เพื่อการพัฒนาแบบอินเทอร์แอกทีฟได้ที่หน้าสภาพแวดล้อม Python

import ee
import geemap.core as geemap

Colab (Python)

collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
mosaic = collection.filterDate('2018-01-01', '2019-01-01').mosaic()
display(mosaic.projection())

หากพยายามใช้รูปภาพเช่นนี้ในการคำนวณ คุณอาจเห็นข้อผิดพลาด เช่น

โดยทั่วไปแล้ว การรวมที่ระดับ 1 องศาไม่เป็นที่ต้องการหรือไม่ได้ตั้งใจไว้ ดังนั้น Earth Engine จึงส่งการแจ้งเตือนที่เป็นมิตรนี้เพื่อระบุเอาต์พุตให้ครบถ้วน

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

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

หากรูปภาพ Display ที่เพิ่มประสิทธิภาพแล้วไม่เพียงพอ การคำนวณใน การฉายภาพที่เฉพาะเจาะจงสามารถบังคับได้โดยการฉายภาพเอาต์พุตซ้ำตามที่อธิบายไว้ในส่วนต่อไปนี้

การฉายซ้ำ

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

ตัวแก้ไขโค้ด (JavaScript)

// Some projection that is suitable for your area of interest.
var proj = ee.Projection(...);
var output = collection.reduce(...).reproject(proj);

การตั้งค่า Python

ดูข้อมูลเกี่ยวกับ Python API และการใช้ geemap เพื่อการพัฒนาแบบอินเทอร์แอกทีฟได้ที่หน้าสภาพแวดล้อม Python

import ee
import geemap.core as geemap

Colab (Python)

# Some projection that is suitable for your area of interest.
proj = ee.Projection(...)
output = collection.reduce(...).reproject(proj)

กรณีที่ต้องมีการคาดการณ์ที่แน่นอนมีดังนี้

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

หากเอาต์พุตสุดท้ายอยู่ในการฉายภาพที่แตกต่างจากการฉายภาพที่ระบุไว้ใน reproject()การเรียกใช้ ระบบจะทำการฉายภาพอีกครั้ง นี่เป็น อีกเหตุผลหนึ่งที่ควรระมัดระวังในการใช้ reproject() ในโค้ด พิจารณา ตัวอย่างต่อไปนี้ ซึ่งบังคับให้มีการฉายภาพ MODIS ใหม่เป็น WGS84 ก่อน แล้วจึงฉายภาพใหม่เป็น maps mercator เพื่อแสดงในแผนที่ Code Editor

ตัวแก้ไขโค้ด (JavaScript)

// The input image has a SR-ORG:6974 (sinusoidal) projection.
var image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0);

// Operations *before* the reproject call will be done in the projection
// specified by reproject().  The output results in another reprojection.
var reprojected = image
    .unitScale(-2000, 10000)
    .reproject('EPSG:4326', null, 500);
Map.addLayer(reprojected, {min: 0.15, max: 0.7}, 'Reprojected');

การตั้งค่า Python

ดูข้อมูลเกี่ยวกับ Python API และการใช้ geemap เพื่อการพัฒนาแบบอินเทอร์แอกทีฟได้ที่หน้าสภาพแวดล้อม Python

import ee
import geemap.core as geemap

Colab (Python)

# The input image has a SR-ORG:6974 (sinusoidal) projection.
image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0)

# Operations *before* the reproject call will be done in the projection
# specified by reproject(). The output results in another reprojection.
reprojected = image.unitScale(-2000, 10000).reproject('EPSG:4326', None, 500)
m = geemap.Map()
m.add_layer(reprojected, {'min': 0.15, 'max': 0.7}, 'Reprojected')
m

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

การฉายภาพใหม่
รูปที่ 2 โฟลว์ชาร์ตของการดำเนินการที่สอดคล้องกับการฉายภาพ MODIS ใหม่ในแผนที่ Code Editor เส้นโค้งแสดงถึงการไหลของข้อมูลไปยัง การฉายซ้ำ ซึ่งก็คือการฉายและมาตราส่วนเอาต์พุต