หากต้องการรวบรวมข้อมูลในพร็อพเพอร์ตี้ของ FeatureCollection
ให้ใช้ featureCollection.reduceColumns()
เช่น หากต้องการตรวจสอบพร็อพเพอร์ตี้พื้นที่ในลุ่มน้ำ FeatureCollection
โค้ดนี้จะคํานวณค่าเฉลี่ยความคลาดเคลื่อนกำลังสอง (RMSE) เทียบกับพื้นที่ที่ Earth Engine คํานวณ
เครื่องมือแก้ไขโค้ด (JavaScript)
// Load watersheds from a data table and filter to the continental US. var sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06') .filterBounds(ee.Geometry.Rectangle(-127.18, 19.39, -62.75, 51.29)); // This function computes the squared difference between an area property // and area computed directly from the feature's geometry. var areaDiff = function(feature) { // Compute area in sq. km directly from the geometry. var area = feature.geometry().area().divide(1000 * 1000); // Compute the difference between computed area and the area property. var diff = area.subtract(ee.Number.parse(feature.get('areasqkm'))); // Return the feature with the squared difference set to the 'diff' property. return feature.set('diff', diff.pow(2)); }; // Calculate RMSE for population of difference pairs. var rmse = ee.Number( // Map the difference function over the collection. sheds.map(areaDiff) // Reduce to get the mean squared difference. .reduceColumns(ee.Reducer.mean(), ['diff']) .get('mean') ) // Compute the square root of the mean square to get RMSE. .sqrt(); // Print the result. print('RMSE=', rmse);
import ee import geemap.core as geemap
Colab (Python)
# Load watersheds from a data table and filter to the continental US. sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06').filterBounds( ee.Geometry.Rectangle(-127.18, 19.39, -62.75, 51.29) ) # This function computes the squared difference between an area property # and area computed directly from the feature's geometry. def area_diff(feature): # Compute area in sq. km directly from the geometry. area = feature.geometry().area().divide(1000 * 1000) # Compute the difference between computed area and the area property. diff = area.subtract(ee.Number.parse(feature.get('areasqkm'))) # Return the feature with the squared difference set to the 'diff' property. return feature.set('diff', diff.pow(2)) # Calculate RMSE for population of difference pairs. rmse = ( ee.Number( # Map the difference function over the collection. sheds.map(area_diff) # Reduce to get the mean squared difference. .reduceColumns(ee.Reducer.mean(), ['diff']).get('mean') ) # Compute the square root of the mean square to get RMSE. .sqrt() ) # Print the result. display('RMSE=', rmse)
ในตัวอย่างนี้ โปรดทราบว่าผลลัพธ์ของ reduceColumns()
คือพจนานุกรมที่มีคีย์ ‘mean’
หากต้องการหาค่าเฉลี่ย ให้แคสต์ผลลัพธ์ของ dictionary.get()
เป็นตัวเลขด้วย ee.Number()
ก่อนพยายามเรียกใช้ sqrt()
กับผลลัพธ์นั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างข้อมูลเสริมใน Earth Engine ได้ที่บทแนะนำนี้
หากต้องการวางซ้อนองค์ประกอบบนภาพ ให้ใช้ featureCollection.reduceRegions()
เช่น หากต้องการคํานวณปริมาณน้ำฝนในลุ่มน้ำของสหรัฐอเมริกาภาคพื้นทวีป ให้ใช้ reduceRegions()
ตามด้วย map()
เครื่องมือแก้ไขโค้ด (JavaScript)
// Load an image of daily precipitation in mm/day. var precip = ee.Image(ee.ImageCollection('NASA/ORNL/DAYMET_V3').first()); // Load watersheds from a data table and filter to the continental US. var sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06') .filterBounds(ee.Geometry.Rectangle(-127.18, 19.39, -62.75, 51.29)); // Add the mean of each image as new properties of each feature. var withPrecip = precip.reduceRegions(sheds, ee.Reducer.mean()) .filter(ee.Filter.notNull(['prcp'])); // This function computes total rainfall in cubic meters. var prcpVolume = function(feature) { // Precipitation in mm/day -> meters -> sq. meters. var volume = ee.Number(feature.get('prcp')) .divide(1000).multiply(feature.geometry().area()); return feature.set('volume', volume); }; var highVolume = withPrecip // Map the function over the collection. .map(prcpVolume) // Sort descending. .sort('volume', false) // Get only the 5 highest volume watersheds. .limit(5) // Extract the names to a list. .reduceColumns(ee.Reducer.toList(), ['name']).get('list'); // Print the resulting FeatureCollection. print(highVolume);
import ee import geemap.core as geemap
Colab (Python)
# Load an image of daily precipitation in mm/day. precip = ee.Image(ee.ImageCollection('NASA/ORNL/DAYMET_V3').first()) # Load watersheds from a data table and filter to the continental US. sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06').filterBounds( ee.Geometry.Rectangle(-127.18, 19.39, -62.75, 51.29) ) # Add the mean of each image as new properties of each feature. with_precip = precip.reduceRegions(sheds, ee.Reducer.mean()).filter( ee.Filter.notNull(['prcp']) ) # This function computes total rainfall in cubic meters. def prcp_volume(feature): # Precipitation in mm/day -> meters -> sq. meters. volume = ( ee.Number(feature.get('prcp')) .divide(1000) .multiply(feature.geometry().area()) ) return feature.set('volume', volume) high_volume = ( # Map the function over the collection. with_precip.map(prcp_volume) # Sort descending and get only the 5 highest volume watersheds. .sort('volume', False).limit(5) # Extract the names to a list. .reduceColumns(ee.Reducer.toList(), ['name']).get('list') ) # Print the resulting FeatureCollection. display(high_volume)
ดูข้อมูลเพิ่มเติมเกี่ยวกับการลดคอลเล็กชันองค์ประกอบได้ที่สถิติของคอลัมน์ FeatureCollection และการเปลี่ยนรูปแบบจากเวกเตอร์เป็นแรสเตอร์