Google Earth Engine——重要概念

重要概念


1、地图

Google earth engine中地图(map)主要是指显示影像栅格数据、矢量数据,是编辑器中的地图展示区

彩色合成

三波段彩色合成显示一幅Landsat影像。


Map.setOptions("SATELLITE");
var image = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_123037_20180611");  
Map.centerObject(image, 7);
var visParam = {  
 min: 0,  
 max: 0.3,  
 bands: ["B4", "B3", "B2"]  
};  
Map.addLayer(image, visParam, "rawIamge");
  • 第一行,设置默认地图显示样式为卫星底图

  • 第二行,加载默认的单张影像

  • 第三行,设置显示地图以image的边界为中心,缩放级别是7

  • 第四~九行,映射影像到map显示区,加载使用的是addLayer()方法

2、影像

遥感学中影像主要是指卫星、航拍飞机或者无人机等飞行设备远距离拍摄的影像,存储格式有Geotiff、netCDF、或者HDF等。而在GEE中,程序在使用时通过GEE提供的Image API来调用。

在GEE中,用户不需要对整张影像的像素做“遍历”运算,而是在GEE内部实现对整幅影像的操作。这种操作方式与Python中的numpy库对整体Array的操作类似。

影像信息

  • 影像的id

  • 版本号

  • 波段信息

  • 属性信息

影像加载

以下代码通过print()输出了 影像的详细信息,同时选择性加载了两个波段影像 (B1、B2),还有就是加载了RGB波段影像数据

var image = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_123037_20180611");  
Map.centerObject(image, 7);  
print(image);  
Map.addLayer(image.select("B1"), {min:0, max:0.3}, "B1");  
Map.addLayer(image.select("B2"), {min:0, max:0.3}, "B2");  
Map.addLayer(image, {min:0, max:0.3, bands:["B4","B3","B2"]}, "RGB");

3、影像集合

4、矢量数据

几何图形类(geometry)、矢量数据类(feature)、矢量数据集合类(feature collection)

//定义点线面
var point = ee.Geometry.Point([116.387928, 40.00649]);//
var line = ee.Geometry.LineString(  
  [[116.3782558270866, 40.02023566292988],
        [116.3782558270866, 39.9984096033757],
        [116.41069982733075, 39.9984096033757],
        [116.41069982733075, 40.02023566292988]]);  
var polygon = ee.Geometry.Polygon(
    [[[116.3782558270866, 40.02023566292988],
        [116.3782558270866, 39.9984096033757],
        [116.41069982733075, 39.9984096033757],
        [116.41069982733075, 40.02023566292988]]]);  
print("point", point);  
print("line", line);  
print("polygon", polygon);  
Map.addLayer(polygon, {color: "green"}, "polygon");  

//定义feature矢量数据;两种方式;
//1、自定义的方式f1,同时加载
//2、从矢量数据集合feature中获取的方式f2
var f1 = ee.Feature(point, {count:100});  
print("feature 1", f1);  
Map.addLayer(f1, {color: "blue"},'point');  
var fCol = ee.FeatureCollection("users/landusers/province");  
var f2 = ee.Feature(fCol.first());  
print("feature 2", f2);    

//使用fitter过滤方式取得指定区域的矢量数据集合同时将数据加载在地图上
var sCol = fCol.filterBounds(point);  
print("featureCollection", sCol);  
Map.addLayer(sCol, {color: "red"}, "province");  
Map.centerObject(point, 12);

5、过滤筛选

从集合中筛选出符合条件的数据,在GEE中实现过滤的方法叫fitter

  • 空间过滤

  • 时间过滤

  • 属性过滤

var roi = ee.Geometry.Point([116.387928, 40.00649]);  
Map.centerObject(roi, 7);    
var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA");    
var scol = l8.filterBounds(roi)    //空间过滤
            .filterDate("2017-4-1", "2017-6-1")  //时间过滤
            .filter(ee.Filter.lt("CLOUD_COVER", 5));    //属性过滤
print("scol", scol);  //输出数据集合

6、数据整合

在GEE中按照时间、空间、波段、矩阵或者其他数据结构整合数据的方法。

ee.Reducer()这一大类指定了数据整合的方式。

Reducer是指将数据整合起来的某种简单的统计算法(min;max;avg;mean;),或者是对输入数据进行更为复杂的总结。

  • 时间:imageCollection.reduce();

  • 空间:image.reduceRegion();image.reduceNeighborhood();

  • 波段:image.reduce();

  • Feature Collection的属性空间:Feature Collection.reduceColumns()或者以“aggregate_”开头的Feature Collection的方法。

实现NDVI 的计算

var roi = ee.Geometry.Polygon(        
    [[[114.62959747314449, 33.357067677774594],  
      [114.63097076416011, 33.32896028884253],  
      [114.68315582275386, 33.33125510961763],  
      [114.68178253173824, 33.359361757948754]]]);  

