ImageCollection
# 简介
影像集(ImageCollection)是PIE-Engine中的影像集合对象,包含一个或多个Image对象。PIE-Engine Studio提供构建影像集算子及影像集相关算法,包括但不限于加载影像集、获取影像集属性信息、影像过滤、影像拼接、统计计算、影像集内Image循环计算。
# ImageCollection (opens new window)
函数 | 返回值 |
---|---|
ImageCollection(args,columns) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
args | String | 数据路径 |
var imageCollection = pie.ImageCollection("LC08/01/T1");
# aggregate_array
根据属性名获得ImageCollection中所有Image对象的属性值信息,输出这些属性值的集合。
函数 | 返回值 |
---|---|
ImageCollection.aggregate_array(property) | List |
参数 | 类型 | 说明 |
---|---|---|
this: collection | ImageCollection | 待计算的Image Collection |
property | String | 属性名 |
var l8Col = pie.ImageCollection("LC08/01/T1")
.filterDate("2019-12-01", "2019-12-02");
var image1=l8Col.getAt(0).set("addProp","image1");
var image2=l8Col.getAt(1).set("addProp","image2");
var imageCol=pie.ImageCollection().fromImages([image1,image2]);
var array=imageCol.aggregate_array("addProp");
print(array);
# aggregate_count
根据属性名获得ImageCollection中所有Image对象的属性值信息,计算其中非空属性值的数目。
函数 | 返回值 |
---|---|
ImageCollection.aggregate_count(property) | Number |
参数 | 类型 | 说明 |
---|---|---|
this: collection | ImageCollection | 待计算的Image Collection |
property | String | 属性名 |
var l8Col = pie.ImageCollection("LC08/01/T1")
.filterDate("2019-12-01", "2019-12-02");
var image1=l8Col.getAt(0).set("addProp","image1");
var image2=l8Col.getAt(1).set("addProp","image2");
var imageCol=pie.ImageCollection().fromImages([image1,image2]);
var count=imageCol.aggregate_count("addProp");
print(count);
# aggregate_first
根据属性名获得ImageCollection中所有Feature对象的属性值信息,计算其中首个对象的属性值。
函数 | 返回值 |
---|---|
ImageCollection.aggregate_first(property) | String|Number|Boolean|Object|List |
参数 | 类型 | 说明 |
---|---|---|
this: collection | ImageCollection | 待计算的Image Collection |
property | String | 属性名 |
var l8Col = pie.ImageCollection("LC08/01/T1")
.filterDate("2019-12-01", "2019-12-02");
var image1=l8Col.getAt(0).set("addProp","image1");
var image2=l8Col.getAt(1).set("addProp","image2");
var imageCol=pie.ImageCollection().fromImages([image1,image2]);
var first=imageCol.aggregate_first("addProp");
print(first);
# aggregate_max
根据属性名获得ImageCollection中所有Image对象的属性值信息,输出这些属性值的最大值。
函数 | 返回值 |
---|---|
ImageCollection.aggregate_max(property) | Number |
参数 | 类型 | 说明 |
---|---|---|
this: collection | ImageCollection | 待计算的Image Collection |
property | String | 属性名 |
var l8Col = pie.ImageCollection("LC08/01/T1")
.filterDate("2019-12-01", "2019-12-02");
var image1=l8Col.getAt(0).set("addProp",12);
var image2=l8Col.getAt(1).set("addProp",-5);
var imageCol=pie.ImageCollection().fromImages([image1,image2]);
var max=imageCol.aggregate_max("addProp");
print(max);
# aggregate_mean
根据属性名获得ImageCollection中所有Image对象的属性值信息,输出这些属性值的平均值。
函数 | 返回值 |
---|---|
ImageCollection.aggregate_mean (property) | Number |
参数 | 类型 | 说明 |
---|---|---|
this: collection | ImageCollection | 待计算的Image Collection |
property | String | 属性名 |
var l8Col = pie.ImageCollection("LC08/01/T1")
.filterDate("2019-12-01", "2019-12-02");
var image1=l8Col.getAt(0).set("addProp",12);
var image2=l8Col.getAt(1).set("addProp",-6);
var imageCol=pie.ImageCollection().fromImages([image1,image2]);
var mean=imageCol.aggregate_mean("addProp");
print(mean);
# aggregate_min
根据属性名获得ImageCollection中所有Image对象的属性值信息,输出这些属性值的最小值。
函数 | 返回值 |
---|---|
ImageCollection.aggregate_min(property) | Number |
参数 | 类型 | 说明 |
---|---|---|
this: collection | ImageCollection | 待计算的Image Collection |
property | String | 属性名 |
var l8Col = pie.ImageCollection("LC08/01/T1")
.filterDate("2019-12-01", "2019-12-02");
var image1=l8Col.getAt(0).set("addProp",12);
var image2=l8Col.getAt(1).set("addProp",-5);
var imageCol=pie.ImageCollection().fromImages([image1,image2]);
var min=imageCol.aggregate_min("addProp");
print(min);
# aggregate_sum
根据属性名获得ImageCollection中所有Image对象的属性值信息,输出这些属性值的和。
函数 | 返回值 |
---|---|
ImageCollection.aggregate_sum(property) | Number |
参数 | 类型 | 说明 |
---|---|---|
this: collection | FeatureCollection | 待计算的Feature Collection |
property | String | 属性名 |
var l8Col = pie.ImageCollection("LC08/01/T1")
.filterDate("2019-12-01", "2019-12-02");
var image1=l8Col.getAt(0).set("addProp",12);
var image2=l8Col.getAt(1).set("addProp",-5);
var imageCol=pie.ImageCollection().fromImages([image1,image2]);
var sum=imageCol.aggregate_sum("addProp");
print(sum);
# filter
ImageCollection对象进行过滤,返回过滤后的ImageCollection对象。
函数 | 返回值 |
---|---|
filter(filter) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
filter | Filter | Filter过滤对象 |
// 范围过滤器
var polygon = pie.Geometry.Polygon([[[120, 41], [121, 41], [121, 42], [120, 42],[120, 41]]], null);
var filter = pie.Filter.bounds(polygon);
// 属性过滤器
var imageCollection = pie.ImageCollection().load("LC08/01/T1").filter(filter).select("B3");
var image = imageCollection.mosaic();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,40,9);
# filterBounds
ImageCollection对象进行空间范围过滤,返回过滤后的ImageCollection对象。
函数 | 返回值 |
---|---|
filterBounds(geometry) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
geometry | Geometry | 过滤空间范围 |
var polygon = pie.Geometry.Polygon([[[120, 41], [121, 41], [121, 42], [120, 42],[120, 41]]], null);
var imageCollection = pie.ImageCollection().load("LC08/01/T1").filterBounds(polygon).select("B3");
var image = imageCollection.mosaic();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,40,9);
# filterDate
ImageCollection对象通过日期进行过滤,返回过滤后的ImageCollection对象。
函数 | 返回值 |
---|---|
filter(start,end) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
start | String|Date | 过滤起始时间 |
end | String|Date | 过滤终止时间 |
var imageCollection = pie.ImageCollection().load("LC08/01/T1").filterDate("2019-12-01", "2019-12-31").select("B3");
var image = imageCollection.mosaic();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,40,9);
var startDate = pie.Date("2019-12-01");
var endDate = pie.Date("2019-12-31");
var imageCollection = pie.ImageCollection().load("LC08/01/T1").filterDate(startDate , endDate ).select("B3");
var image = imageCollection.mosaic();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,40,9);
# first
获得第一个Image对象。
函数 | 返回值 |
---|---|
first() | Image |
var filter = pie.Filter.date("2019-12-01", "2019-12-31");
var imageCollection = pie.ImageCollection().load("LC08/01/T1").filter(filter);
var image = imageCollection.first().select("B4");
Map.addLayer(image,{min:500,max:3500},"imageB4",true);
Map.setCenter(145.8,15.8,9);
# fromImages
根据Image列表构建ImageCollection对象。
函数 | 返回值 |
---|---|
fromImages(images) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
images | Array | 影像数据列表 |
var image1 = pie.Image("LC08/01/T1/LC08_121031_20171203").select("B3");
var image2 = pie.Image("LC08/01/T1/LC08_121032_20191225").select("B3");
var imageCollection = pie.ImageCollection().fromImages([image1,image2]);
var image = imageCollection.max();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,41,9);
# get
根据属性名获得ImageCollection下的属性值信息。
函数 | 返回值 |
---|---|
get(key) | String|Number|Boolean|Object|List |
参数 | 类型 | 说明 |
---|---|---|
key | String | 属性名 |
var imageCollection = pie.ImageCollection("LC08/01/T1").filterDate("2019-12-01", "2019-12-02");
imageCollection = imageCollection.set("key1", {name:123});
var value = imageCollection.get("key1");
print(value);
var v = imageCollection.get("key1").getInfo()["name"];
print(v);
# getAt
获得指定编号的Image对象。
函数 | 返回值 |
---|---|
getAt(index) | Image |
参数 | 类型 | 说明 |
---|---|---|
index | Number | Image的编号 |
var filter = pie.Filter.date("2019-12-01", "2019-12-31");
var imageCollection = pie.ImageCollection("LC08/01/T1").select("B4").filter(filter);
var image = imageCollection.getAt(0);
Map.addLayer(image,{min:500,max:3500},"imageB4",true);
Map.setCenter(120,40,9);
# getInfo
快捷计算相关的值。
函数 | 返回值 |
---|---|
getInfo () | Number|Object |
var imageCollection = pie.ImageCollection("LC08/01/T1");
var count = imageCollection.size().getInfo();
# getNumber
根据属性名获得ImageCollection下的属性值信息,并且将其转换为数值类型。
函数 | 返回值 |
---|---|
getNumber(property) | Number |
参数 | 类型 | 说明 |
---|---|---|
property | String | 属性名 |
var imageCollection = pie.ImageCollection("LC08/01/T1").filterDate("2019-12-01", "2019-12-02");
var dict = {key1: {name:"abc", value:123}, key2: 12.34, key3: "12.34"};
imageCollection = imageCollection.setMulti(dict);
var value3 = imageCollection.getNumber("key3").getInfo();
print(value3);
# getString
根据属性名获得ImageCollection下的属性值信息,并且将其转换为字符串类型。
函数 | 返回值 |
---|---|
getString(property) | String |
参数 | 类型 | 说明 |
---|---|---|
property | String | 属性名 |
var imageCollection = pie.ImageCollection("LC08/01/T1").filterDate("2019-12-01", "2019-12-02");
var dict = {key1: {name:"abc", value:123}, key2: 12.34, key3: "12.34"};
imageCollection = imageCollection.setMulti(dict);
var value2 = imageCollection.getString("key2").getInfo();
print(value2);
# id
返回ImageCollection对象的id。
函数 | 返回值 |
---|---|
id() | String |
var imageCollection = pie.ImageCollection("LC08/01/T1").filterDate("2019-12-01", "2019-12-02");
var id = imageCollection.id();
print(id);
# limit
返回集合中前几个要素的集合。
函数 | 返回值 |
---|---|
limit(count) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
this | ImageCollection | 要进行合并的影像集合 |
count | Number | 数值,要返回的要素的个数 |
var image = pie.Image("user/pieadmin/maize_2020-4-21_2020-4-26").select(["B1"]);
var imagePZ = image.focal_max(10);
var imageFS = image.focal_min(10);
var imageKC = imageFS.focal_max(10);
var imageBC = imagePZ.focal_min(10);
// 定义要素数据集A和B
var imageCollectionA = pie.ImageCollection().fromImages([imagePZ,imageFS]);
var imageCollectionB = pie.ImageCollection().fromImages([imageKC,imageBC]);
// 执行影像集合的合并
var imageCollection = imageCollectionA.merge(imageCollectionB).limit(3);
print(imageCollection);
# load
ImageCollection对象加载数据,一般在ImageCollection初始化的时候会默认调用该方法。
函数 | 返回值 |
---|---|
load(id) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
id | String | 数据路径 |
var imageCollection = pie.ImageCollection().load("LC08/01/T1");
# map
针对ImageCollection中的每个Image进行循环计算。
函数 | 返回值 |
---|---|
map(algorithm,dropNulls) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
algorithm | Function | 参数是Image的方法,需要返回Image |
dropNulls | Boolean | 是否允许返回空值 |
var filter = pie.Filter.date("2019-12-01", "2019-12-31");
var imageCollection = pie.ImageCollection().load("LC08/01/T1").filter(filter);
var imageCollectionNDVI = imageCollection.map(function (image) {
// NDVI计算
var img_Nir = image.select("B5");
var img_Red = image.select("B4");
var img_NDVI = img_Nir.subtract(img_Red).divide(img_Nir.add(img_Red));
return img_NDVI;
});
// 结果加载显示
var visParam = {
min: -0.588317,
max: 0.794508,
palette: 'a3171e,c56e12,e8c507,dfff00,7fff00,1fff00,15e235,34b784'
};
var imageNDVI = imageCollectionNDVI.select("B5").mosaic();
Map.addLayer(imageNDVI,visParam,"Layer_NDVI",true);
Map.setCenter(120,40,9);
# max
ImageCollection中的Image进行最大值计算,返回一个Image对象。
函数 | 返回值 |
---|---|
max() | Image |
var image1 = pie.Image("LC08/01/T1/LC08_121031_20171203").select("B3");
var image2 = pie.Image("LC08/01/T1/LC08_121032_20191225").select("B3");
var imageCollection = pie.ImageCollection().fromImages([image1,image2]);
var image = imageCollection.max();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,41,9);
# mean
ImageCollection中的Image进行平均值计算,返回一个Image对象。
函数 | 返回值 |
---|---|
mean() | Image |
var image1 = pie.Image("LC08/01/T1/LC08_121031_20171203").select("B3");
var image2 = pie.Image("LC08/01/T1/LC08_121032_20191225").select("B3");
var imageCollection = pie.ImageCollection().fromImages([image1,image2]);
var image = imageCollection.mean();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,41,9);
# median
ImageCollection中的Image进行中值计算,返回一个Image对象。
函数 | 返回值 |
---|---|
median() | Image |
var image1 = pie.Image("LC08/01/T1/LC08_121031_20171203").select("B3");
var image2 = pie.Image("LC08/01/T1/LC08_121032_20191225").select("B3");
var imageCollection = pie.ImageCollection().fromImages([image1,image2]);
var image = imageCollection.median();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,41,9);
# merge
实现两个影像集合(ImageCollection)的合并。
函数 | 返回值 |
---|---|
merge(collection2) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
this | ImageCollection | 要进行合并的影像集合 |
collection2 | ImageCollection | 进行合并的影像集合 |
var image = pie.Image("user/pieadmin/maize_2020-4-21_2020-4-26").select(["B1"]);
var imagePZ = image.focal_max(10);
var imageFS = image.focal_min(10);
var imageKC = imageFS.focal_max(10);
var imageBC = imagePZ.focal_min(10);
// 定义要素数据集A和B
var imageCollectionA = pie.ImageCollection().fromImages([imagePZ,imageFS]);
var imageCollectionB = pie.ImageCollection().fromImages([imageKC,imageBC]);
// 执行影像集合的合并
var imageCollection = imageCollectionA.merge(imageCollectionB);
print(imageCollection);
# min
ImageCollection中的Image进行最小值计算,返回一个Image对象。
函数 | 返回值 |
---|---|
min() | Image |
var image1 = pie.Image("LC08/01/T1/LC08_121031_20171203").select("B3");
var image2 = pie.Image("LC08/01/T1/LC08_121032_20191225").select("B3");
var imageCollection = pie.ImageCollection().fromImages([image1,image2]);
var image = imageCollection.min();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,41,9);
# mosaic
ImageCollection中的Image进行镶嵌,返回一个Image对象。
函数 | 返回值 |
---|---|
mosaic() | Image |
var image1 = pie.Image("LC08/01/T1/LC08_121031_20171203").select("B3");
var image2 = pie.Image("LC08/01/T1/LC08_121032_20191225").select("B3");
var imageCollection = pie.ImageCollection().fromImages([image1,image2]);
var image = imageCollection.mosaic();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,41,9);
# propertyNames
返回ImageCollection对象的属性信息。
函数 | 返回值 |
---|---|
propertyNames() | List |
var imageCollection = pie.ImageCollection("LC08/01/T1").filterDate("2019-12-01", "2019-12-02");
imageCollection = imageCollection.set("key1", {name:123});
var propertyNames = imageCollection.propertyNames().getInfo();
print(propertyNames);
var n = imageCollection.get("key1").getInfo()["name"]
print(n)
# qualityMosaic
ImageCollection中的Image进行镶嵌,返回一个Image对象。对镶嵌时选择的波段值进行排序,获取的最⼤值作为qualityMosaic的值。
函数 | 返回值 |
---|---|
qualityMosaic(args) | Image |
参数 | 类型 | 说明 |
---|---|---|
args | String | 要镶嵌的波段名称 |
var image1 = pie.Image("LC08/01/T1/LC08_121031_20171203").select("B3");
var image2 = pie.Image("LC08/01/T1/LC08_121032_20191225").select("B3");
var imageCollection = pie.ImageCollection().fromImages([image1,image2]);
var image = imageCollection.qualityMosaic("B3");
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,41,9);
# reduce
将一个统计器应用到影像集合中的所有影像。 如果统计器有单一输入,则该统计器将被分别应用于该影像集中所有波段;否则输入个数需与影像集波段数一致。 输出波段名由统计器的输出名决定:多输入值的统计器将直接运用输出名,单一输入的统计器将在输出名前加输入波段的名称作为前缀。
函数 | 返回值 |
---|---|
reduce(reducer) | Image |
参数 | 类型 | 说明 |
---|---|---|
this | ImageCollection | 要进行计算的影像集合 |
reducer | Reducer | 统计计算器 |
// 时间过滤器
var filterCloud = pie.Filter.lte("cloudCover",5);
var filterPro1 = pie.Filter.eq("wrsPath","119");
var filterPro2 = pie.Filter.eq("wrsRow","38");
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2013-04-01", "2020-01-01")
.filter(filterCloud)
.filter(filterPro1)
.filter(filterPro2);
var result = imageCollection.reduce(pie.Reducer.first());
// 数据加载显示
Map.addLayer(result.select("B1"),{min:0,max:6000},"Layer",true);
Map.setCenter(120,32);
# reduceColumns
将指定的selector中的属性值根据reducer计算,返回一个字典对象。
函数 | 返回值 |
---|---|
reduceColumns(reducer,selectors,weightSelector) | Object |
参数 | 类型 | 说明 |
---|---|---|
reducer | Reducer | 统计器,目前仅支持toList统计器 |
selectors | Array | 要统计的属性列表 |
weightSelector | Array | 各个属性的权重,目前未启用 |
var imageCollection = pie.ImageCollection("H08/AHI-L1-G");
var filter = pie.Filter.calendarRange(11, 12,"hour");
var images_result = imageCollection.filterDate("2021-06-20","2021-06-21").filter(filter);
print(images_result.reduceColumns(pie.Reducer.toList(1),["date"]));
# select
根据波段名称对ImageCollection中各个影像进行波段筛选,返回一个ImageCollection对象。
函数 | 返回值 |
---|---|
select(args) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
args | String|Array | 波段名称或波段名称列表 |
var imageCollection0 = pie.ImageCollection('CRESDA/GF6/L1A/MULTI_SR');
print(imageCollection0);
var imageCollection = imageCollection0.select(["B1","B2","B3"]);
print(imageCollection);
# set
设置ImageCollection下的属性信息,如果存在就覆盖更新,如果不存在则直接创建。
函数 | 返回值 |
---|---|
set(key,value) | Void |
参数 | 类型 | 说明 |
---|---|---|
key | String | 属性名 |
value | String|Number|Boolean|Object|List | 属性值 |
var imageCollection = pie.ImageCollection("LC08/01/T1").filterDate("2019-12-01", "2019-12-02");
imageCollection = imageCollection.set("key1", {name:123});
var value = imageCollection.get("key1").getInfo();
print(value);
var v = imageCollection.get("key1").getInfo()["name"];
print(v);
# setMaskValue
ImageCollection中的Image设置过滤值,返回过滤后的ImageCollection对象。
函数 | 返回值 |
---|---|
setMaskValue(value) | ImageCollection |
参数 | 类型 | 说明 |
---|---|---|
value | Number | 过滤值 |
var image = pie.Image("user/101/public/Raster/GF1_Clip").select("B1");
var imageCollection = pie.ImageCollection().fromImages([image]);
var imageCollectionNew = imageCollection.setMaskValue(40);
var imageMosaic =imageCollectionNew.mosaic();
Map.addLayer(imageMosaic);
Map.setCenter(117.01,39.45,13);
# setMulti
批量设置ImageCollection下的属性信息,如果存在就覆盖更新,如果不存在则直接创建。
函数 | 返回值 |
---|---|
setMulti(properties) | Void |
参数 | 类型 | 说明 |
---|---|---|
properties | Dictionary | 属性键值对,以字典形式传入 |
var imageCollection = pie.ImageCollection("LC08/01/T1").filterDate("2019-12-01", "2019-12-02");
var dict = {key1: {name:"abc", value:123}, key2: 12.34, key3: "12.34"};
imageCollection = imageCollection.setMulti(dict);
# size
获得Collection中Image的个数。
函数 | 返回值 |
---|---|
size() | Number |
var filter = pie.Filter.date("2019-12-01", "2019-12-31");
var imageCollection = pie.ImageCollection("LC08/01/T1").filter(filter);
print(imageCollection.size());
# sum
ImageCollection中的Image进行求和计算,返回一个Image对象。
函数 | 返回值 |
---|---|
sun() | Image |
var image1 = pie.Image("LC08/01/T1/LC08_121031_20171203").select("B3");
var image2 = pie.Image("LC08/01/T1/LC08_121032_20191225").select("B3");
var imageCollection = pie.ImageCollection().fromImages([image1,image2]);
var image = imageCollection.sum();
Map.addLayer(image,{min:500,max:3500});
Map.setCenter(120,41,9);