R 如何在全局文件中查找像素(单元)的4个坐标(lat-long)?

R 如何在全局文件中查找像素(单元)的4个坐标(lat-long)?,r,geolocation,raster,gis,R,Geolocation,Raster,Gis,我使用的气候变量可从此处下载: ftp://sidads.colorado.edu/pub/DATASETS/nsidc0301_amsre_ease_grid_tbs/global/ 此文件是一个二进制(矩阵)文件,具有586行和1383列(全局映射)。 我想知道像素(单元)的4个坐标(lat-long) 有关该文件的详细信息: These data are provided in EASE-Grid projections global cylindricalat 25 km res

我使用的气候变量可从此处下载:

  ftp://sidads.colorado.edu/pub/DATASETS/nsidc0301_amsre_ease_grid_tbs/global/ 
此文件是一个二进制(矩阵)文件,具有
586行和1383列(全局映射)。
我想知道像素(单元)的4个坐标(lat-long)

有关该文件的详细信息:

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°    
使用光栅包并将数据转换为光栅对象:

 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)
例如,我们可以为数据网格中的单元格创建纬度光栅:

> 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)
>lat latm=矩阵(数据=lat,ncol=1383,nrow=586,byrow=TRUE)
>latr=光栅(latm,xmn=-180,xmx=180,ymn=-90,ymx=90)
然后
latr[450123]
是我的数据中单元格[450123]的纬度。对经度重复使用
MLLONLSB

但是,这还不够(每个像素一个lat和long),因为我想与基于地面的测量进行比较,所以我需要定义与该像素对应的区域(25*25 km或0.25度)。为此,我必须知道该像素(单元)的4个坐标(lat-long)。
感谢您的帮助

EASE GRID使用EPSG 3410定义的全局圆柱形等面积投影,该投影是公制的。在我看来,空间范围应该以米为单位,而不是地理坐标。 从中可以看出,地图范围坐标为:

xmin:-17609785.303313

ymin:-7389030.516717

xmax:17698276.686747

ymax:7300539.133283

所以稍微修改一下你的代码我们就有了

library(raster)
library('rgdal')
wdata <- 'D:/Programacao/R/Raster/Stackoverflow'
wshp <- 'S:/Vetor/Administrativo/Portugal'
#setwd(wdata)
file <- readBin(file.path(wdata, "ID2r1-AMSRE-ML2010001D.v03.06H"),
               integer(), size=2,  n=586 * 1383, signed=T)
m <- matrix(data = file, ncol = 1383, nrow = 586, byrow = TRUE)
-17609785.303313 -7389030.516717 17698276.686747 7300539.133283
rm <- raster(m, xmn = -17609785.303313, xmx = 17698276.686747,
             ymn = -7389030.516717, ymx = 7300539.133283)
proj4string(rm) <- CRS('+init=epsg:3410')

> rm
class       : RasterLayer 
dimensions  : 586, 1383, 810438  (nrow, ncol, ncell)
resolution  : 25530.05, 25067.53  (x, y)
extent      : -17609785, 17698277, -7389031, 7300539  (xmin, xmax, ymin, ymax)
coord. ref. : +init=epsg:3410 +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs 
data source : in memory
names       : layer 
values      : 0, 3194  (min, max)

writeRaster(rm, file.path('S:/Temporarios', 'easegrridtest.tif'), overwrite = TRUE)
plot(rm, asp = 1)
并可能在地图(或绘图)中识别ROI(单个单元格)

在这种特殊情况下,123和450似乎远离任何大陆区域

希望能有帮助


更多关于AMSR-E/Aqua每日网格亮度温度的信息

这一特定数据的epsg代码是什么?恐怕不完全是这样。与来自EASE Grid usgin EPSG 3410数据的数据相比,范围不尽相同。此外,3410是公制(检查范围和值)。你能检查一下吗?实际上是可以的,以提供的图像作为参考。我无法正确设置分辨率。@sacvf您能提供十进制度数(未投影坐标)吗?
library(raster)
library('rgdal')
wdata <- 'D:/Programacao/R/Raster/Stackoverflow'
wshp <- 'S:/Vetor/Administrativo/Portugal'
#setwd(wdata)
file <- readBin(file.path(wdata, "ID2r1-AMSRE-ML2010001D.v03.06H"),
               integer(), size=2,  n=586 * 1383, signed=T)
m <- matrix(data = file, ncol = 1383, nrow = 586, byrow = TRUE)
-17609785.303313 -7389030.516717 17698276.686747 7300539.133283
rm <- raster(m, xmn = -17609785.303313, xmx = 17698276.686747,
             ymn = -7389030.516717, ymx = 7300539.133283)
proj4string(rm) <- CRS('+init=epsg:3410')

> rm
class       : RasterLayer 
dimensions  : 586, 1383, 810438  (nrow, ncol, ncell)
resolution  : 25530.05, 25067.53  (x, y)
extent      : -17609785, 17698277, -7389031, 7300539  (xmin, xmax, ymin, ymax)
coord. ref. : +init=epsg:3410 +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs 
data source : in memory
names       : layer 
values      : 0, 3194  (min, max)

writeRaster(rm, file.path('S:/Temporarios', 'easegrridtest.tif'), overwrite = TRUE)
plot(rm, asp = 1)
afr <- readOGR(dsn = file.path(wdata), layer = 'Africa_final1_dd84')
proj4string(afr) <- CRS('+init=epsg:4326') # Asign projection 
afr1 <- spTransform(afr, CRS(proj4string(rm)))

plot(afr1, add = T)
cell <- cellFromXY(rm, matrix(c('x'= -150000, 'y' =200000), nrow = 1, byrow = T))
r2 <- rasterFromCells(rm, cell, values=TRUE)
extent(r2)
class       : Extent 
xmin        : -172759.8 
xmax        : -147229.7 
ymin        : 181362 
ymax        : 206429.6 
cell <- cellFromXY(rm, matrix(c('x'= -1538000, 'y' =1748000), nrow = 1, byrow = T))
r2 <- rasterFromCells(rm, cell, values=TRUE)
r2p <- as(r2, 'SpatialPolygons')
extr2 <- extent(r2) + 300000
plot(rm,  col = heat.colors(6), axes = T, ext = extr2)
plot(afr1, add = T, col = 'grey70')
plot(r2p, add = T)
cell2 <- cellFromRowCol(rm, rownr = mycellnrow, colnr = mycellnrow)
r3 <- rasterFromCells(rm, cell2, values=TRUE)
r3p <- as(r3, 'SpatialPolygons')
extr3 <- extent(r3) + 3000000