GEE10:Earth Engine Reducers的图像矢栅转换及区域统计

1. Raster to Vector Conversion:image.reduceToVectors()

在这里插入图片描述
将Image的栅格格式转换为FeatureCollection的矢量格式
在这里插入图片描述

// Reducers: Image.reduceToVectors()

// China boundary.
var china = countries.filter(ee.Filter.eq('ADM0_NAME', 'China'))

// Input 2012 nightlights image, clipped to China border
var nl2012 = ee.Image('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182012')
  .select('stable_lights')
  .clip(china);

// Arbitrary thresholds on the 6-bit nightlights image
var zones = nl2012.gt(30).add(nl2012.gt(55)).add(nl2012.gt(62));
zones = zones.mask(zones.neq(0));

// Convert zones of the thresholded nightlights to vectors
var vectors = zones.addBands(nl2012).reduceToVectors({
  geometry: china,
  crs: nl2012.projection(),
  scale: nl2012.projection().nominalScale(),
  geometryType: 'polygon',
  eightConnected: false,
  labelProperty: 'zone',
  reducer: ee.Reducer.mean(),
  // timeout done
  maxPixels: 1e10,
  tileScale: 2
});

// Display the result
Map.setCenter(117.6225, 39.712, 9);
Map.addLayer(zones, {min: 1, max: 3, palette: ['0000FF', '00FF00', 'FF0000']}, 'raster');
var display = ee.Image(0).mask(ee.Image(0)).paint(vectors, '000000', 3);
Map.addLayer(display, {palette: '000000'}, 'vectors');

在这里插入图片描述
在这里插入图片描述

2. Vector to Raster Conversion:featureCollection.reduceToImage()

在这里插入图片描述

// Reducers: FeatureCollection.reduceToImage()
var tiger = ee.FeatureCollection("TIGER/2010/Blocks");

Map.addLayer(tiger, {}, 'tiger')

var popImage = tiger.reduceToImage({
    properties: ['pop10'], 
    reducer: ee.Reducer.first()
});


Map.addLayer(popImage, {min: 0, max: 1000, palette: ['blue', 'green', 'red']}, 'popImage');

在这里插入图片描述
在这里插入图片描述

3. Grouped reductions

对图像的属性归为一个组,以组的形式进行显示,并且将属性按照州编码就行归类,显示每个州的总属性。

// To compute the total population and number of housing units in each state, 
// this example groups the output of a reduction of a census block FeatureCollection.

// Load a collection of US census blocks.
var blocks = ee.FeatureCollection('TIGER/2010/Blocks');

// Compute sums of the specified properties, grouped by state code.
var sums = blocks
  .filter(ee.Filter.and(
    ee.Filter.neq('pop10', null),
    ee.Filter.neq('housing10', null)))
  .reduceColumns({
    selectors: ['pop10', 'housing10', 'statefp10'],
    reducer: ee.Reducer.sum().repeat(2).group({
      groupField: 2,
      groupName: 'state-code',
    })
});

// Print the resultant Dictionary.
print(sums);

结果展示:
在这里插入图片描述

3.1 Grouped reduceRegions (aka Zonal Statistics)

通过使用 reducer.group() 按指定输入的值对 reducer 的输出进行分组,可以获得 Image 或 FeatureCollection 的每个区域中的统计信息。
要对 image.reduceRegions() 的输出进行分组,可以指定一个按整数像素值定义分组的分组带。
这种类型的计算有时称为 “区域统计” ,其中区域被指定为分组带,统计信息由Reducer确定。

在这里插入图片描述

// Reducers: Grouping, land cover
var mcd12q1 = ee.ImageCollection("MODIS/006/MCD12Q1"),
    dmspols = ee.ImageCollection("NOAA/DMSP-OLS/NIGHTTIME_LIGHTS"),
    geometry = 
    /* color: #d63000 */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon(
        [[[-125.08281249999999, 48.998022477518326],
          [-125.08281249999999, 24.871185409749824],
          [-61.71367187499999, 24.871185409749824],
          [-61.71367187499999, 48.998022477518326]]], null, false);

