MODIS数据的简介和下载(三)——MODIS数据下载方式(基于MODIS Web Service)

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ESA_DSQ/article/details/70176214 这是MODIS数据的简介和下载的最后一篇,下载方式的进阶版——基于MODIS Web Service的下载方式。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ESA_DSQ/article/details/70176214

这是MODIS数据的简介和下载的最后一篇,下载方式的进阶版——基于MODIS Web Service的下载方式。
这篇是笔者课程上机实习内容之一,做些简要总结和整理。
事实上MODIS产品系列就如前面提到的,由于搭载在Terra星和Aqua星上,所以产品就包括了Terra星、Aqua星以及二者集成的产品。分别以MOD(Terra星)、MYD(Aqua星)、MCD(二者集成)作区分。具体的产品查询网站除了前面文章简单提到的之外,还可以查看官网。

https://lpdaac.usgs.gov/dataset_discovery/modis/modis_products_table/

当然这一次进阶版的下载方式是基于Web Service的。那么Web Service是什么呢?这边引用了课程ppt的一段话。

Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。

简单说,这是个方便你下载的插件。具体的下载地址就在下面了。官方提供了多种语言的客户端,包括Java,Perl,Python,Kepler,Matlab和R。本篇主要介绍Matlab和R的客户端如何下载MODIS数据。

https://modis.ornl.gov/data/modis_webservice.html

先介绍Matlab的客户端,首先在官网下载Matlab的客户端。
这里写图片描述

客户端压缩包文件:

这里写图片描述

客户端在Matlab的部署非常简单。只需要拷贝到Matlab的工作目录即可。当然使用的时候要求位于如图的路径中。

这里写图片描述

接下来就可以愉快地使用了。当然,由于官方的镜像搬迁的问题,需要更新对应的镜像地址。

这里写图片描述

对应在Matlab客户端的modisClient.m文件中找到替换的镜像地址,保存后即可开始使用。

这里写图片描述

在Matlab中调用不含任何参数的modisClient,可以看到可供下载的MODIS产品列表。

modisClient()

这里写图片描述

用产品名称作为参数,则可以看到该产品下所有数据集。

modisClient('MOD15A2')

这里写图片描述

modisClient('MOD15A2','Lai_1km',36.833,116.567)

加上数据集名称(以1 km的叶面积指数数据为例)以及经纬度坐标。结果为对应的数据集(该数据8天为间隔)所在的时间范围。

这里写图片描述

在前面的基础上加上时间范围即可用客户端下载对应的MODIS数据。数据的下载格式是一个多元结构体。包括了数据、转换因子、对应时间序列和单位等等。这样我们就用Matlab下载到了对应的MODIS数据。

YC_LAI2009=modisClient('MOD15A2','Lai_1km',36.833,116.567,2009000,2009365)

这里写图片描述
这里写图片描述

接下来我们讲的是R语言的客户端及其下载方式。R语言的客户端有两种配置方法,一个是基础设置(基于SSOAP来进行),一个是高级设置(MODISTools包)。
笔者个人使用的是高级设置,基础设置没有配置过。只是对官方给出的例子做了下翻译,具体的demo如下:

##确定你安装了SSOAP包,否则先安装SSOAP,用install.packages("SSOAP")
##接着你就可以尝试用命令行的方式来下载裁切你想要的MODIS影像数据了

## 载入包
library(SSOAP)

## 获取SOAP服务
ornlMODIS = processWSDL("http://daac.ornl.gov/cgibin/MODIS/GLBVIZ_1_Glb_subset/MODIS_webservice.wsdl")

## 定义函数设置
ornlMODISFuncs = genSOAPClientInterface(operations=ornlMODIS@operations[[1]], def=ornlMODIS)

## 使用获取裁切影像的函数设定
result = ornlMODISFuncs@functions$getsubset(40.115,-110.025,
"MOD11A2","LST_Day_1km","A2001001","A2001025",1,1)

##打印结果
print(result)

基础设置R语言demo地址:

https://modis.ornl.gov/files/modiswebservice/R_getsubset.r

接下来用MODISTools包来做测试,GetProducts函数类似于Matlab的moidsClient():

GetProducts()

这里写图片描述

而对应的查看数据集的函数并不是在GetProdcuts函数中填入参数,而是使用GetBands函数。

GetBands("MOD15A2")

这里写图片描述

对应查看数据时间范围的函数为GetDates。

GetDates(36.833,116.567,"MOD15A2")

这里写图片描述

而类似于Matlab客户端下载数据的函数则为GetSubset和MODISSubsets。

YC_LAI2009<-GetSubset(36.833,116.567,"MOD15A2","Lai_1km","A2009001","A2009081",KmAboveBelow = 0,KmLeftRight = 0)

GetSubset函数较为简单。但笔者测试时,发现终止时间仅能到达第81天(LAI数据为8天合成产品)。目前尚不清楚具体原因,故最后使用MODISSubsets获取对应的数据。MODISSubsets必须先建立一个数据框作为经纬度(lat,long为字段名),时间限制范围(start.date,end.date为字段名)的数据。而函数中比较重要的参数还包括了Size和TimeSeriesLength,Size可以用默认值(经纬度位置所处瓦片数量,c(0,0)表示像元中心值),TimeSeriesLength表示时间序列长度,等于1代表从一年的开头到结尾。运行程序,会发现在工作目录下生成了一个.asc文件(即对应MODIS下载下来的数据)。

