今年的中秋又要到啦,我的中秋节祝福程序源代码分享:过什么节,代码走起!
今天主要给大家介绍的是关于一个如何对影像重投影然后获取特定阈值情况下的影像
先看结果:
原始影像
重投影后的影像:
这里用到的数据是
CORINE(环境信息协调)土地覆盖物(CLC)清单于1985年启动,旨在使欧洲的土地数据收集标准化,以支持环境政策的制定。该项目由欧洲环境署(EEA)在欧盟哥白尼计划的框架内进行协调,并由国家小组实施。参与国的数量随着时间的推移而增加,目前包括33个(EEA)成员国和6个合作国(EEA39),总面积超过580万平方公里。
CLC2018是Corine土地覆盖计划框架内产生的数据集之一,涉及2018年的土地覆盖/土地利用状况。第一个CLC清单的参考年份是1990年,第一次更新是在2000年。后来,更新周期变为6年。卫星图像为制图提供了几何和专题基础,原地数据是重要的辅助信息。CLC的基本技术参数(即44个等级的命名、25公顷的最小测绘单位(MMU)和100米的最小测绘宽度)从一开始就没有改变,因此,不同清册的结果是可以比较的。
每项资产所涵盖的时间段为。
1990年的资产:1989年至1998年
2000年的资产:1999年至2001年
2006年资产:2005年至2007年
2012年资产:2011年至2012年
2018年资产:2017年至2018年
本文的目的是将原始100米分辨率的数据通过重投影将分辨率转化为1000米的状态:
用到的一个投影函数:
ee.Projection(crs, transform, transformWkt)
返回一个具有给定基础坐标系和给定投影坐标与基础之间转换的投影。如果没有指定变换,则假定是同一变换。
参数。
crs(对象)。
这个投影的基础坐标参考系统,以著名的权威代码(例如'EPSG:4326')或WKT字符串形式给出。
transform(列表,默认为空)。
投影坐标与基础坐标系之间的转换,以2x3仿射转换矩阵的形式,按行主序指定。[xScale, xShearing, xTranslation, yShearing, yScale, yTranslation]。不能同时指定这个和'transformWkt'。
transformWkt(字符串,默认为空)。
投影坐标与基准坐标系之间的转换,以WKT字符串形式指定。不能同时指定这个参数和 "transform"。
返回。投影
updateMask(mask)
在所有现有遮罩不为零的位置上更新图像的遮罩。输出的图像保留了输入图像的元数据和足迹。
参数。
this:image (Image):
输入图像。
mask (图像)。
图像的新掩码,是[0, 1]范围内的一个浮点值(无效=0,有效=1)。如果这个图像只有一个波段,它将用于输入图像的所有波段;否则,必须有与输入图像相同的波段数。
返回。图像
reduceResolution(reducer, bestEffort, maxPixels)
使用给定的还原器启用重投,将所有输入像素对应于每个输出像素的组合。如果还原器只有一个输入,它将分别应用于集合的每个波段;否则它必须有与输入图像的波段数量相同的输入。
还原器的输出名称决定了输出波段的名称:有多个输入的还原器将直接使用输出名称,有单个输入和单个输出的还原器将保留输入波段的名称,有单个输入和多个输出的还原器将在输出名称前加上输入波段的名称(例如'10_mean', '10_stdDev', '20_mean', '20_stdDev' 等等)。
还原器的输入权重将是输入掩码与输入像素所覆盖的输出像素部分的乘积。
参数。
this:image(图像)。
输入的图像。
reducer (减速器)。
要应用的还原器,用于合并像素。
bestEffort(布尔值,默认:false)。
如果在默认分辨率下使用输入的图像需要太多的像素,那么就从一个允许操作成功的金字塔级别的已经被还原的输入像素开始。
maxPixels(整数,默认为64)。
为每个输出像素合并的最大输入像素数。设置过大会导致内存不足的问题。
返回。图像
reproject(crs, crsTransform, scale)
强制以给定的投影和分辨率计算一个图像。
参数。
this:image(图像)。
要重新投影的图像。
crs(投影)。
要投射的图像的CRS。
crsTransform(列表,默认为空)。
CRS变换值的列表。这是一个3x2变换矩阵的行主排序。该选项与scale选项互斥,并取代投影上已有的任何变换。
scale (Float, default: null):
如果指定了scale,那么投影的比例是用指定的比例值除以指定投影中一米的名义尺寸。如果没有指定比例,那么将使用给定投影的比例。
返回。图像
focalMode(radius, kernelType, units, iterations, kernel)
使用指定的或自定义的内核,对图像的每个波段应用形态学还原()滤波器。这个主要的目的就是聚合类型的选择,用来转换投影的时候常用
参数。
this:image(图像)。
要应用这些操作的图像。
radius (Float, default: 1.5):
要使用的内核的半径。
kernelType(字符串,默认为 "圆")。
要使用的核的类型。选项包括。圆"、"方"、"十字"、"加"、"八角 "和 "钻石"。
units(字符串,默认为 "像素")。
如果没有指定内核,这决定了内核的单位是米还是像素。
iterations(整数,默认为1)。
应用给定内核的次数。
kernel(内核,默认:null)。
一个自定义的内核。如果使用,kernelType和radius会被忽略。
返回。图像
代码:
//用函数来实现一个森林筛选 function aggregateWithCoverageThreshold(img, projection, threshold) { var img2 = img.reduceResolution({ reducer: ee.Reducer.mode(), maxPixels: 128 }).reproject(projection); var mode_coverage = img2.mask(); return img2.updateMask(mode_coverage.gte(coverage_threshold)); } // 设定阈值和重新定义投影 var coverage_threshold = 0.6; var proj1000 = ee.Projection('EPSG:3857', [1000,0,-20037550,0,-1000,15538800]); //原始影像选择和处理 var originalImage = ee.Image("COPERNICUS/Landcover/100m/Proba-V-C3/Global/2019") .select('forest_type'); //选择影像大于0的部分 originalImage = originalImage.updateMask(originalImage.gt(0)); //将所有东西通过上面的函数进行筛选 var newImage = aggregateWithCoverageThreshold(originalImage, proj1000, coverage_threshold); Map.addLayer(originalImage, {}, 'original image'); Map.addLayer(newImage, {}, 'new image');
这里只选择了影像中全球森林分布的:
总的来说,本文主要是介绍了一个快速实现研究区的影像的分辨率转换。有问题可以在评论区留言,祝大家中秋节快乐。