当前位置: 首页 > news >正文

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
});

 

相关文章:

  • CMSC5707-高级人工智能之语音识别
  • AES(对称加密)学习记录
  • 【技术推荐】WebLogic 反序列化漏洞深入分析
  • 提高 IDC 网络带宽利用率
  • JavaWeb综合案例(黑马程序员2021年JavaWeb课程总结,所有功能均实现,包含数据库sql文件)
  • 卫星通信系统按照工作轨道分类
  • JDBC在idea上的配置
  • Kotlin协程:MutableStateFlow的实现原理
  • ElasticSearch入门笔记
  • Pytorch 自动求导的设计与实现
  • 抖音怎么开启直播
  • 【Servlet】Servlet API
  • 关于makefile
  • C语言 变量的存储和引用,内部和外部函数
  • 仿真1 - takeoff_land
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • conda常用的命令
  • CSS实用技巧干货
  • es6(二):字符串的扩展
  • JAVA并发编程--1.基础概念
  • java第三方包学习之lombok
  • leetcode讲解--894. All Possible Full Binary Trees
  • Mac转Windows的拯救指南
  • Meteor的表单提交:Form
  • Shadow DOM 内部构造及如何构建独立组件
  • 猴子数据域名防封接口降低小说被封的风险
  • 前端面试之闭包
  • 如何设计一个比特币钱包服务
  • 数据仓库的几种建模方法
  • 你对linux中grep命令知道多少?
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (ZT)一个美国文科博士的YardLife
  • (力扣题库)跳跃游戏II(c++)
  • (三) diretfbrc详解
  • (一)Linux+Windows下安装ffmpeg
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)memcache、redis缓存
  • *** 2003
  • ***测试-HTTP方法
  • *2 echo、printf、mkdir命令的应用
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core 项目指定SDK版本
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 反射 Reflect
  • .net反编译的九款神器
  • .net访问oracle数据库性能问题
  • .php文件都打不开,打不开php文件怎么办
  • /var/spool/postfix/maildrop 下有大量文件
  • ::什么意思
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...