PIE-Engine 教程:水稻面积提取1(宿迁市)

简介: PIE-Engine 教程:水稻面积提取1(宿迁市)

   我们这次用国家的边界通过name进行筛选到宿迁市进行分析,本次计算的水稻面积用到的指数是NDVI,LSWI,EVI三种指数进行分析,用到的影像是Landsat 8数据,DEM数据(计算坡度、坡向)还有指定5月和8月份SAR影像("VH1","VH2")最后分别加入到Landsat波段影像,可导出我们所合成的影像。先看所用到的函数:

aspect(input)

计算地形DEM数据的坡向信息(以度为单位),局部梯度是用每个像素的4个连通邻域来计算的,因此图像的边缘会出现缺失值。

方法参数:

- terrain(Terrain)

DEM数据处理方法。

- input(Image)

地形DEM数据,以米为单位。

返回值:Image

slope(image)

计算地形DEM数据的坡度信息(以度为单位),局部梯度是用每个像素的4个连通邻域来计算的,因此图像的边缘会出现缺失值。

方法参数:

- terrain(Terrain)

DEM数据处理方法。

- image(Image)

地形DEM数据,以米为单位。

返回值:Image

addBands(srcImg,names,overwrite)

添加影像中的波段到当前影像。

方法参数:

- dstImg(Image)

Image实例。

- srcImg(Image)

要添加波段的影像对象。

- names(String|Array<String>)

波段名称列表,默认为null,表示全部添加。

- overwrite(Boolean)

相同名称是否覆盖,默认是false。

返回值:Image

map(algorithm,dropNulls)

针对ImageCollection中的每个Image进行循环计算。

方法参数:

- imageCollection(ImageCollection)

ImageCollection实例。

- algorithm(Function)

参数是Image的方法,需要返回Image

- dropNulls(Boolean)

是否允许返回空值

返回值:ImageCollection

代码:

/**
 * @Name    :   基于 PIE Engine Studio 的水稻自动提取
 * @Author  :   武汉大学VHR队
 * @Desc    :   淮安市水稻提取 -- 合成监督分类影像
 * @Source  :   航天宏图第四届 “航天宏图杯”PIE软件二次开发大赛云开发组三等奖获奖作品
 */
//1.合成监督分类影像
var area = pie.Geometry.Polygon([
    [
        [
            118.19042604840365,
            32.717477656827796
        ],
        [
            119.67193792508522,
            32.717477656827796
        ],
        [
            119.67193792508522,
            34.12687250105918
        ],
        [
            118.19042604840365,
            34.12687250105918
        ],
        [
            118.19042604840365,
            32.717477656827796
        ]
    ]
], null);
//加载淮安市矢量
var roi = pie.FeatureCollection("NGCC/CHINA_CITY_BOUNDARY")
    .filter(pie.Filter.eq('name', '淮安市'))
    .first()
    .geometry()
