GEE(ccdc-1)——利用Landsat系列影像获取研究区范围的多波段影像(包含ccdc中已经定义的多波段)

2023-12-18 10:30

本文主要是介绍GEE(ccdc-1)——利用Landsat系列影像获取研究区范围的多波段影像(包含ccdc中已经定义的多波段),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

在进行CCDC监测时,我们首先要做的就是获取研究区的长时间序列影像,让其保存在你的资产中,方便后面调用,这里我们要做的额就是根据代码,将我们时间范围进行选取和指定的研究区边界,剩下的采用默认参数即可。最后出现的结果是将ccdc代码中所需要的波段和影像中一些光谱波段加载到一起作为最终的影像参与分类和监测。

ccdc监测中所需的波段

Parameter NameDescriptionRecommended ValueEffect of Increasing
breakPointBandsBands to use to calculate test statistic and test for spectral changeGreen, Red, NIR, SWIR1, SWIR2N/A
tmaskBandsBands to use for multi-temporal cloud and cloud-shadow maskingGreen, SWIR2N/A
minObservationsNumber of consecutive observations exceeding threshold to flag a change4Less breaks detected
chiSquare ProbabilityThreshold on test statistic, which is calculated from the model residuals and follows a chiSquare distribution0.995Less breaks detected
minNumOfYears ScalerNumber of years after which a new model fit is calculated during training period1.33Decrease regression model refitting
dateFormatFormat to store date information. 0: julian years, 1: fractional years, 2: unix time.1N/A
lambdaLambda value for LASSO regression fitting.002More parameters shrinking to 0
maxIterationsMaximum iterations to perform LASSO regression fitting20,000Attempt more LASSO fits to reach convergence

app操作过程

时间和数据集选择

当我们打开代码的时候,我们就需要根据我们的需要监测的时间进行设定,这里按照标准的年月日进行设定,而 startDOY和endDOY分别指的是你在整个1987-2023年之间每一年要调用的影像的具体时间,设定范围为1-365,后台会自动按照你设定的时间进行指定范围内的影像筛选,在mask Image则是我们选择去云后有效的影像还是都要选,而Landsat系列影像一般都要囊括进去,这样才能保证长时序的监测,另外,我们还可以选择哨兵1好数据来加载到我们要下载的影像集合中。

 

CCDC参数的设定

这些参数的设定主要是特定的参数设置,所以这里一般情况下我选择默认参数,一般没有特殊需求既保持默认即可。

 圈定研究区范围

这里我们可以通过在地图上画,或者按照单个瓦片,或者多个瓦片,以及中线点等方式在地图上选择我们要导出的研究区。特别注意,慢慢点击地图上的五个点,应用程序就会生成一个矩形,作为输出范围的几何图形。最后一个点闭合的时候一定要靠近绘制的起始点。

 导出结果选项

这里可以选择导出到谷歌硬盘或者GEE资产中,一般建议后者,因为可以进行后续的CCDC操作。 

我的研究区最终结果如下:共有1635景影像,每年影像涵盖25个波段。

代码链接:

https://code.earthengine.google.com/?scriptPath=users%2Fparevalo_bu%2Fgee-ccdc-tools%3AAPPS%2Fsubmit_ccdc

代码:


