PIE-Engine 教程:水稻面积提取3—sentinel2合成月度影像宿迁市)

简介: PIE-Engine 教程:水稻面积提取3—sentinel2合成月度影像宿迁市)

   这里分别获取计算2019年和2020年LSWI、EVI两期影像的分析,这里我们有几个常用的函数其中过一个是构建影像集合的一个函数:

fromImages(images)

根据Image列表构建ImageCollection对象。

方法参数:

- imageCollection(ImageCollection)

ImageCollection实例。

- images(Array)

影像数据列表

返回值:ImageCollection

大家这里可能有点疑问关于代码中的分析,EVI影像的波段代码要divide(1000),因为这里的sentinel2的波段中每一个波长

名称 中心波长(nm) 分辨率(m) 描述信息
A B
B1 443.9 442.3 60 Aerosols
B2 496.6 492.1 10 Blue
B3 560 559 10 Green
B4 664.5 665 10 Red
B5 703.9 703.8 20 Red Edge 1
B6 740.2 739.1 20 Red Edge 2
B7 782.5 779.7 20 Red Edge 3
B8 835.1 833 10 NIR
B8A 864.8 864 20 Red Edge 4
B9 945 943.2 60 Water vapor
B10 1373.5 1376.9 60 Cirrus
B11 1613.7 1610.4 20 SWIR 1
B12 2202.4 2185.7 20 SWIR 2
QA10 443.9 442.3 10 --
QA20 -- -- 20 --
QA60 -- -- 60 --
Bitmask for QA60
  • Bits 10: Opaque clouds
    • 0: No opaque clouds
    • 1: Opaque clouds present
  • Bits 11: Cirrus clouds
    • 0: No cirrus clouds
    • 1: Cirrus clouds present

代码:

/**
 * @Name    :   基于 PIE Engine Studio 的水稻自动提取
 * @Author  :   武汉大学VHR队
 * @Desc    :   淮安市水稻提取 - 合成sentinel2月度影像
 * @Source  :   航天宏图第四届 “航天宏图杯”PIE软件二次开发大赛云开发组三等奖获奖作品
 */
//3.合成sentinel2月度影像
//选择淮安市矢量
var roi = pie.FeatureCollection("NGCC/CHINA_CITY_BOUNDARY").filter(pie.Filter.eq('name', '淮安市')).first().geometry()
Map.centerObject(roi, 8)
Map.addLayer(roi)
//LSWI
function LSWI(image) {
    var swir = image.select("B11")
    var nir = image.select("B8")
    var lswi = (nir.subtract(swir)).divide(nir.add(swir))
    return image.addBands(lswi.rename("LSWI"));
}
//EVI
function EVI(image) {
    var red = image.select("B4").divide(10000)
    var nir = image.select("B5").divide(10000)
    var blue = image.select("B2").divide(10000)
    var evi = ((nir.subtract(red)).multiply(2.5))
        .divide(nir.add(red.multiply(6)).subtract(blue.multiply(7.5)).add(1))
        .multiply(10000)
    return image.addBands(evi.rename("EVI"));
}
//去云处理
function maskS2clouds(image) {
    //选择有关云掩膜的波段
    var qa = image.select('QA60')
    //位10和11分别代表云和卷云。
    var cloudBitMask = 1 << 10;
    var cirrusBitMask = 1 << 11;
    // 将有关云的像元置为0
    var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
        .and(qa.bitwiseAnd(cirrusBitMask).eq(0))
    return image.updateMask(mask)
}
var area = pie.Geometry.Polygon([
    [
        [
            118.33558377212347,
            32.62288800615681
        ],
        [
            119.24768569883133,
            32.62288800615681
        ],
        [
            119.24768569883133,
            31.21438784070145
        ],
        [
            118.33558377212347,
            31.21438784070145
        ],
        [
            118.33558377212347,
            32.62288800615681
        ]
    ]
], null);
//合成lswi波段的月度影像(做这个实验时由于map函数存在问题不能同时进行两个波段计算,因此分开计算)
var lswi1 = pie.ImageCollection('S2/L1C')
    .filterBounds(roi)
    .filterDate("2019-12-1", "2019-12-31")
    .select(['B2', 'B4', 'B8', 'B11', 'QA60'])
    .map(maskS2clouds)
    .map(LSWI)
    .select(['LSWI'])
    .mosaic()
    .clip(roi)
var lswi2 = pie.ImageCollection('S2/L1C')
    .filterBounds(roi)
    .filterDate("2020-12-1", "2020-12-31")
    .select(['B2', 'B4', 'B8', 'B11', 'QA60'])
    .map(maskS2clouds)
    .map(LSWI)
    .select(['LSWI'])
    .mosaic()
    .clip(roi);
//合成evi波段的月度影像              
var evi1 = pie.ImageCollection('S2/L1C')
    .filterBounds(roi)
    .filterDate("2019-12-1", "2019-12-31")
    .select(['B2', 'B4', 'B8', 'B11', 'QA60'])
    .map(maskS2clouds)
    .map(EVI)
    .select(['EVI'])
    .mosaic()
    .clip(roi)
var evi2 = pie.ImageCollection('S2/L1C')
    .filterBounds(roi)
    .filterDate("2020-12-1", "2020-12-31")
    .select(['B2', 'B4', 'B8', 'B11', 'QA60'])
    .map(maskS2clouds)
    .map(EVI)
    .select(['EVI'])
    .mosaic()
    .clip(roi);
//将2019年和2020年对应月份影像取均值合成              
var lswi = pie.ImageCollection.fromImages([lswi1, lswi2]).mean()
var evi = pie.ImageCollection.fromImages([evi1, evi2]).mean()
var jan = lswi.addBands(evi);
//导出月度影像
Export.image({
    image: jan,
    description: 'jan',
    assetId: "jan",
    region: area,
    scale: 30,
})


相关文章
|
编解码 算法
PIE-engine 教程 ——sentinel-2影像数据去云分析(山西省为例)
PIE-engine 教程 ——sentinel-2影像数据去云分析(山西省为例)
777 0
PIE-engine 教程 ——sentinel-2影像数据去云分析(山西省为例)
|
4月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
99 1
|
6月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
168 3
|
2月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
3月前
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
5月前
|
监控 Java 应用服务中间件
SpringCloud面试之流量控制组件Sentinel详解
SpringCloud面试之流量控制组件Sentinel详解
248 0
|
5月前
|
监控 Dubbo 应用服务中间件
通用快照方案问题之Sentinel与SpringCloud和Dubbo的整合如何解决
通用快照方案问题之Sentinel与SpringCloud和Dubbo的整合如何解决
54 0
|
6月前
|
Java 开发者 Sentinel
Spring Cloud系列——使用Sentinel进行微服务保护
Spring Cloud系列——使用Sentinel进行微服务保护
76 5
|
6月前
|
监控 Java API
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
152 0
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
|
6月前
|
自然语言处理 监控 开发者
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
148 0