中国区域指数分析计算
# 中国区域指数分析计算
平台提供了丰富的交互式UI组件,包括文本、表格、单选框、输入框、颜色选择器、日期选择器、数字输入框、复选框、开关按钮、滑动条、下拉列表、按钮等。用户可通过程序调用内置的UI组件,为自己的程序添加自定义的界面控件,实现可视化操作分析。
PIE-Engine Studio遥感计算云服务平台调用UI组件,以landsat8_toa数据为例,通过输入行政区划编码、选择不同的指数、输入开始和结束日期,展示不同指数的分析计算,并加载到交互地图实现地图展示。
# 1)数据分析
覆盖中国地区的2013年至今的landsat8_toa数据,根据UI界面输入行政区划编码、日期,选择NDVI、NDWI、MNDWI、EVI等多个指数进行分析计算。
行政代码编号查询地址:http://www.mca.gov.cn/article/sj/xzqh/2020/
# 2) 核心代码示例
//定义常量参数
var layerKey = null;
var roiKey = null;
var selectTag = "NDVI";
var selectStartDate = "2020-4-1";
var selectEndDate = "2020-5-1";
var selectCode = "110000";
//获取指定的ROI数据
function getROI(code) {
var fCol = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY");
var roi = fCol.filter(pie.Filter.eq("code", parseInt(code))).first().geometry();
if (roiKey != null) {
Map.removeLayer(roiKey);
}
Map.centerObject(roi, 6);
roiKey = Map.addLayer(roi, {color:"#ff0000", fillColor:"#00000000"}, "roi");
return roi;
}
//定义Landsat8不同指数计算方式
var landsat8 = {
//NDWI: (B03 - B05)/(B03 + B05)
NDWI: function (image) {
var b3 = image.select("B3");
var b5 = image.select("B5");
var ndvi = (b3.subtract(b5)).divide(b3.add(b5));
return ndvi.rename("NDVI");
},
//MNDWI: (G - SWIR)/(G + SWIR)
MNDWI: function (image) {
var b3 = image.select("B3");
var b6 = image.select("B6");
var ndvi = (b3.subtract(b6)).divide(b3.add(b6));
return ndvi.rename("MNDWI");
},
//NDVI: (B05 - B04)/(B05 + B04)
NDVI: function (image) {
var b5 = image.select("B5");
var b4 = image.select("B4");
var ndvi = (b5.subtract(b4)).divide(b5.add(b4));
return ndvi.rename("NDVI");
},
//EVI: 2.5*(B05 - B04) / (B05 + 6*B04 - 7.5*B02 + 1)
EVI: function (image) {
var nir = image.select("B5").divide(10000);
var red = image.select("B4").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));
return evi.rename("EVI");
},
}
function cacluateVI(roi, startDate, endDate, tag) {
//影像集合
var l8Col = pie.ImageCollection("LC08/01/T1");
//通过日期过滤影像集合,并且计算指数
l8Col = l8Col.filterDate(startDate, endDate)
.select(["B2","B3","B4", "B5","B6","BQA"])
.filterBounds(roi)
.map(function(image) {
var qa = image.select("BQA");
var cloudMask = qa.bitwiseAnd(1<<4).eq(0);
return image.updateMask(cloudMask);
}) ;
var image = null;
var visParam = null;
switch(tag) {
case "NDVI":
//NDVI绘制样式
visParam = {
min: -0.2,
max: 0.8,
palette: 'CA7A41, CE7E45, DF923D, F1B555, FCD163, 99B718, '+
'74A901, 66A000, 529400,3E8601, 207401, 056201, 004C00,'+
'023B01, 012E01, 011D01, 011301'
};
image = l8Col.map(landsat8.NDVI).mean();
break;
case "NDWI":
visParam = {
min: -1,
max: 0.3,
palette: 'FFFFFF,0000FF'
};
image = l8Col.map(landsat8.NDWI).mean();
break;
case "MNDWI":
visParam = {
min: -1,
max: 0.3,
palette: 'FFFFFF,0000FF'
};
image = l8Col.map(landsat8.MNDWI).mean();
break;
case "EVI":
visParam = {
min: -0.2,
max: 0.8,
palette: 'CA7A41, CE7E45, DF923D, F1B555, FCD163, 99B718, '+
'74A901, 66A000, 529400,3E8601, 207401, 056201, 004C00,'+
'023B01, 012E01, 011D01, 011301'
};
image = l8Col.map(landsat8.EVI).mean();
break;
}
if (layerKey != null) {
Map.removeLayer(layerKey);
}
layerKey = Map.addLayer(image.clip(roi), visParam, tag);
}
// Label
var label = ui.Label("PIE-Engine遥感云计算平台", {"font-size": "18px"}, "https://engine.piesat.cn")
// select
function changeSelect(value) {
selectTag = value;
}
var select1 = ui.Select(
{
items: ['NDVI', 'NDWI', "MNDWI", "EVI"],
placeholder: "请选择",
value: selectTag,
multiple: false,
onChange: changeSelect
}
)
var selectName = ui.Label("选择指数:");
var selectPanel = ui.Panel({
widgets: [selectName, select1],
layout: ui.Layout.flow("horizontal")
});
function inputArea(value) {
selectCode = value;
}
var textBox3 = ui.TextBox(
{
placeholder: "请输入行政区划编码",
value: selectCode,
onChange: inputEDate,
disabled: false
}
)
var textboxName3 = ui.Label("行政区划:");
var textboxPanel3 = ui.Panel({
widgets: [textboxName3, textBox3],
layout: ui.Layout.flow("horizontal")
});
// TextBox
function inputSDate(value) {
selectStartDate = value;
}
var textBox1 = ui.TextBox(
{
placeholder: "请输入开始日期",
value: selectStartDate,
onChange: inputSDate,
disabled: false
}
)
var textboxName1 = ui.Label("开始日期:");
var textboxPanel1 = ui.Panel({
widgets: [textboxName1, textBox1],
layout: ui.Layout.flow("horizontal")
});
function inputEDate(value) {
selectEndDate = value;
}
var textBox2 = ui.TextBox(
{
placeholder: "请输入结束日期",
value: selectEndDate,
onChange: inputEDate,
disabled: false
}
)
var textboxName2 = ui.Label("结束日期:");
var textboxPanel2 = ui.Panel({
widgets: [textboxName2, textBox2],
layout: ui.Layout.flow("horizontal")
});
// Button
function clickBtn() {
print("点击按钮,选择的参数是:", selectCode+":"+selectTag + ":" + selectStartDate+"_"+selectEndDate);
var roi = getROI(selectCode);
cacluateVI(roi, selectStartDate, selectEndDate, selectTag);
}
var btn1 = ui.Button({
label: "取消",
style: {left:"50px"}
});
var btn2 = ui.Button({
label: "确定",
type: "success",
onClick: clickBtn,
style: {left:"50px"}
});
var btnPanel = ui.Panel({
widgets: [btn1, btn2],
layout: ui.Layout.flow("horizontal")
});
// panel
var panel = ui.Panel({
widgets: [
label, selectPanel,
textboxPanel3,
textboxPanel1,textboxPanel2,
btnPanel
],
style: {
width: "300px",
height: "300px",
backgroundColor: "#fff"
}
});
ui.root.add(panel);
复制错误复制成功
流程步骤如下:
a) 进行参数的定义;
b) 获取指定的行政区划数据
c) 定义landsat8_toa的不同指数计算方式
d) 通过日期、行政区划过滤影像集,并进行无云镶嵌后的指数计算
e) 将得到的指数影像加载到交互地图实现地图展示
# 3)涉及到的ui组件
• ui.Button 按钮
• ui.Panel 容器
• ui.TextBox 文本框
• ui.Label 文本
• ui.Select 下拉列表
# 4) 结果分析展示
• NDVI指数的结果展示结果:
• NDWI指数的结果展示如下:
有问题,我来改改 (opens new window)
上次更新: 2022/05/25, 09:15:11