//加载一个点用于定位
var geometry = /* color: #d63000 */ee.Geometry.Point([-69.68833790720782, -11.422826263974468]);//加载两个定义好的函数库
var utils = require('users/parevalo_bu/gee-ccdc-tools:ccdcUtilities/inputs.js')
var ccdc_utils = require('users/parevalo_bu/gee-ccdc-tools:ccdcUtilities/ccdc.js')var composite = require("users/google/toolkits:landcover/impl/composites.js").Composites/*** UI app等定义可视化参数和样式。* * 第一个字典包含标题参数,第二个字典包含 "运行 CCDC "按钮的样式。* 第二个字典包含 "运行 CCDC "按钮的样式。*/ 
var visLabels = {fontWeight: 'bold', fontSize: '14px', width: '590px',padding: '4px 4px 4px 4px',border: '1px solid black',color: 'white',backgroundColor: 'black',textAlign: 'left'}var runStyle = {fontWeight: 'bold', fontSize: '14px', width: '590px',padding: '4px 4px 4px 4px',border: '1px solid black',color: 'black',backgroundColor: 'white',textAlign: 'center'}  var sensor = 'landsat'/*** 全球 GLANCE 陆地网格。* * 该特征集包含所有大陆与陆地重叠区域的* 与陆地重叠区域的所有大陆的网格系统。* 有关 GLANCE 和网格的更多信息,请点击此处: *  http://sites.bu.edu/measures/*/ 
var grids = ee.FeatureCollection('projects/GLANCE/GRIDS/GEOG_LAND/GLANCE_v01_GLOBAL_TILE_LAND')/*** 用于放置 ui.Widgets 的面板。* * 有一个放置所有内容的主面板,以及一个名为geoPanel 的面板,用于放置选择输出范围的选项。*/ 
var mainPanel = ui.Panel({style: {width: '600px'}})
.add(ui.Label('Continuous Change Detection and Classification (CCDC)',visLabels))
.add(ui.Label('User interface for submitting CCDC'))
.add(ui.Label('Please see instructions'))
.add(ui.Label('Input Parameters',visLabels))ui.root.add(mainPanel)var geoPanel = ui.Panel()/*** 定义全局变量 * * 这样方便控件之间的交互变得更容易。*/ 
//定义变量名称和常量变量
var outGeo, outGeos, outGeosSize, tool, drive, asset
var h = 0
var v = 0
var r = 0
var geoType = 0
var regionList = ['Select Method','Draw on Map','Single Tile','Tile Intersecting Point','Multiple Tiles','Draw Multiple Tiles on Map']/*** 在地图上画出研究区的引用* * Written by Justin Braaten (I think): https://emapr.github.io/LT-GEE/* https://code.earthengine.google.com/82b08b69bd596ada4747cb4bb7ea9526* * 此功能可让您在地图上点击,点击 5 次后,这些位置就会连接起来,形成一个多边形。该多边形可用作 分析的地理范围。*/ 
var DrawAreaTool = function() {var map = Mapvar drawingToolLayer = ui.Map.Layer({name: 'Area Selection Tool', visParams: {palette:'#4A8BF4', color:'#4A8BF4' }});this.map = map;this.selection = null;this.active = false;this.points = [];this.area = null;this.listeners = [];var tool = this;this.initialize = function() {this.map.onClick(this.onMouseClick);map.layers().reset()map.layers().set(0, drawingToolLayer);};this.startDrawing = function() {this.active = true;this.points = [];this.map.style().set('cursor', 'crosshair');drawingToolLayer.setShown(true);};this.stopDrawing = function() {tool.active = false;tool.map.style().set('cursor', 'hand');if(tool.points.length < 2) {return;}var closedPoints = tool.points.slice(0,-1);tool.area = ee.Geometry.Polygon(closedPoints)///.bounds();var empty = ee.Image().byte();var test = empty.paint({featureCollection: ee.FeatureCollection(tool.area),color: 1,width: 4});drawingToolLayer.setEeObject(test);tool.listeners.map(function(listener) {listener(tool.area);});runButton.widgets().get(0).setDisabled(false)runButton.widgets().get(0).style().set('backgroundColor','#5ab4ac')};this.onMouseClick = function(coords) {if(!tool.active) {return;}tool.points.push([coords.lon, coords.lat]);var geom = tool.points.length > 1 ? ee.Geometry.LineString(tool.points) : ee.Geometry.Point(tool.points[0]);drawingToolLayer.setEeObject(geom);if(tool.points.length > 4) {tool.stopDrawing();}};this.onFinished = function(listener) {tool.listeners.push(listener);};this.initialize();
};/*** 绘制输出范围的辅助函数。* * 使用DrawAreaTool() 函数绘制输出范围。*/ 
function doAreaTool() {geoPanel.add(ui.Label('Slowly click five points on the map and the application will generate a rectangle for the output extent geometry.'))tool = new DrawAreaTool();tool.startDrawing();tool.onFinished(function(geometry) {outGeo = ee.Feature(geometry);});}/*** 绘制输出范围和查找重叠瓦片的辅助函数* * 使用DrawAreaTool() 函数绘制输出范围。*/ 
function drawMultipleTiles() {geoPanel.add(ui.Label('Slowly click five points on the map and the application will generate a rectangle for the output extent geometry.'))tool = new DrawAreaTool();tool.startDrawing();tool.onFinished(function(geometry) {var tempGeo = grids.filterBounds(geometry);tempGeo.size().evaluate(function(val) {if (val > 0) {outGeos = ee.FeatureCollection(tempGeo)Map.addLayer(outGeos, {},'Output Geometry')Map.centerObject(outGeos)runButton.widgets().get(0).setDisabled(false)runButton.widgets().get(0).style().set('backgroundColor','#5ab4ac')outGeosSize

这篇关于GEE(ccdc-1)——利用Landsat系列影像获取研究区范围的多波段影像(包含ccdc中已经定义的多波段)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/508066

相关文章

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的