yclai2009<-data.frame(lat=36.833,long=116.567,start.date=2009,end.date=2009)
MODISSubsets(LoadDat = yclai2009,Products = "MOD15A2",Bands = "Lai_1km",Size = c(0,0),StartDate = T,TimeSeriesLength = 1)

最后对获取的LAI数据进行绘图可视化。

#Matlab中
Puredata=[YC_LAI2009.data(:,:)]
plot([0:(length(Puredata)-1)]*8+1,Puredata*YC_LAI2009.scale,'b-')
ylabel=(YC_LAI2009.units)
xlabel=('day of year')
title=('禹城站2009年LAI')

#R中
a<-read.table("Lat36.83300Lon116.56700Start2009-01-01End2009-12-31___MOD15A2.asc",sep = ",")
lai<-data.frame(day=seq(1,365,8),lai=a$V11*0.1)
plot(lai,type="l",pch=16,col="blue",xlab="day of year",ylab="LAI",main="禹城站2009年LAI")

Matlab绘图结果
这里写图片描述

R绘图结果
这里写图片描述

总的来说,Matlab和R的客户端下载各有优缺点,而基于MODIS Web Service的下载方式最大好处就是在于它的Subset功能,而不是需要先下载整景影像再处理。在做单点模型的时候是非常快捷的。当然客户端的其它函数还有很多,包括像质量控制。本文没有对数据进行质量控制。实际研究中这个是必须进行的步骤(也可以基于客户端的函数来进行,譬如R里面的QualityCheck函数,Matlab的modisClientGetQC等)。
此外地理所也开发了在线平台,研究人员只需填写所需参数即可下载。

http://159.226.110.142/carboncloud/datetool/toolmethod?url=onlinedo&pId=3

目录
相关文章
|
2月前
|
前端开发 JavaScript Python
Python Web应用中的WebSocket实战:前后端分离时代的实时数据交换
在前后端分离的Web应用开发模式中,如何实现前后端之间的实时数据交换成为了一个重要议题。传统的轮询或长轮询方式在实时性、资源消耗和服务器压力方面存在明显不足,而WebSocket技术的出现则为这一问题提供了优雅的解决方案。本文将通过实战案例,详细介绍如何在Python Web应用中运用WebSocket技术,实现前后端之间的实时数据交换。
107 0
|
1月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
49 3
|
1月前
【Azure App Service】PowerShell脚本批量添加IP地址到Web App允许访问IP列表中
Web App取消公网访问后,只允许特定IP能访问Web App。需要写一下段PowerShell脚本,批量添加IP到Web App的允许访问IP列表里!
|
2月前
|
存储 前端开发 API
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
135 0
|
2月前
|
存储 JSON 前端开发
JSON与现代Web开发:数据交互的最佳选择
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也便于机器解析和生成。它以文本格式存储数据,常用于Web应用中的数据传输,尤其是在客户端和服务器之间。
88 0
|
3月前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
102 1
|
3月前
|
JavaScript 前端开发
【前端web入门第一天】03 综合案例 个人简介与vue简介
该网页采用“从上到下,先整体再局部”的制作思路,逐步分析并编写代码实现个人简介页面。内容涵盖尤雨溪的背景、学习经历及主要成就,同时介绍其开发的Vue.js框架特点。代码结构清晰,注重细节处理,如使用快捷键提高效率,预留超链接位置等,确保最终效果符合预期。
|
4月前
|
物联网 C# 智能硬件
智能家居新篇章:WPF与物联网的智慧碰撞——通过MQTT协议连接与控制智能设备,打造现代科技生活的完美体验
【8月更文挑战第31天】物联网(IoT)技术的发展使智能家居设备成为现代家庭的一部分。通过物联网,家用电器和传感器可以互联互通,实现远程控制和状态监测等功能。本文将探讨如何在Windows Presentation Foundation(WPF)应用中集成物联网技术,通过具体示例代码展示其实现过程。文章首先介绍了MQTT协议及其在智能家居中的应用,并详细描述了使用Wi-Fi连接方式的原因。随后,通过安装Paho MQTT客户端库并创建MQTT客户端实例,演示了如何编写一个简单的WPF应用程序来控制智能灯泡。
156 0
|
4月前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
63 0
|
4月前
|
Java 开发者 关系型数据库
JSF与AWS的神秘之旅:如何在云端部署JSF应用,让你的Web应用如虎添翼?
【8月更文挑战第31天】在云计算蓬勃发展的今天,AWS已成为企业级应用的首选平台。本文探讨了在AWS上部署JSF(JavaServer Faces)应用的方法,这是一种广泛使用的Java Web框架。通过了解并利用AWS的基础设施与服务,如EC2、RDS 和 S3,开发者能够高效地部署和管理JSF应用。文章还提供了具体的部署步骤示例,并讨论了使用AWS可能遇到的挑战及应对策略,帮助开发者更好地利用AWS的强大功能,提升Web应用开发效率。
75 0