Map.centerObject(roi, 8)
Map.addLayer(roi, { color: "red", fillColor: "00000000", width: 2 }, "Huaian")
//NDVI
function NDVI(image) {
    var red = image.select("B4")
    var nir = image.select("B5")
    var ndvi = (nir.subtract(red)).divide(nir.add(red)).multiply(10000)
    return image.addBands(ndvi.rename("NDVI"));
}
//LSWI
function LSWI(image) {
    var swir = image.select("B6")
    var nir = image.select("B5")
    var lswi = (nir.subtract(swir)).divide(nir.add(swir)).multiply(10000)
    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 cloudMask(image) {
    var qa = image.select('BQA');
    var cloudMask = qa.bitwiseAnd(1 << 4).eq(0);
    return image.updateMask(cloudMask);
};
//选择用于分类的影像并裁剪
var l8col = pie.ImageCollection("LC08/01/T1")
    .filterBounds(roi)
    .filterDate("2020-3-1", "2020-12-1")
    .select(["B2", "B3", "B4", "B5", "B6", "B7", "BQA"])
    .map(cloudMask)
    .map(NDVI)
    .map(LSWI)
    .map(EVI)
    .median()
//选取dem
var dem = pie.ImageCollection('DEM/SRTM_30')
    .filterBounds(roi)
    .select('elevation')
    .mosaic()
    .clip(roi);
var aspect = pie.Terrain.aspect(dem);
var slope = pie.Terrain.slope(dem).multiply(180 / 3.1415926);
//选取SAR 5月8月影像
var sarmay = pie.Image('user/pieadmin/saas/06/sar_may').select('B1').multiply(10000).clip(roi);
var saraug = pie.Image('user/pieadmin/saas/06/sar_aug').select('B1').multiply(10000).clip(roi);
//选择用于分类的波段         
var bands = [
    "B2", "B3", "B4", "B5", "B6", "B7", "NDVI", "LSWI", "EVI"
]; 
//"VH1","VH2","ASPECT","SLOPE"
//合成用于监督分类的影像
var l8Image = l8col
    .addBands(aspect.rename("ASPECT"))
    .addBands(slope.rename("SLOPE"))
    .addBands(sarmay.rename("VH1"))
    .addBands(saraug.rename("VH2"))
    .select(bands)
    .clip(roi)
//导出影像
Export.image({
    image: l8Image,
    description: "l8Image",
    assetId: "l8Image",
    region: area,
    scale: 30
});

image.png

 

文章知识点与官方知识档案匹配,可进一步学习相关知识

MySQL入门技能树数据库组成19468 人正在系统学习中


相关文章
|
Web App开发 前端开发 JavaScript
介绍Chrome DevTools的使用方法,助您更好地掌握这款工具
【6月更文挑战第14天】Chrome DevTools是Chrome内置的网页调试利器,提供Elements(编辑HTML/CSS)、Console(JavaScript调试)、Sources(查看/调试JS/CSS文件)、Network(分析网络请求)和Performance(性能瓶颈分析)等面板,助力开发者优化网页性能和用户体验。通过掌握其使用,可提升开发效率。
398 2
|
IDE 调度 开发工具
如何在S32DS中使用SystemView分析FreeRTOS
如何在S32DS中使用SystemView分析FreeRTOS
如何在S32DS中使用SystemView分析FreeRTOS
|
7月前
|
人工智能 程序员 API
Motia:程序员福音!AI智能体三语言混编,零基础秒级部署
Motia 是一款专为软件工程师设计的 AI Agent 开发框架,支持多种编程语言,提供零基础设施部署、模块化设计和内置可观测性功能,帮助开发者快速构建和部署智能体。
529 15
Motia:程序员福音!AI智能体三语言混编,零基础秒级部署
|
6月前
|
存储 自然语言处理 前端开发
2025年大模型发展脉络:深入分析与技术细节
本文深入剖析2025年大模型发展脉络,涵盖裸模型与手工指令工程、向量检索、文本处理与知识图谱构建、自动化提示生成、ReAct多步推理及AI Agent崛起六大模块。从技术细节到未来趋势,结合最新进展探讨核心算法、工具栈与挑战,强调模块化、自动化、多模态等关键方向,同时指出计算资源、数据质量和安全伦理等问题。适合关注大模型前沿动态的技术从业者与研究者。
2063 9
|
XML 前端开发 Java
Spring Boot中怎么使用BPMN
在Spring Boot中集成BPMN工作流,如Camunda,能实现业务流程自动化。以请假流程为例,步骤包括:创建Spring Boot项目并添加Camunda依赖;使用Camunda Modeler设计请假流程,涵盖提交申请、经理审批、HR记录及流程完成阶段;保存BPMN文件至`src/main/resources`目录,以便Camunda自动部署;实现流程逻辑,如通过REST API启动流程实例,并传递请假请求数据。整个过程展示了BPMN流程从设计到部署的完整周期,使业务流程自动化变得高效且直接。 **注意:**摘要已压缩至240字符内,部分内容被省略。
922 2
Spring Boot中怎么使用BPMN
|
11月前
|
编解码 搜索推荐 数据安全/隐私保护
创作高质量网页内容时,怎样使用图片和视频等多媒体元素?
在创作高质量网页内容时,合理使用图片、视频等多媒体元素能够显著增强内容的吸引力、可读性和分享性
|
9月前
|
存储 SQL 数据采集
Django框架的表单验证和过滤机制的原理是什么?
Django框架的表单验证和过滤机制的原理是什么?
207 73
|
9月前
|
人工智能 分布式计算 Cloud Native
云原生数据仓库AnalyticDB:深度智能化的数据分析洞察
云原生数据仓库AnalyticDB(ADB)是一款深度智能化的数据分析工具,支持大规模数据处理与实时分析。其架构演进包括存算分离、弹性伸缩及性能优化,提供zero-ETL和APS等数据融合功能。ADB通过多层隔离保障负载安全,托管Spark性能提升7倍,并引入AI预测能力。案例中,易点天下借助ADB优化广告营销业务,实现了30%的任务耗时降低和20%的成本节省,展示了云原生数据库对出海企业的数字化赋能。
335 3
|
Web App开发 Linux 开发工具
告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
【8月更文挑战第4天】告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