1、客户端和服务器端的区别
(1)客户端示例:结果只在控制台打印,分析器没有输出结果,全部过程在本地客户端实现,没有连接到GEE平台进行计算输出;
var a = 3;
var b = 5;
var c = a + b;
print(c);
print(typeof(c));
>>> 8
>>> number
(2)服务器端示例 :控制台和分析器均输出结果,使用了服务器端函数,建议使用服务器端的用法;
var a = ee.Number(3);
var b = ee.Number(5);
var c = a.add(b);
var d = a.eq(4);
if (d){
print("d = true")
}
else{
print("d = false")
}
print(c);
print(d);
print(typeof(c));
print(typeof(d))
>>> d = true
>>> 8
>>> 0
>>> object
>>> object
此时d作为一个对象,因此在if的判断中依然为真。
2、研究区、时间、属性的筛选
首先加载数据集Landsat 8,并命名为L8,之后创建区域命名为region
var Filtered_Collection = L8.filterBounds(region)
.filterMetadata('CLOUD_COVER', 'less_than', 1)
.filterDate('2017-1-1', '2018-1-1')
var Median_Image = Filtered_Collection.median();
Map.addLayer(Median_Image, Params, "Layer");
3、影像计算
(1)方法一:公式计算
var image = L8.filterBounds(ee.Geometry.Point(-4, 56.9)).filterMetadata('CLOUD_COVER', 'less_than', 1).first();
var RED = image.select('B4');
var NIR = image.select('B5');
var NDVI = NIR.subtract(RED).divide(NIR.add(RED));
Map.addLayer(NDVI, Params, 'NDVI')
(2)方法二 :更加结构化
var image = L8.filterBounds(ee.Geometry.Point(-4, 56.9)).filterMetadata('CLOUD_COVER', 'less_than', 1).first();
var RED = image.select('B4');
var NIR = image.select('B5');
var NDVI = image.expression(
'(NIR-RED)/(NIR+RED)',
{
'NIR':NIR,
'RED':RED
})
Map.addLayer(NDVI, Params, 'NDVI')
(3)方法三:索引计算
var image = L8.filterBounds(ee.Geometry.Point(-4, 56.9)).filterMetadata('CLOUD_COVER', 'less_than', 1).first();
print(image.bandNames());
var NDVI = image.expression('(b(4)-b(3))/(b(4)+b(3))')
Map.addLayer(NDVI, Params, 'NDVI')
(4)方法四:
var image = L8.filterBounds(ee.Geometry.Point(-4, 56.9)).filterMetadata('CLOUD_COVER', 'less_than', 1).first();
var NDVI = image.expression('(b(\'B5\')-b(\'B4\'))/(b(\'B5\')+b(\'B4\'))')
Map.addLayer(NDVI, Params, 'NDVI')
4、函数功能
var MyCollection = L8.filterBounds(Point)
.filterMetadata('CLOUD_COVER', 'less_than', 1);
function CaculateNDVI(image){
var selected = image.select('B4', 'B5');
var NDVI = selected.expression('(b(1)-b(0))/(b(1)+b(0))').select(['B5'],['NDVI']);
return NDVI;
}
var NDVIcollection = MyCollection.map(CaculateNDVI);
print(NDVIcollection);
5、迭代功能
ChatGPT对下列代码的解释
最终结果只包含一个ee.Image对象
var Data = PERSIANN.filterDate('2017-1-1', '2018-1-1');
var Init = ee.Image.constant(0)
.rename('precipitation')
.cast({'precipitation': 'long'});
function CalcDryDays(current, previous){
var Mask = current.remap([0], [1], 0);
var LastImage = ee.Image(previous);
var Updated = LastImage.add(Mask).multiply(Mask);
return Updated;
}
var result = ee.Image(Data.iterate(CalcDryDays, Init))
Map.addLayer(result)
包含所有迭代结果的ee.List
var Data = PERSIANN.filterDate('2017-1-1', '2018-1-1');
var Init = ee.Image.constant(0)
.rename('precipitation')
.cast({'precipitation': 'long'});
function CalcDryDays(current, previous){
var Mask = current.remap([0], [1], 0);
var LastImage = ee.Image(ee.List(previous).get(-1));
var Updated = LastImage.add(Mask).multiply(Mask);
return ee.List(previous).add(Updated);
}
var result = ee.List(Data.iterate(CalcDryDays, ee.List([Init])))
var ResultCollection = ee.ImageCollection(result);
var ResultImage = ResultCollection.max();
Map.addLayer(ResultImage, Params);
//print(result);
6、导入矢量和栅格文件
7、导出数据
(1)Export.image.toAsset
Export.image.toAsset({
image: image,
description: "KampalaImage", //对图像的描述
assetId: "KampalaImage_1", //文件名称
pyramidingPolicy: {".default": "min"}, // 对图像每个波段金字塔化,default默认所有波段
region: Region, //应用区域
scale: 30, //像元大小
crs: "EPSG:21096", //坐标
maxPixels: 50000000 //输出最大像素个数
});
(2)Export.image.toDrive
Export.image.toDrive({
image: image.float(),
description: "KampalaImage", //对图像的描述
folder: "GEE_data", //文件夹名称
fileNamePrefix: "KampalaImage_2", //文件名称
region: Region, //应用区域
scale: 30, //像元大小
maxPixels: 50000000 , //输出最大像素个数
shardSize: 100, //指定并行处理的单个数据“分片”的最大大小,默认值为256。
fileDimensions: 5000, //每个图像文件的像素尺寸,必须是 shardSize 的倍数。
fileFormat: "GeoTIFF" //影像输出格式
});
(3)Export.table.toDrive
var ExampleTable = ee.FeatureCollection([
ee.Feature(null, {Name: "Lake", Color: "Blue", Size: 100}),
ee.Feature(null, {Name: "Forest", Color: "Green", Size: 200}),
ee.Feature(null, {Name: "Buildings", Color: "Grey", Size: 50})
])
Export.table.toDrive({
collection: ExampleTable,
description: "ExampleTable",
folder: "GEE_data",
fileNamePrefix: "Table",
fileFormat: "CSV",
selectors: ["Name", "Color"]
})
(4)Export.video.toDrive
var collection = L8.filterBounds(Point)
.filterMetadata('CLOUD_COVER', "less_than", 10)
.map(function(image){return image.multiply(512).unit8();})
Export.video.toDrive({
collection: collection,
description: "VideoExport",
folder: "GEE_data",
framesPerSecond: 1, //帧数
region: Region,
maxFrams: 50
})
8、影像分类
var selection = L8.filterBounds(ROI)
.filterDate('2018-1-1', '2022-1-1')
.filterMetadata('CLOUD_COVER', 'less_than', 1)
.mean()
Map.addLayer(selection, Params, 'aiji')
var training_points = water.merge(vegetation).merge(soil).merge(urban)
print(training_points)
var training_data = selection.sampleRegions({
collection: training_points,
properties: ['LC'],
scale: 30
})
print(training_data)
var classifier = ee.Classifier.libsvm()
classifier = classifier.train({
features: training_data,
classProperty: 'LC',
inputProperties: ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11']
})
print(classifier)
var classified_image = selection.classify(classifier)
Map.addLayer(classified_image, {palette: ['0049bf', '07c46f', 'ddd60b', 'c91700'], min:0, max:2})
print(classifier.confusionMatrix())