Map.centerObject(roi, 9);  

var image = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_123037_20180611");  

var ndvi = image.normalizedDifference(["B5", "B4"]).rename("NDVI");  
var visParam = {  
 min: -0.2,  
 max: 0.8,  
 palette: ["FFFFFF", "CE7E45", "DF923D", "F1B555", "FCD163",  
           "99B718", "74A901", "66A000", "529400", "3E8601",  
           "207401", "056201", "004C00", "023B01", "012E01",  
           "011D01", "011301"]  
};  //计算NDVI

Map.addLayer(ndvi, visParam, "NDVI");  
Map.addLayer(roi, {color: "red"}, "roi");    

var mean = ndvi.reduceRegion({  
  reducer: ee.Reducer.mean(),  
  geometry: roi,  
  scale: 30  
});  
//调用Image中的ReducerRegion方法计算roi区域内的NDVI均值,参数分别是Reducer均值计算器、
//Geometry计算区域roi、scale计算使用的分辨率为30m。

print("reduceRegion value is: ", mean);

7、循环遍历map

循环遍历是依次对列表或者集合中每一个元素做相同的处理,通常在其他编程语言中用for或者well来实现,同样在GEE中也可以使用这两种方式来做循环。但是由于GEE语言的特殊性,更推荐使用GEE原生的循环遍历方法map来做。

  • 对整个影像集合中的每一景影像进行处理,先对每一景影像添加NDVI波段,然后筛选波段循环进行计算roi中NDVI均值,实现对每一景影像的操作,最后为影像增加了NDVI的属性。

var roi = ee.Geometry.Polygon(  
      [[[116.3782558270866, 40.02023566292988],
        [116.3782558270866, 39.9984096033757],
        [116.41069982733075, 39.9984096033757],
        [116.41069982733075, 40.02023566292988]]]);  
Map.addLayer(roi, {color: "red"}, "roi");  
Map.centerObject(roi, 13);  

var l8Col = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA")  
            .filterBounds(roi)  
            .filterDate("2018-1-1", "2018-6-1")  

            .map(function(image){  
               var ndvi = image.normalizedDifference(["B5", "B4"])  
                              .rename("NDVI");  
               return image.addBands(ndvi);  
            })  //循环遍历,计算每一景影像中roi区域内的NDVI均值,并把这个均值赋给新的属性字段"ndvi"

            .select("NDVI")  
            .map(function(image) {  
               var dict = image.reduceRegion({  
                reducer: ee.Reducer.mean(),  
                geometry: roi,  
                scale: 30  
              });
               var ndvi = ee.Number(dict.get("NDVI"));  
               image = image.set("ndvi", ndvi);  
               return image;  
            });  

print("l8Col", l8Col);  

var visParam = {  
min: -0.2,  
max: 0.8,  
palette: ["FFFFFF", "CE7E45", "DF923D", "F1B555", "FCD163",  
          "99B718", "74A901", "66A000", "529400", "3E8601",  
          "207401", "056201", "004C00", "023B01", "012E01",  
          "011D01", "011301"]  
};  
Map.addLayer(l8Col.first().clip(roi), visParam, "l8Col");
//使用first(),返回集合的第一个非空元素,即第一景影像

8、发布APP

9、存储空间

  • Google Driver

  • Google Assets

10、公共库

公共库是软件程序开发中的一个概念,具体指把通用的方法编写到一个或者多个文件中,这些公共的文件可以在所有的项目中以类库的方式进行调用,这就是公共库。

在GEE中定义公共库是将公共代码放置在一个单独文件内,使用exports作为导出定义,在调用库的地方使用require即可实现

公共库中计算NDVI代码

/**
* NDVI = (nir - red) / (nir + red)
* */
function l8NDVI(image) {
 return image.addBands(image.normalizedDifference(["B5", "B4"]).rename("NDVI"));
}

exports.l8NDVI = l8NDVI;

公共库的主程序代码

var lib = require("users/wangweihappy0/myTrainingShare:training01/lib");
var geometry = /* color: #d63000 */ee.Geometry.Polygon(
      [[[115.73063354492183, 38.0283609762046],
        [115.83225708007808, 38.02727921876993],
        [115.8336303710937, 38.09756022187834],
        [115.73338012695308, 38.09539873615892]]]);
var l8NDVI = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT_TOA")
            .filterDate("2018-2-1", "2018-5-1")
            .filterBounds(geometry)
            .map(lib.l8NDVI)
            .select("NDVI")
            .mosaic()
            .clip(geometry);
Map.centerObject(geometry, 11);
var visParam = {
 min: -0.2,
 max: 0.8,
 palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
   '3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
print(l8NDVI);
Map.addLayer(l8NDVI, visParam, "NDVI");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值