GEE学习笔记之用时序数据提取洪水_倾城一少的博客-程序员宅基地

技术标签: Powered by 金山文档  GEE  遥感  

前言

遥感技术很早就开始用于洪涝灾害调查。遥感技术可以利用卫星获取的信息,连续、及时、准确地把洪灾情况上报给中央和地方防汛部门,并通过对不同卫星数据的融合处理,综合利用各自的优势,清晰地反映出洪灾态势。本文基于GEE

在本博客中,我们将使用Landsat8绘制柬埔寨的水体。我们将应用云移除并计算NDWI。

1、输入柬埔寨的行政边界

//Get the study area country boundary
var StudyArea = ee.FeatureCollection("projects/servir-mekong/Cambodia-Dashboard-tool/boundaries/cambodia_country");
 
//Add Shape file layer to the Map
Map.addLayer(StudyArea,{},"Cambodia");
 
//Center the Map with the Study Area
Map.centerObject(StudyArea, 8);

2、为柬埔寨导入landsat 8数据

// Get a Landsat-8 TOA collection. 
var L8_collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_RT_TOA');
 
//Filter L8 image collection using shape file (or) boundary
var L8_StudyArea = L8_collection.filterBounds(StudyArea);

3、我们筛选 2020 年

// Define time range
var startyear = 2019;
var endyear = 2020;
  
// Set date in ee date format
var startdate = ee.Date.fromYMD(startyear,1,1);
var enddate = ee.Date.fromYMD(endyear,12,31);
 
//Filter L8 Image Collection with Date
var L8_SA_Date = L8_StudyArea.filterDate(startdate,enddate);
print("Total Images:",L8_SA_Date.size());

4、我们使用云函数从图像中移除云

//Create Cloud Masking Function to remove clouds
var cloudfunction = function(image){
  // set cloud threshold
  var cloud_thresh = 40;
  //use add the cloud likelihood band to the image
  var CloudScore = ee.Algorithms.Landsat.simpleCloudScore(image);
  //isolate the cloud likelihood band
  var quality = CloudScore.select('cloud');
  //get pixels above the threshold
  var cloud01 = quality.gt(cloud_thresh);
  //create a mask from high likelihood pixels
  var cloudmask = image.mask().and(cloud01.not());
  //mask those pixels from the image
  return image.updateMask(cloudmask);
};
 
// mask all clouds in the image collection
var L8_NoCloud = L8_SA_Date.map(cloudfunction);
 
Map.addLayer(L8_NoCloud.mosaic().clip(StudyArea), { min:0.05, max: 0.8, bands: ['B6', 'B5', 'B4']},'Landsat 8 in study  region'); 

5、我们计算集合中每个图像的 NDWI

// Create function to calculate NDWI from landsat 8
//NDWI is Normalized Difference Water Index of NIR (B5) and Green (B3) bands
function Calculate_ndwi(img) {
  var ndwi = img.normalizedDifference(['B3', 'B5']).rename('NDWI');
  return img.addBands(ndwi);
}
 
var L8_ndwi = L8_NoCloud.map(Calculate_ndwi);

6、我们计算 2 个百分位数并使用该信息推导出被淹没的区域

//Set the threshold to difference between Dry and Wet Seasons
var DIFF_THRESHOLD = 0.4;
 
// select dry and wet conditions 
var dry = L8_ndwi.select("NDWI").reduce(ee.Reducer.percentile([10]));
var wet = L8_ndwi.select("NDWI").reduce(ee.Reducer.percentile([90]));
 
var diff = wet.subtract(dry);
 
var indundatedArea = diff.updateMask(diff.gt(DIFF_THRESHOLD)).clip(StudyArea);
 
// add layers 
Map.addLayer(dry.clip(StudyArea),{min:-0.3, max:0.4, palette:"white,blue,darkblue"},"dry");
Map.addLayer(wet.clip(StudyArea),{min:-0.3, max:0.8, palette:"white,blue,darkblue"}, "wet");
Map.addLayer(indundatedArea,{palette:"purple"}, "Indundated Area");

7、我们用道路网络覆盖淹没区域

//import road feature
var roads = ee.FeatureCollection('projects/servir-mekong/osm/cambodia/gis_osm_roads');
 
// create lists to categorize the road networks
var primary = ["primary","primary_link"];
var secondary = ["secondary","secondary_link"];
var tertiary = ["tertiary","tertiary_link"];
var other = ee.List(roads.aggregate_histogram("fclass").keys()).removeAll(primary).removeAll(secondary).removeAll(tertiary);
  
// filter for primary, secondary and tertiary roads
var primaryRoads = roads.filter(ee.Filter.inList("fclass",primary));
var secondaryRoads = roads.filter(ee.Filter.inList("fclass",secondary));
var tertiaryRoads = roads.filter(ee.Filter.inList("fclass",tertiary));
var otherRoads = roads.filter(ee.Filter.inList("fclass",other));
 
Map.addLayer(primaryRoads.draw("red"),{},"primary roads")
Map.addLayer(secondaryRoads.draw("blue"),{},"secondary roads")
Map.addLayer(tertiaryRoads.draw("green"),{},"tertiary roads")
Map.addLayer(otherRoads.draw("gray"),{},"other roads")

8、最终效果

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010329292/article/details/129148674

智能推荐

React学习之旅----Todolist_react学习之旅 todolist-程序员宅基地

