全球高精度土地利用数据服务 全国作物类型空间分布数据服务 二级分类土地利用数据30m 高精度植被类型分布数据 全国城市功能区划分布数据 全国DEM高程数据服务 全国耕地数据空间分布服务 全国林地分类数据空间分布服务 全国草地类型分类数据空间分布服务 全国水体数据空间分布服务 全国建设用地数据空间分布服务 全国未利用地数据空间分布服务 地形、地貌、土壤理化性质数据服务 全国坡度坡向数据服务 一级分类土地利用数据30m
全国降水量空间分布数据集 全国气温空间分布数据集 太阳辐射量空间分布数据集 全国气象站点观测数据集 全国平均风速空间分布数据集 全国平均水汽压空间分布数据集 全国蒸散量空间分布数据集 全国日照时数空间分布数据集 全国相对湿度空间分布数据集 全国地表温度空间分布数据集 全国气候区划空间分布数据集 全国气象站点空间分布数据集 全国土壤湿度空间分布数据集 全国水文站点地表径流量空间分布数据集
土壤类型空间分布数据服务 土壤质地空间分布数据服务 土壤有机质空间分布数据服务 土壤酸碱度空间分布数据服务 土壤氮磷钾空间分布数据服务 土壤深度空间分布数据服务 土壤侵蚀强度空间分布数据服务 土壤含水量空间分布数据服务 土壤重金属含量空间分布数据服务 中国土壤阳离子交换量空间分布数据 中国土壤容重含量空间分布数据
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国人口密度数据服务 全国poi感兴趣点空间分布数据 全国医院空间分布数据服务 全国学校空间分布数据服务 全国居民点空间分布数据 全国旅游景区空间分布数据 全国机场空间分布数据 全国地铁线路站点空间分布数据 人口调查空间分布数据服务 社会经济统计年鉴数据 中国各省市统计年鉴 中国县级统计年鉴数据 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政区划空间分布数据服务
Landsat陆地资源卫星影像 高分二号遥感影像数据 高分一号遥感影像数据 Sentinel2哨兵2卫星影像 SPOT系列卫星遥感影像数据 WorldView卫星遥感影像数据 资源三号卫星遥感影像数据 GeoEye卫星遥感影像数据 NOAA/AVHRR卫星遥感影像 MODIS卫星遥感影像 环境小卫星 Rapideye快鸟卫星影像
高精度归一化植被指数NDVI空间分布数据 高精度净初级生产力NPP空间分布数据 LAI叶面积指数空间分布数据 全国地表温度LST空间分布数据 全国生态系统服务空间数据集 全国湿地沼泽分类空间分布数据集 全国陆地生态系统类型空间分布数据集 全国农田生产潜力数据集 全国GPP初级生产力数据 全国农田熟制空间分布数据集 中国植被区划数据 中国草地资源数据 全国月度NDVI归一化植被指数空间分布数据 月度净初级生产力NPP空间分布数据 全国年度NDVI归一化植被指数空间分布数据 年度净初级生产力NPP空间分布数据 增强型植被指数EVI空间分布数据 RVI比值植被指数空间分布数据
最近发现好多人都在问一个问题,两张影像如何取其相交区域?其实这个问题简单来讲就是多张栅格影像进行叠加分析。在GEE中栅格影像不像矢量数据那样有直接的函数来做数据分析,需要我们自己手动写一些代码来实现这些操作。要实现这个功能有很多方法,这里简单说一下有几种方式:
第一种:先将栅格影像数据转换为矢量数据,然后在利用矢量数据计算。这种方式想想可以,但是千万别在实际中使用。
第二种:直接使用影像自带的方法mask()和updateMask()实现,这种方法简单快捷,下面我会通过具体的例子来说明一下如何实现这个功能。
下面通过A:蓝色区域,B:粉色区域,来展示不同叠置分析具体是什么样子,相信大家对下面这个图非常清楚了,就在一一解释,下面通过具体例子来说明影像如何实现这几种情况。
公共代码:
var center = /* color: #0b4a8b */ee.Geometry.Point([115.78080896985244, 37.569622364096226]);
var img = ee.Image("LANDSAT/LC08/C01/T1_SR/LC08_123034_20160504")
.multiply(0.0001)
.normalizedDifference(["B5", "B4"])
.rename("NDVI");
var vis = {
min: 0,
max: 1,
palette: [
'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
'66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
'012E01', '011D01', '011301'
],
};
Map.centerObject(center, 8);
Map.addLayer(img, vis, "NDVI", false);
var roi1 =
ee.Geometry.Polygon(
[[[115.58854822766494, 37.72402725521113],
[115.58854822766494, 37.48467189570746],
[115.92912439953994, 37.48467189570746],
[115.92912439953994, 37.72402725521113]]], null, false),
roi2 =
ee.Geometry.Polygon(
[[[115.78630213391494, 37.62185147647586],
[115.78630213391494, 37.36688853978036],
[116.1406112159462, 37.36688853978036],
[116.1406112159462, 37.62185147647586]]], null, false);
var imgA = img.clip(roi1);
var imgB = img.clip(roi2);
Map.addLayer(roi1, {color: "00ffff"}, "roi1", false);
Map.addLayer(roi2, {color: "ff00ff"}, "roi2", false);
Map.addLayer(imgA, vis, "imgA");
Map.addLayer(imgB, vis, "imgB");
运行结果如下:
1、AB相交,取AB交集
下面的例子计算的就是A和B的交集,然后结果返回的是A的数据结果
//A B交集
var intersection = imgA.updateMask(imgB.mask());
Map.addLayer(intersection, vis, "intersection");
运行结果:
2、AB相交,取AB并集
取并集可以有很多中方式,下面介绍两种常用的方式,一种是利用mask()和updateMask()来做,另外一种方式则是利用构建ImageCollection方式来做。
第一种方式,需要说明的是下面这个代码返回相交区域结果是两张影像求和的结果
//(1)A B并集
var mask = imgA.mask().or(imgB.mask());
var baseImg = ee.Image.constant(0)
.updateMask(mask);
var newImgA = baseImg.where(imgA.mask(), imgA);
var newImgB = baseImg.where(imgB.mask(), imgB);
var union = newImgA.add(newImgB);
Map.addLayer(union, vis, "union");
返回结果如下,点击的是箭头指示的地方,可以看到union的影像是两张影像的和,非相交的地方则是对应自己的结果。
第二种方式,构造ImageCollection,然后计算并集
//(2)A B并集
var imgAB = ee.ImageCollection.fromImages([imgA, imgB]);
var union1 = imgAB.mosaic();
Map.addLayer(union1, vis, "union1");
var union2 = imgAB.sum();
Map.addLayer(union2, vis, "union2");
其中:union1是普通的拼接而得到的结果,每一个像素结果都是唯一的;union2是求和计算拼接的结果,运算结果和第一种方式类似。
3、AB相交,AB的交集取反
计算这个关键就是如何删除交集,主要逻辑就是考虑清楚下面代码mask2就可以,这个是交集的掩膜,那么只要对这个掩膜取反就可以了。
// AB的交集取反
var mask = imgA.mask().or(imgB.mask());
var baseImg = ee.Image.constant(0)
.updateMask(mask);
var newImgA = baseImg.where(imgA.mask(), imgA);
var newImgB = baseImg.where(imgB.mask(), imgB);
var mask2 = imgA.mask().and(imgB.mask());
var symmetricDifference = newImgA.add(newImgB)
.updateMask(mask2.not());
Map.addLayer(symmetricDifference, vis, "symmetricDifference");
运行结果如下:
4、AB相交,取属于A但非B
具体代码如下:
//取属于A但非B
var difference = imgA.updateMask(imgB.mask().not());
Map.addLayer(difference, vis, "difference");
运行结果:
总结一下就是影像要实现叠置分析,最关键就是明白影像中的mask()、updateMask()、unmask()等方法使用,通过这些方法结合and、or、not等逻辑判断就可以实现自己想要的各种结果。
来源请引用:地理遥感生态网科学数据注册与出版系统。