這是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數據。
先介紹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地址:
接下來用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