// MODIS land cover categories in 2020.
var landcover = mcd12q1.filterDate('2020').first()
  .select('LC_Type1'); // IGBP

// Nightlights imagery inputs
var nl2001 = dmspols.filterDate('2001').first().select('stable_lights')
var nl2012 = dmspols.filterDate('2012').first().select('stable_lights')

// Compute the nightlights decadal difference, add land cover codes.
var nlDiff = nl2012.subtract(nl2001).addBands(landcover);

// Grouped mean: change of nightlights by land cover category.
print(nlDiff.reduceRegion({
  reducer: ee.Reducer.mean().group({
    groupField: 1, 
    groupName: 'code',
  }), 
  geometry: geometry, 
  scale: 1000,
  maxPixels: 1e8
}));

结果展示:
在这里插入图片描述

4. Weighted Reductions

默认情况下,应用于图像的Reducer根据掩码值对输入进行加权。这与通过clip()等操作创建的分数像素有关。通过在Reducer上调用 unweighted() 来调整这种行为。使用未加权的Reducer将强制该区域中的所有像素具有相同的权重。

var weighted = image
  .reduceRegion({
    reducer: ee.Reducer.mean(),
    geometry: geometry,
    scale: 30
}).get('nd');

var unweighted = image
  .reduceRegion({
    reducer: ee.Reducer.mean().unweighted(),
    geometry: geometry,
    scale: 30
}).get('nd');

例子:

var l8sr = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2");

// Create an arbitrary region.
var geometry = ee.Geometry.Rectangle(-122.496, 37.532, -121.554, 37.538);
Map.centerObject(geometry)
Map.addLayer(geometry)

// Load a Landsat 8 input image.
var image = l8sr.filterBounds(geometry).first()

// Make an NDWI image.  It will have one band named 'nd'.
var ndwi = image.normalizedDifference(['SR_B3', 'SR_B5']);

// Compute the weighted mean of the NDWI image.
var weighted = ndwi
  .reduceRegion({
    reducer: ee.Reducer.mean(),
    geometry: geometry,
    scale: 30})
  .get('nd');

// Compute the UN-weighted mean of the NDWI image.
var unweighted = ndwi
  .reduceRegion({
    reducer: ee.Reducer.mean().unweighted(),
    geometry: geometry,
    scale: 30})
  .get('nd');

// Observe the difference between weighted and unweighted reductions.
print('weighted:', weighted);
print('unweighted:', unweighted);

weighted:
-0.21169499738972458
unweighted:
-0.21157474937536905

IDW:

// Mock up a feature collection.
var fc = ee.FeatureCollection([
  ee.Feature(ee.Geometry.Point([110.14444050980546, 28.774132610921978])),
  ee.Feature(ee.Geometry.Point([112.93496785355546, 28.23347679807143])),
  ee.Feature(ee.Geometry.Point([111.26504597855546, 29.235334712701505])),
  ee.Feature(ee.Geometry.Point([111.44082722855546, 27.378325472980837])),
  ee.Feature(ee.Geometry.Point([113.19863972855546, 27.884456252339465])),
  ee.Feature(ee.Geometry.Point( [113.72598347855546, 28.484840062759634]))
]);


// Set maximum distance to consider.
var maxDist = 1e4; // Meters

// Calculate pixel distance to nearest point.
var distance = fc.distance({searchRadius: maxDist, maxError: 10});

// Convert distance to linear weight between 0 and 1.
var weight = distance.subtract(maxDist).abs().divide(maxDist);

// Display the distance and weight images.
Map.centerObject(fc, 9);
Map.addLayer(distance, {min:0, max: maxDist}, 'Meters');
Map.addLayer(fc, {min:0, max: 1}, 'Weight');
Map.addLayer(fc, {color: 'red'}, 'Points');

结果展示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jackson的生态模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值