1

我正在尝试从这里下载并绘制 modis 数据http://orca.science.oregonstate.edu/1080.by.2160.monthly.hdf.vgpm.s.chl.a.sst.php

我经常使用来自海洋颜色网站的 .nc 文件,但我似乎无法以同样的方式使用 hdf 文件。可以将hdf转换为栅格吗?

gdalinfo("~vgpm.2008245.hdf")
gdal_translate(sds, dst_dataset = "~test.tiff")

sh:-c:第 0 行:寻找匹配的 ``' 时出现意外的 EOF
sh:-c:第 1 行:语法错误:文件
NULL的意外结尾

rast <- raster("~test.tiff")

.local(.Object, ...) 中的错误:

.rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", 中的错误:
无法从此文件创建 RasterLayer 对象。(文件不存在)

我已经尝试过这里的建议将 hdf 文件读入 R 并将它们转换为 geoTIFF 栅格

并收到此错误: sh: -c: line 0: unexpected EOF while looking for matching ``' sh: -c: line 1: syntax error: unexpected end of file

我也在这里尝试过将 HDF 转换为地理参考文件(geotiff,shapefile)的建议 ,错误是: .rasterObjectFromFile(x,band = band,objecttype = "RasterLayer", 中的错误:无法从该文件创建 RasterLayer 对象。

我只想提取数据并在我拥有的其他数据旁边的线图中绘制给定位置随时间变化的生产力数据......
谢谢

4

1 回答 1

0

在 Windows(如果已安装 hdf 驱动程序,则为 linux)上,您不需要转换这些文件。您可以直接使用它们

library(raster)
x <- raster("vgpm.2008245.hdf")
x
#class      : RasterLayer 
#dimensions : 1080, 2160, 2332800  (nrow, ncol, ncell)
#resolution : 1, 1  (x, y)
#extent     : 0, 2160, 0, 1080  (xmin, xmax, ymin, ymax)
#crs        : NA 
#source     : vgpm.2008245.hdf 
#names      : vgpm.2008245 

正如您在评论中指出的那样,范围不正确(并且未定义 CRS;也未设置 NA 标志)。你可以像这样修复它。

extent(x) <- extent(-180, 180, -90, 90)
crs(x) <- "+proj=longlat +datum=WGS84"
NAvalue(x) <- -9999

x
#class      : RasterLayer 
#dimensions : 1080, 2160, 2332800  (nrow, ncol, ncell)
#resolution : 0.1666667, 0.1666667  (x, y)
#extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#crs        : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#source     : vgpm.2008245.hdf 
#names      : vgpm.2008245 

如果你想要一个 tif 你可以这样做

 r <- writeRaster(x, "vgpm.2008245.tif"

这在过去的 Windows 上不起作用。显然它不适用于开箱即用的 Mac —— 取决于您安装 GDAL 的方式。我认为您需要使用自制软件使用“--with complete”安装 gdal2

于 2019-05-14T04:12:56.693 回答