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

相关文章

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格