GEE代码笔记(精简版)

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())

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值