Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用另一个子矩阵的值子集HDF5矩阵_R_List_Latitude Longitude_Subset_Hdf5 - Fatal编程技术网

R 使用另一个子矩阵的值子集HDF5矩阵

R 使用另一个子矩阵的值子集HDF5矩阵,r,list,latitude-longitude,subset,hdf5,R,List,Latitude Longitude,Subset,Hdf5,我一直在使用HDF5文件,并且能够在rhdf5中进行一些子集设置。有三个文件:。经度、纬度和列数为2trop。我在一年中的所有日子里都将其提取为“文件”中的列表 但是,第一天2,2的地理位置可能与第二天不同。 我试图定义经度和纬度值以使用下面的子集,但它返回了一条错误消息 Lond<-c(2,9) Latd<-c(2,9) lonKeep <- which(Lon > Lond[1] & Lon < Lond[2]) latKeep <- which(

我一直在使用HDF5文件,并且能够在rhdf5中进行一些子集设置。有三个文件:。经度、纬度和列数为2trop。我在一年中的所有日子里都将其提取为“文件”中的列表

但是,第一天2,2的地理位置可能与第二天不同。 我试图定义经度和纬度值以使用下面的子集,但它返回了一条错误消息

Lond<-c(2,9)
Latd<-c(2,9)
lonKeep <- which(Lon > Lond[1] & Lon < Lond[2])
latKeep <- which(lat> latRan[1] & lat< latRan[2]) 
Lond您会发现,可能有一个更接近您需要的解决方案。
hdf5和光栅的一个选项是从hdf5文件中提取相关数据,构建光栅,将其裁剪到ROI并获取该区域的值

我会这样做:

library(raster)
library(maptools)
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
library(rhdf5)
library(latticeExtra)

my_wd <- './Stackoverflow/22474417'
files <- list.files(path = my_wd, pattern = ".he5", full.names = F)
files
#[1] "M1.he5" "M2.he5"

attribute <- "/HDFEOS/SWATHS/ColumnAmountNO2/Data Fields/ColumnAmountNO2Trop"
attribute2<- "/HDFEOS/SWATHS/ColumnAmountNO2/Geolocation Fields/Longitude"
attribute3<- "/HDFEOS/SWATHS/ColumnAmountNO2/Geolocation Fields/Latitude"

裁剪并从ROI中获取值

m1rf <- crop(m1r, frm)

spplot(m1rf, scales = list(draw = TRUE), xlim = c(1, 10), ylim=c(1, 10)) +
  latticeExtra::layer(sp.lines(delta, fill = NA, col = 'blue'))+
  latticeExtra::layer(sp.polygons(pfrm, fill = NA, col = 'red'))

m1rf您能添加一些数据吗?很抱歉,我最初复制错了。我已经在这里上传了示例文件[链接]()。我很快就会同时处理大约1000个文件。我想我找到了一个解决方案。我很快就会发布。你能告诉我们投资回报率吗?这个地方在哪里?好的。这是尼日利亚圣保罗的尼日尔三角洲地区,该方法是有效的,但不可能使用另一个包而不是R中的光栅将数据作为图像进行处理吗?这是因为栅格不相等,但光栅使它们相等。如果不可能,我会坚持下去。谢谢保罗。如果我们尝试一下我用来绘制图像的“字段”软件包呢?@JokeO。我从来没用过,但可以试试。这对你合适吗?我不确定我们从第一个文件中得到了正确的数据块。哦,是的,保罗,看起来不错。我今天会用你的方法再试一次。一旦我们有了方法,我就改变范围。嗨,保罗。谢谢除了上面的光栅方法之外,我还尝试了使用一个边界形状文件进行裁剪,效果很好。
Lond<-c(2,9)
Latd<-c(2,9)
lonKeep <- which(Lon > Lond[1] & Lon < Lond[2])
latKeep <- which(lat> latRan[1] & lat< latRan[2]) 
library(raster)
library(maptools)
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
library(rhdf5)
library(latticeExtra)

my_wd <- './Stackoverflow/22474417'
files <- list.files(path = my_wd, pattern = ".he5", full.names = F)
files
#[1] "M1.he5" "M2.he5"

attribute <- "/HDFEOS/SWATHS/ColumnAmountNO2/Data Fields/ColumnAmountNO2Trop"
attribute2<- "/HDFEOS/SWATHS/ColumnAmountNO2/Geolocation Fields/Longitude"
attribute3<- "/HDFEOS/SWATHS/ColumnAmountNO2/Geolocation Fields/Latitude"
m1 <- h5read(file.path(my_wd, files[1]), name = attribute)
dim(m1) # file dimension
# [1] 60 54
prod(dim(m1))
# [1] 3060
Lon <- h5read(file.path(my_wd, files[1]) , attribute2)
Lat <- h5read(file.path(my_wd, files[1]) , attribute3)

xmin <- min(Lon[1:prod(dim(m1))]) # Min. Longitude
# [1] -7.141283
xmax <- max(Lon[1:prod(dim(m1))]) # Max. Longitude
ymin <- min(Lat[1:prod(dim(m1))]) # Min. Longitude
ymax <- max(Lat[1:prod(dim(m1))]) # Max. Longitude
m1m <- matrix(m1, nrow = 60)    
m1r <- raster(m1m, xmn = xmin, xmx = xmax,
              ymn =  ymin, ymx = ymax)
data(wrld_simpl)
spdata <- wrld_simpl[which(wrld_simpl@data$NAME %in% c('Nigeria', 'Cameroon', 'Benin',
                                                       'Togo', 'Ghana',"Cote d'Ivoire",
                                                       'Gabon', 'Equatorial Guinea')), ] 
delta <- readOGR(dsn = './africa_shoreline_30m',
                 layer = 'nigeria_delta')
frm <- extent(c(2, 9, 2, 9))
pfrm <- as(frm, 'SpatialPolygons')
spplot(m1r,scales = list(draw = TRUE),  ylim=c(-1, 10)) +
  latticeExtra::layer(sp.polygons(stp, fill = NA, col = 'blue'))+
  latticeExtra::layer(sp.polygons(pfrm, fill = NA, col = 'red'))
m1rf <- crop(m1r, frm)

spplot(m1rf, scales = list(draw = TRUE), xlim = c(1, 10), ylim=c(1, 10)) +
  latticeExtra::layer(sp.lines(delta, fill = NA, col = 'blue'))+
  latticeExtra::layer(sp.polygons(pfrm, fill = NA, col = 'red'))
summary(m1rf)
                layer
Min.    -6.528723e+15
1st Qu.  9.437798e+14
Median   1.440395e+15
3rd Qu.  1.896734e+15
Max.     4.232078e+15
NA's     0.000000e+00

m1vals <- getValues(m1rf)