百里屠苏top  

目录

一、Filter

二、Map

三、Reduce

一、Filter

1.1 FilterDate 

1.用法
ImageCollection.filterDate('2010-01-01', '2010-01-01')
// var imgCol = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2');
// How many Tier 1 Landsat 5 images have ever been collected? //print("All images ever: ", imgCol.size()); // A very large number 目前有 1869014景 //FilterDate // How many images were collected in the 2010s? //var imgColfilteredByDate = imgCol.filterDate('2010-01-01', '2010-01-01'); var startDate = '2010-01-01'; var endDate = '2010-12-31'; var imgColfilteredByDate = imgCol.filterDate(startDate, endDate); print("All images 2010s: ", imgColfilteredByDate.size()); // A smaller (but still large) number

2.查看影像集的影像数量

   ImageCollection .size()

1.2 FilterBounds

var ShanghaiImage = ee.Image( 'LANDSAT/LT05/C02/T1_L2/LT05_118038_20000606');

Map.centerObject(ShanghaiImage, 9); 
var imgColfilteredByDateHere = imgColfilteredByDate.filterBounds(Map.getCenter()); 
print("All images here, 2010: ", imgColfilteredByDateHere .size()); // A smaller number

1. ImageCollection .filterBounds()

filterBounds()中的参数可以是一个点,一个矩形或上传的面矢量数据;

 通过print可以看到这里是一个点。

2. Map.getCenter() 

获取地图的中心位置坐标。 

3. Map.centerObject()

将对象缩放到地图中间。

 

Map.centerObject(ShanghaiImage, 9); 

1.3 Filter by Other Image Metadata

 上面是根据影像日期和范围对影像集进行了筛选,下面根据影像本身的元数据继续进行筛选。可以根据影像本身的云量多少进行筛选。
//FilterMetadata
var L5FilteredLowCloudImages = imgColfilteredByDateHere .filterMetadata('CLOUD_COVER', 'less_than', 50); 
print("Less than 50% clouds in this area, 2010", L5FilteredLowCloudImages.size());

1.用法

.filterMetadata('影像本身的云量波段名称', 'less_than', 50)
说明:
1.'影像本身的云量波段名称':是影像本身的云量波段,landsat 卫星自身的云量波段名字为'CLOUD_COVER',而sentinel-2的云量波段名称为“CLOUDY_PIXEL_PERCENTAGE”;
     2. 少于50%的云量

1.4 Filtering in an Efficient Order 以一个有效的方式过滤

上面通过日期、范围、云量三种方式进行了影像筛选,那么怎样的一个筛选顺序可以提高我们的运行速度呢?

var efficientFilteredSet = imgCol.filterBounds(Map.getCenter()) .filterDate(startDate, endDate) .filterMetadata('CLOUD_COVER', 'less_than', 50); 
print('Efficient filtering: Less than 50% clouds in this area, 2000-2010', efficientFilteredSet.size()); 

filterBounds------filterDate------filterMetadata 的顺序更高效一点。

 

二、Map

在Google Earth Engine(GEE)中,Mapmap这两个词虽然看起来非常相似,但它们在用法上有着根本的不同,主要体现在两个方面:Map对象和map方法。

Map对象:指的是Google Earth Engine中的地图显示对象,用于在GEE代码编辑器的地图区域中添加图层、设置视觉化参数、调整地图视图等。Map对象是与地图界面交互的主要手段。

map方法:是FeatureCollectionImageCollectionList等集合上的一个方法,用于对集合中的每个元素应用一个函数。这是一个非常重要的方法,用于批量处理集合中的数据

2.1 Map. 常用的方法

  • add(item) 添加组件到Map上,比如Panel等
  • addLayer(eeObject, visParams, name, shown, opacity) 添加图层到Map上
  • centerObject(object, zoom) 以object对象范围居中显示,同时设置缩放级别为zoom
  • clear() 清理Map
  • getBounds() 获取Map的边界
  • getScale() 获取Map的分辨率
  • getCenter() 获取Map的中心
  • getZoom() 获取Map缩放级别
  • insert(index, widget) 添加组件到制定的位置
  • layers() 获取所有的图层
  • remove(item) 移除组件
  • setControlVisibility(xxxx) 设置Map地图上控件是否显示,可以设置缩放组件、全屏组件、地图类型组件等
  • setCenter(lon, lat, zoom) 设置居中位置以及缩放级别
  • setOptions(mapTypeId, styles, types) 设置地图的相关选项
  • setZoom(zoom) 设置级别
  • style() 获取样式
  • widgets() 获取所有的组件

2.2 map. 的用法

var featureCollection = ee.FeatureCollection([...]);
var newFeatureCollection = featureCollection.map(function(feature) {
  return feature.set('newProperty', 123);
});
//在这个例子中,map方法遍历featureCollection中的每一个Feature,并通过一个匿名函数给每个Feature添加一个名为newProperty的新属性。

1. for ,while , map , evaluate, iterate的异同

  • for、while:就是基本的循环结构语句,但是在GEE里很少用,基本用 map 替代,因为是顺序执行代码,效率太慢
  • map:用的最多,执行效率最快,相当于“并行执行任务”,能用 map,就用 map,但是函数里一般不能用 print,Map,toDrive 等方法
  • iterate:“迭代”,顺序执行,每次执行都在前面执行的结果上继续执行,很遗憾,这次的例子没有体现“迭代”的意思
  • evaluate:主要用来异步导出和显示,加快速度,一般没有返回值,结合 for 和 map 一起用,这里的 map 里可以有 print,Map,toDrive 方法

 

三、Reducing an Image Collection

 将一个集合通过对每一个像素列表求和、求极值等方式变成为一张影像。

3.1  ee.Reducer.first() 返回输入的第一个元素

 1.用法

对象. reduce(ee.Reducer.first())

3.2 GEE 中

 



posted on 2024-03-14 11:48  百里屠苏top  阅读(28)  评论(0编辑  收藏  举报