我将使用可从此处下载的二进制文件(全球气候变量):
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°
但我的问题是如何知道它的纬度和长度?任何想法请求
答案 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)