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

这是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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容