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