文章浏览阅读117次。import React from 'react';class TodoList2 extends React.Component { constructor(props) { super(props) this.state = { list: [ { title: '录制ionic', checked: ..._react学习之旅 todolist

iphone开发视频教程100集-程序员宅基地

文章浏览阅读1.3k次。一、iPhone开发概述及简介1.1 iPhone开发概述-必看 二、Objective-C 基础语法2.1 iPhone开发之开发工具安装及介绍_iphone开发视频教程

c盘清理_run.vbs del c:\users\default\soft.bat /s /f /q del-程序员宅基地

文章浏览阅读104次。echo offtitle 运行bat批处理脚本时先提示获取管理员权限mode con cols=100 lines=20color 3f :: 开始获取管理员权限setlocalset uac=~uac_permission_tmp_%random%md "%SystemRoot%\system32\%uac%" 2>nulif %errorlevel%==0 ( rd "%SystemRoot%\system32\%uac%" >nul 2>nul ) else (_run.vbs del c:\users\default\soft.bat /s /f /q del c:\users\default\power.ba

Python兼职私活接单方法大曝光,这5种方法你知道吗?教你月入三万!_python 接单要怎么聊-程序员宅基地

文章浏览阅读3.3k次,点赞4次,收藏13次。挣钱方法1:接外包爬虫项目这是网络爬虫最通常的的挣钱方式,通过外包网站,熟人关系接一个个中小规模的爬虫项目,一般向甲方提供数据抓取,数据结构化,数据清洗等服务。各位新入行的猿人看官大多都会先尝试这个方向,直接靠技术手段挣钱,这是我们技术人最擅长的方式,但是竞争也是最激烈的,外包接单网站上的爬虫项目已经被砍到了白菜价,因为项目竞价的人太多。接外包的地方在国内有猪八戒网,a5外包等,国外有freelancer,freelancer上挣的是美刀,看官要接外包可以试试,不过要跟印度阿三竞争。美国学生也懒,老猿_python 接单要怎么聊

CentOS7.9下安装Oracle19c-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏13次。安装前准备工作准备一台带有桌面的CentOS 7.x操作系统的服务器。 到Oracle官网下载安装包,选择Linux x86-64,下载入口。进入操作系统后修改系统自带的yum源,命令如下:#首先备份系统原先的yum源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak#获取阿里云的yum源配置文件wget -O /etc/yum.repos.d/CentOS-Base.repo http

redis启动警告问题:WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/so_ChangYan.的博客-程序员宅基地

文章浏览阅读6.5k次。启动redis会有如下WARNING对一个高负载的环境来说tcp设置128这个值,太小了。想要永久解决该问题,首先需要关闭redis,然后打开/etc/sysctl.confsudo vim /etc/sysctl.conf然后再最后加上net.core.somaxconn= 1024如图:之后再执行如下指令sudo sysctl -p进行更新。再重启redis就可以解决了!关于如何重启redis请参考我本篇文章:https://blog.csdn.net/changyana/ar_the tcp backlog setting of 511 cannot be enforced because /proc/sys/net/core

随便推点

UHD630核显驱动方法及驱动后闪屏严重问题解决记录-程序员宅基地

文章浏览阅读2.2w次。前言之前我同学在公司申请了一个台式,硬件是由自己挑选,公司购买。于是乎,我和他一起挑选了兼容性较好的黑苹果硬件,前天组装好。然后就在昨天开始安装黑苹果。同学的电脑硬件配置如下,给大家参考参考:CPU:i5-9600K(一开始推荐的八代U,后来因为和主板组合买便宜点,选了这个。在CPU的选购上大家直接买八代U就好了,当然九代也是可以安装黑苹果的)主板:技嘉z370 HD3(因为加上..._英特尔uhd630显卡问题排查

马云所说的大数据人才,月薪高达30K!-程序员宅基地

文章浏览阅读357次。点击上方“Python大本营”,选择“置顶公众号”Python大本营 IT人的职业提升平台马云曾在卸任演讲的时候说过这样一段话:“很多人还没搞清楚什么是PC互联网,移动互联网来了,我..._大数据工程师月薪30k

计算机专业英语词汇总结-程序员宅基地

文章浏览阅读7.6k次,点赞20次,收藏244次。第一部分、计算机算法常用术语中英对照Data Structures 基本数据结构Dictionaries 字典Priority Queues 堆Graph Data Structures 图Set Data Structures 集合Kd-Trees 线段树Numerical Problems 数值问题Solving Linear Equations 线性方程组Bandwidth Reduction 带宽压缩Matrix Multiplication 矩阵乘法Determinants _计算机专业英语

OpenFalcon中plugin在FalconAgent中的使用概要说明_falcon plugins-程序员宅基地

文章浏览阅读323次。一、Plugin定义对于Plugin机制,叙述之前必须要强调一下: Plugin可以看做是对agent功能的扩充。对于业务系统的监控指标采集,最好不要做成plugin,而是把采集脚本放到业务程序发布包中,随着业务代码上线而上线,随着业务代码升级而升级,这样会比较容易管理。(承述来自OpenFalcon官方文档中关于plugin机制相关说明)二、Plugin使用步骤1...._falcon plugins

Android 应用程序版本(versionCode, versionName)-程序员宅基地

文章浏览阅读397次。在程序升级/维护过程中,版本控制是一个很重要的内容。用户需要了解安装到设备上的应用程序的版本信息,以及了解哪些版本可以进行升级。其它应用程序——包括你发布的其它程序——需要向系统查询你的应用程序的版本,来确定相互之间的兼容性。 你的应用程序发布的服务可能也需要查询版本来显示给用户。Android系统自身不检查应用程序的版本信息,也不会强制限制升级或兼容等。相反的,只是用户或应用程序