HDFS 将HDF子数据集提取到栅格或数据中,

tag5nh1u  于 2023-01-03  发布在  HDFS
关注(0)|答案(1)|浏览(366)

目前我正在尝试处理CALIPSO LiDAR数据。文件以HDF4格式分发(使用HDFView检查)。我感兴趣的子数据集是云顶高度,它存储在一个简单的表格中(56160行,5列):

到目前为止,我尝试了两件事:

    • A)使用gdal_translate(gdalUtils包)将HDF子数据集转换为GeoTiff**
# Get a list of sds names
sds <- get_subdatasets('C:\\Users\\Thomas\\Desktop\\NASA Sat Data\\Cloud Layer Data\\CAL_LID_L2_333mCLay-ValStage1-V3-01.2011-08-16T03-02-01ZN.hdf')

# Isolate name of subdataset and convert
name <- sds[25]
filename <- 'Cloud_Top_Height_Test.tif'
gdal_translate(name, dst_dataset = filename)

# Load the Geotiff created into R
r <- raster(filename)

# fix extent, projection and negative values
e <- extent(-80.016243, 64.831413, -179.183868, -1.711731)
r <- setExtent(r, e)
values(r)[values(r) < 0] = 0 # replace -9999 with NA
crs(r) <- '+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs'

结果是一个光栅文件,这是明显丢失任何空间信息(尺寸,扩展,crs,分辨率),这就是为什么我修复了一些东西后。
这就是结果:

.
正如你所看到的,结果是一些奇怪的线,而它应该是方形像素。我想我可能错过了gdal_translate调用中的一些语句?而且,所有的调整之后似乎有点麻木或让我们说'不专业'。

    • B)将表(子数据集)转换为数据框(以在第二步中将其转换为栅格)**

几天前,我想到了将子数据集(本质上"只是"一个表)转换为数据框,然后在第二步中将其转换为栅格,在栅格中,我"从头"指定所有空间信息,而不是像第一次尝试那样在事后调整它。尽管如此,我没有找到这样做的命令/包,我仍然不相信这是正确的方法。

    • 我最后需要的:**一个合适的(地理参考等)栅格(56160行,5列)保存HDF4文件中的子数据集的值。
    • 我的问题:**如何提取HDF4子数据集并将其转换为具有上述规范的栅格?

任何帮助是非常感谢(因为这是我的第一篇文章在SO:对不起,如果这个问题缺少论坛要求的任何形式,也欢迎批评)

xoshrz7s

xoshrz7s1#

要转换为 Dataframe :

as.data.frame(r, xy = TRUE)

相关问题