1、Google Earth Engine
Google Earth Engine是Google推出的行星尺度的遥感云计算平台,提供了大量遥感数据的集成与运算工具。同时也包括DMSP和NPP夜间灯光遥感数据(月尺度和年尺度)。这里给出样例的可视化代码。
var dataset = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG')
.filter(ee.Filter.date('2020-01-01', '2020-02-28'));
var nighttime = dataset.select('avg_rad');
var nighttimeVis = {min: 0.0, max: 60.0};
Map.setCenter(-77.1056, 38.8904, 8);
Map.addLayer(nighttime, nighttimeVis, 'Nighttime');
运行结果。
月尺度和年尺度产品提供的是tiff产品。可以在ArcGIS和ENVI里进行进一步处理。
2、日尺度hdf5数据读取与可视化(ENVI)
关于用ENVI读取日尺度hdf5数据的方式,详情参见以下文档。
NPP VIIRS Datasets
3 日尺度hdf5数据读取与可视化(R语言)
这里也介绍下如何在R语言里读取hdf5以及转换格式。基础的两个包分别为raster和rhdf5。其中rhdf5必须通过BioManager包安装。这里是安装命令。
install.packages('raster')
install.packages('BioManager')
BioManager::install('rhdfr')
hdf5是一个在科学计算领域有广泛应用的数据格式,可以理解为多个文件夹压缩而成的格式。对于这类文件读取,首先需要先了解文件的结构才能读取。这里采用的命令就是h5ls。
h5ls(filename)
filename为hdf5文件名。如下图所示给出了NPP夜间灯光遥感数据hdf5文件的具体结构。
我们所需要用到的属性包括All_Data/VIIRS-DNB-GEO_All/下的Longitude和Latitude,以及All_Data/VIIRS-DNB-SDR_All/下的radiance,即夜间灯光DNB波段值。利用h5read函数读取这几个数据,命令行如下。
dnblat <- h5read(filename, 'All_Data/VIIRS-DNB-GEO_All/Latitude')
dnblon <- h5read(filename, 'All_Data/VIIRS-DNB-GEO_All/Longitude')
dnbrad <- h5read(filename, 'All_Data/VIIRS-DNB-SDR_All/Radiance')
这样即得到了夜间灯光遥感数据矩阵形式存储的经度,纬度以及波段值。接下来将三个矩阵组合成一个栅格即可。根据如下代码即可得到一个栅格数据。
radpts <- cbind(long = as.vector(dnblon), lat = as.vector(dnblat), rad = as.vector(dnbrad))
radpts <- data.frame(radpts)
colnames(radpts) <- c("x", "y", "radiance")
e <- extent(randpts[, (1:2)])
r <- raster(e, ncol = ncol(dnbrad), nrow = nrow(dnbrad), crs = "+proj=longlat + datum=WGS84")
radr <- rasterize(radpts[, (1:2), r, radpts[,3], fun = mean)
简单可视化结果如图。
另外可以看到这个DNB波段值数值较小,是经过缩放的,需要乘以10的9次方使得DNB波段值呈现正常范围。当然日尺度的数据由于云,月相等因素的影响,质量还有待提升。