如何识别全局矩阵的lat和long?

时间:2013-11-27 14:16:01

标签: r matrix

我将使用可从此处下载的二进制文件(全球气候变量):

  ftp://sidads.colorado.edu/pub/DATASETS/nsidc0301_amsre_ease_grid_tbs/global/ 

此文件是带有586 lines and 1383 columns(全局映射)的二进制(矩阵)文件。 我想提取一个100 longitude and 50 latitude的值。

我可以使用x和y提取任何点:

    X<-450 ; Y<-145 
    extract<-vector()
file<- readBin(conne, integer(), size=2,  n=586*1383, signed=T)
file2<-t(t(matrix(data=file,ncol=1383,nrow=586)))
extract[file2]<-file2[X,Y]

更多信息:

These data are provided in EASE-Grid projections global cylindricalat 25 km resolution, are two-
      byte 
    Spatial Coordinates:
    N: 90°     S: -90°     E: 180°     W: -180°    

但我的问题是如何知道它的纬度和长度?任何想法请求

2 个答案:

答案 0 :(得分:2)

我会使用光栅包并将数据转换为栅格对象。像:

> file<- readBin("ID2r1-AMSRE-ML2010001A.v03.06H", integer(), size=2,  n=586*1383, signed=T)
> m = matrix(data=file,ncol=1383,nrow=586,byrow=TRUE)
> r = raster(m, xmn=-180, xmx=180, ymn=-90, ymx=90)
> plot(r)

现在你有一个适当的空间参考对象,但如果没有使用圆柱投影的完整规格,你就无法回到纬度 - 坐标。

经度很容易,但纬度并非如此 - 我对-90和+90的使用可能使其在极地和赤道上正确但不在其他地方。如果它是一个正确的圆柱投影,那么正弦和余弦将会解决它,但如果你有一个类似PROJ.4格式的投影规范,那么有更好的方法。

这里有更多信息http://nsidc.org/data/ease/tools.html,包括指向一些网格的链接,这些网格具有该网格系统的lat-long网格单元格:

ftp://sidads.colorado.edu/pub/tools/easegrid/lowres_latlon/

例如,您可以为数据网格中的单元格创建一个纬度栅格:

> lat <- readBin("MLLATLSB",integer(), size=4,  n=586*1383, endian="little")/100000
> latm = matrix(data=lat,ncol=1383,nrow=586,byrow=TRUE)
> latr = raster(latm, xmn=-180, xmx=180, ymn=-90, ymx=90)
> plot(latr)

然后latr[450,123]是数据中单元格[450,123]的纬度。对经度重复MLLONLSB

答案 1 :(得分:1)

以下是我如何去做。

f <- "ftp://sidads.colorado.edu/pub/DATASETS/nsidc0301_amsre_ease_grid_tbs/global/2002/ID2r1-AMSRE-ML2002170A.v03.06H.gz"
download.file(f, basename(f), mode = "wb")

con <- gzfile(basename(f), open = "rb")
mdat <- readBin(con, integer(), size=2,  n=586*1383, signed=TRUE)
close(con)

mdat <- matrix(data = mdat,ncol=1383,nrow=586,byrow=TRUE)
library(raster)
library(rgdal)
## build a dummy longlat raster and project its extent
## this proj string may not be enough, should be documented though
prj <- "+proj=cea +ellps=WGS84"
ex <- extent(projectExtent(raster(xmn = -180, xmx = 180, ymn = -90, ymx = 90, crs = "+proj=longlat"), prj))

r <- setValues(raster(ex, nrows = 586, ncols = 1383, crs = prj), mdat)

现在我们可以以原生形式绘制此栅格,并将其他数据转换为它:

library(maptools)
data(wrld_simpl)
plot(r)
plot(spTransform(wrld_simpl, CRS(projection(r))), add = TRUE)

enter image description here