目录
一、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)中,Map
与map
这两个词虽然看起来非常相似,但它们在用法上有着根本的不同,主要体现在两个方面:Map
对象和map
方法。
Map
对象:指的是Google Earth Engine中的地图显示对象,用于在GEE代码编辑器的地图区域中添加图层、设置视觉化参数、调整地图视图等。Map
对象是与地图界面交互的主要手段。
map
方法:是FeatureCollection
、ImageCollection
和List
等集合上的一个方法,用于对集合中的每个元素应用一个函数。这是一个非常重要的方法,用于批量处理集合中的数据。
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 中